Home

Awesome

openssl-patch

OpenSSL Patch

This file is not an official OpenSSL patch. Problems can arise and this is your responsibility.

Original Sources

Information

Displays TLSv1.3 support for large sites.

Default support is in bold type.

Compatible OpenSSL-3.0.0-dev (OpenSSL, 25375 commits)

Compatible OpenSSL-3.0.0-dev-revert (OpenSSL, 25746 commits)

Patch files

The equal preference patch(openssl-equal-x) already includes the tls13_draft patch and the tls13_nginx_config(_ciphers file only) patch. Therefore, you do not need to patch it together.

You can find the OpenSSL 1.1.0h patch is here.

Here is the basic patch content.

Patch file namePatch list
openssl-equal-1.1.1(x).patch<br>openssl-equal-3.0.0-dev.patchSupport final (TLS 1.3), TLS 1.3 cipher settings can not be changed on nginx.
openssl-equal-1.1.1(x)_ciphers.patch<br>openssl-equal-3.0.0-dev_ciphers.patchSupport final (TLS 1.3), TLS 1.3 cipher settings can be changed on nginx.
openssl-1.1.1(x)-chacha_draft.patch<br>openssl-3.0.0-dev-chacha_draft.patchA draft version of chacha20-poly1305 is available. View issue
openssl-1.1.1a-tls13_draft.patchOnly for TLS 1.3 draft 23, 26, 28, final support patch.
openssl-1.1.1a-tls13_nginx_config.patchYou can set TLS 1.3 ciphere in nginx. ex) TLS13+AESGCM+AES128
openssl-1.1.1c-prioritize_chacha_draft.patchPriority applied patch for CHACHA20 and CHACHA20-DRAFT. View Pull Request
openssl-3.0.0-session_tls13.patchFor TLS 1.2 and below, the existing session timeout value is written. For TLS 1.3, 172800 (2 days) is fixed.
openssl-3.0.0-dev_version_error.patchTEST This is a way to fix nginx when the following errors occur during the build:<br>Error: missing binary operator before token "("<br>Maybe patched: https://github.com/openssl/openssl/pull/7839<br>Patched : https://github.com/openssl/openssl/commit/5d609f22d28615c45685d9da871d432e9cb81127
openssl-3.0.0-dev_revert.patchTEST This file will revert the patch to use the old OpenSSL API. (This is an unsafe temporary measure.)
openssl-3.0.0-dev-chacha_draft_revert.patch<br>openssl-equal-3.0.0-dev_ciphers_revert.patch<br>openssl-equal-3.0.0-dev_revert.patchTEST These patches should be used after patching the openssl-3.0.0-dev_revert.patch file first.

The "_ciphers" patch file is a temporary change to the TLS 1.3 configuration.

Example of setting TLS 1.3 cipher in nginx:

ExampleCiphers
Short CipherTLS13+AESGCM+AES128:TLS13+AESGCM+AES256:TLS13+CHACHA20
Fullname CipherTLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
TLS 1.3 + 1.2 ciphersTLS13+AESGCM+AES128:EECDH+AES128

Not OpenSSL patch files

Patch file namePatch list
nginx_hpack_push.patchPatch both the HPACK patch and the PUSH ERROR.
nginx_hpack_push_fix.patchPatch only the PUSH ERROR of the hpack patch. (If the HPACK patch has already been completed)
remove_nginx_server_header.patchRemove nginx server header. (http2, http1.1)
nginx_hpack_remove_server_header_1.15.3.patchHPACK + Remove nginx server header. (http2, http1.1)
nginx_strict-sni.patchEnable Strict-SNI. Thanks @JemmyLoveJenny. View issue
nginx_openssl-1.1.x_renegotiation_bugfix.patchBugfix Secure Client-Initiated Renegotiation. (Check testssl.sh) OpenSSL >= 1.1.x, nginx = 1.15.4<br>Patched nginx 1.15.5
nginx_ocsp.shSome of the parts that can not get OCSP Stapling value at nginx start or reload are solved.<br>OCSP stapling in nginx is made up of a callback, so you only need to connect at least once to get the value.<br>This file is a temporary file and may not work normally.
nginx_io_uring.patchAdd io_uring support patch. Thanks @CarterLi. View how to install

How To Use?

OpenSSL Patch

git clone https://github.com/openssl/openssl.git
git clone https://github.com/hakasenyang/openssl-patch.git
cd openssl
patch -p1 < ../openssl-patch/openssl-equal-3.0.0-dev_ciphers.patch

And then use --with-openssl in nginx or build after ./config.

OpenSSL CHACHA20-POLY1305-OLD Patch

Thanks @JemmyLoveJenny!

View issue / Original Source

git clone https://github.com/openssl/openssl.git
git clone https://github.com/hakasenyang/openssl-patch.git
cd openssl
patch -p1 < ../openssl-patch/openssl-1.1.1a-chacha_draft.patch

nginx HPACK Patch

Run it from the nginx directory.

If you have a PUSH patch, use it as follows.

curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/nginx_hpack_push_fix.patch | patch -p1

If you did not patch PUSH, use it as follows.

curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/nginx_hpack_push.patch | patch -p1

And then check the nginx configuration below.

nginx Remove Server Header Patch

Run it from the nginx directory.

curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/remove_nginx_server_header.patch | patch -p1

nginx strict-sni patch

Run it from the nginx directory.

curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/nginx_strict-sni.patch | patch -p1

This is a condition for using strict sni. View issue.

Thanks @JemmyLoveJenny, @NewBugger!

nginx OpenSSL-1.1.x Renegotiation Bugfix

It has already been patched by nginx >= 1.15.4.

Run it from the nginx directory.

curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/nginx_openssl-1.1.x_renegotiation_bugfix.patch | patch -p1

io_uring Patch

View this link.

nginx Configuration

HPACK Patch

Add configure arguments : --with-http_v2_hpack_enc

SSL Setting

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers [Copy it from below and paste it here.];
ssl_ecdh_curve X25519:P-256:P-384;
ssl_prefer_server_ciphers on;

OpenSSL-1.1.1a, 3.0.0-dev ciphers

[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA:RSA+AES128+SHA:RSA+AES256+SHA:RSA+3DES

OpenSSL-1.1.1a_ciphers, 3.0.0-dev_ciphers ciphers

[TLS13+AESGCM+AES128|TLS13+AESGCM+AES256|TLS13+CHACHA20]:[EECDH+ECDSA+AESGCM+AES128|EECDH+ECDSA+CHACHA20]:EECDH+ECDSA+AESGCM+AES256:EECDH+ECDSA+AES128+SHA:EECDH+ECDSA+AES256+SHA:[EECDH+aRSA+AESGCM+AES128|EECDH+aRSA+CHACHA20]:EECDH+aRSA+AESGCM+AES256:EECDH+aRSA+AES128+SHA:EECDH+aRSA+AES256+SHA:RSA+AES128+SHA:RSA+AES256+SHA:RSA+3DES

Other.

nginx ocsp shell

The configuration file recognizes the *.conf file in /etc/nginx.

Precedence settings in nginx.conf are as follows:

worker_processes 1 - If this number is high, the remaining worker processes do not have OCSP Stapling values.

After reload or restart, execute the corresponding shell. That's it!

I tried to edit nginx, but I have not found a good way yet. :(