From d1cf01148efb2bfc03079da471c71cb7f3826ef0 Mon Sep 17 00:00:00 2001 From: Hakase <hakase@hakase.app> Date: Sun, 21 Oct 2018 16:00:36 +0900 Subject: [PATCH] Add openssl-1.1.1-tls13_nginx_config.patch --- README.md | 2 +- openssl-1.1.1-tls13_nginx_config.patch | 91 ++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 openssl-1.1.1-tls13_nginx_config.patch diff --git a/README.md b/README.md index 6926d72..04e6261 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Here is the basic patch content. | openssl-equal-1.1.1.patch<br>openssl-equal-1.1.2-dev.patch | Support **final (TLS 1.3)**, TLS 1.3 cipher settings **_can not_** be changed on _nginx_. | | openssl-equal-1.1.1_ciphers.patch<br>openssl-equal-1.1.2-dev_ciphers.patch | Support **final (TLS 1.3)**, TLS 1.3 cipher settings **_can_** be changed on _nginx_. | | openssl-1.1.1-chacha_draft.patch | A draft version of chacha20-poly1305 is available. [View issue](https://github.com/hakasenyang/openssl-patch/issues/1#issuecomment-427554824) | - +| openssl-1.1.1-tls13_nginx_config.patch | You can set TLS 1.3 ciphere in nginx. ex) TLS13+AESGCM+AES128 | **The "_ciphers" patch file is a temporary change to the TLS 1.3 configuration.** Example of setting TLS 1.3 cipher in nginx: diff --git a/openssl-1.1.1-tls13_nginx_config.patch b/openssl-1.1.1-tls13_nginx_config.patch new file mode 100644 index 0000000..5d388fc --- /dev/null +++ b/openssl-1.1.1-tls13_nginx_config.patch @@ -0,0 +1,91 @@ +diff --git a/ssl/s3_lib.c b/ssl/s3_lib.c +index 7713f767b2..c1725bd3a3 100644 +--- a/ssl/s3_lib.c ++++ b/ssl/s3_lib.c +@@ -31,7 +31,25 @@ const unsigned char tls12downgrade[] = { + }; + + /* The list of available TLSv1.3 ciphers */ ++/* Since nginx can not set the TLS 1.3 cipher, remove it temporarily. */ + static SSL_CIPHER tls13_ciphers[] = { ++ { ++ 0, ++ } ++}; ++ ++/* ++ * The list of available ciphers, mostly organized into the following ++ * groups: ++ * Always there ++ * EC ++ * PSK ++ * SRP (within that: RSA EC PSK) ++ * Cipher families: Chacha/poly, Camellia, Gost, IDEA, SEED ++ * Weak ciphers ++ */ ++static SSL_CIPHER ssl3_ciphers[] = { ++ /* TLSv1.3 ciphers */ + { + 1, + TLS1_3_RFC_AES_128_GCM_SHA256, +@@ -111,20 +129,8 @@ static SSL_CIPHER tls13_ciphers[] = { + SSL_HANDSHAKE_MAC_SHA256, + 128, + 128, +- } +-}; +- +-/* +- * The list of available ciphers, mostly organized into the following +- * groups: +- * Always there +- * EC +- * PSK +- * SRP (within that: RSA EC PSK) +- * Cipher families: Chacha/poly, Camellia, Gost, IDEA, SEED +- * Weak ciphers +- */ +-static SSL_CIPHER ssl3_ciphers[] = { ++ }, ++ /* List of cipher below TLSv1.3 */ + { + 1, + SSL3_TXT_RSA_NULL_MD5, +diff --git a/ssl/ssl_ciph.c b/ssl/ssl_ciph.c +index 14066d0ea4..458b67f383 100644 +--- a/ssl/ssl_ciph.c ++++ b/ssl/ssl_ciph.c +@@ -294,6 +294,7 @@ static const SSL_CIPHER cipher_aliases[] = { + {0, SSL_TXT_TLSV1, NULL, 0, 0, 0, 0, 0, TLS1_VERSION}, + {0, "TLSv1.0", NULL, 0, 0, 0, 0, 0, TLS1_VERSION}, + {0, SSL_TXT_TLSV1_2, NULL, 0, 0, 0, 0, 0, TLS1_2_VERSION}, ++ {0, "TLS13", NULL, 0, 0, 0, 0, 0, TLS1_3_VERSION}, + + /* strength classes */ + {0, SSL_TXT_LOW, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, SSL_LOW}, +@@ -1538,6 +1539,9 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, + ssl_cipher_apply_rule(0, SSL_kDHE | SSL_kECDHE, 0, 0, SSL_AEAD, 0, 0, + CIPHER_BUMP, -1, &head, &tail); + ++ ssl_cipher_apply_rule(0, 0, 0, 0, 0, TLS1_3_VERSION, 0, CIPHER_BUMP, -1, ++ &head, &tail); ++ + /* Now disable everything (maintaining the ordering!) */ + ssl_cipher_apply_rule(0, 0, 0, 0, 0, 0, 0, CIPHER_DEL, -1, &head, &tail); + +@@ -1594,15 +1598,6 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, + return NULL; + } + +- /* Add TLSv1.3 ciphers first - we always prefer those if possible */ +- for (i = 0; i < sk_SSL_CIPHER_num(tls13_ciphersuites); i++) { +- if (!sk_SSL_CIPHER_push(cipherstack, +- sk_SSL_CIPHER_value(tls13_ciphersuites, i))) { +- sk_SSL_CIPHER_free(cipherstack); +- return NULL; +- } +- } +- + /* + * The cipher selection for the list is done. The ciphers are added + * to the resulting precedence to the STACK_OF(SSL_CIPHER).