#nginx #ssl
Вопрос:
Все:
У меня установлена следующая версия Nginx и поддерживает TLSv1.2 и TLSv1.3.
# /opt/sbin/nginx -V
nginx version: nginx/1.19.2 (x86_64-pc-linux-gnu)
built with OpenSSL 1.1.1g 21 Apr 2020
TLS SNI support enabled
Кроме того, по умолчанию также отображается, что поддерживаются и включены TLSv1.0 и TLSv1.1.
# openssl s_client -tls1 -connect xxx.xxx.xxx.xx:443
CONNECTED(00000003)
depth=0 CN = www.z7bm7ektzllnsh.net
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = www.z7bm7ektzllnsh.net
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=www.z7bm7ektzllnsh.net
i:/CN=www.u4g2dxzlesntdm26vmd.com
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICRjCCAa gAwIBAgIIOoJpYk/2Z/QwDQYJKoZIhvcNAQELBQAwJjEkMCIGA1UE
Awwbd3d3LnU0ZzJkeHpsZXNudGRtMjZ2bWQuY29tMB4XDTIxMDcxNjAwMDAwMFoX
DTIyMDIwODIzNTk1OVowITEfMB0GA1UEAwwWd3d3Lno3Ym03ZWt0emxsbnNoLm5l
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM9iGBTOVMi QpMhsYM
GZzRJBTxXzCADz82DSZCiXCW6wMYJ9TPKWUo9awqqLUYW5MfIzTRfhPxndPJsEG1
hMISh4NEQ1FnmUlJx3MvR34j9esTWeA6wHacN92T76d gXshHHLRZZ0prKpzBCZK
F98EmnZAH40EvG/ hBWjgkA0tWhvNFcxqTdUqEUd69ES m6L08hQdlzKetWfwPwg
2oe2ZlLExAOZbai/D zyWC/06PcsSUBueiDtnJ75TDZwejzc12REbLCurMHs2U3w
NBqyCV43HI4kH1NQAMbyumWO7wNOVDI/qrfnR8/g HeGk/arM1pwVDdxVWi/8dja
OCcCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCuO8JWDQiZcHA LfaReL5KinVUyo v
4J5X81pgvRNGrHkmuqHz6RHXLIP9KqmkFWwccP2JpUulGqYbbBzjaKRGcBRsuW5y
H87ZSuVzQ2fz6jOBbRCiiBYDeXoOjFhL8XFxWS9JSZ2Yn7LuTaUsnq4OxKhxFj/P
9R6hwOPwjbXbwQ==
-----END CERTIFICATE-----
subject=/CN=www.z7bm7ektzllnsh.net
issuer=/CN=www.u4g2dxzlesntdm26vmd.com
---
No client certificate CA names sent
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1067 bytes and written 328 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID:
Session-ID-ctx:
Master-Key: D128399FE72DB5512783E15015D4869762748D40C04DD273E5B179A0A330FB56246ABBFC8162A5B126CB27EBDA74469C
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1629349779
Timeout : 7200 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
Приложение, которое я успешно установил и запустил, принимает только соединения TLSv1.2 и TLSv1.3 и может самостоятельно согласовать соединения TLSv1.0 с TLSv1.2 или TLSv1.3.
Однако, когда я пытаюсь поместить Nginx перед потоком TCP вышеупомянутого приложения, согласно трассировкам пакетов, Nginx просто сбрасывает соединения TLSv1.0 и не пытается пересмотреть их до TLSv1.2 или TLSv1.3.
Я сократил свой файл nginx.conf, включив в него только рассматриваемый блок потока:
# cat nginx.conf
user nobody;
worker_processes auto;
worker_rlimit_nofile 7168;
events {
worker_connections 3584;
}
stream {
upstream application {
hash $remote_addr consistent;
server 192.168.0.21:8443 weight=4 max_fails=1 fail_timeout=10s;
}
server {
listen xxx.xxx.xxx.xxx:443;
#proxy_bind $server_addr;
proxy_pass application;
#proxy_buffer_size 16k;
#proxy_connect_timeout 1s;
#proxy_timeout 3s;
#health_check;
#health_check_timeout 5s;
}
}
Within the Nginx server block, I attempted to force Nginx to only use the TLSv1.2 protocol:
ssl_protocols TLSv1.2;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
However, it appears that all the TLS protocols were still available:
# openssl s_client -tls1 -connect xxx.xxx.xxx.xxx:443
CONNECTED(00000003)
depth=0 CN = www.z7bm7ektzllnsh.net
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = www.z7bm7ektzllnsh.net
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=www.z7bm7ektzllnsh.net
i:/CN=www.u4g2dxzlesntdm26vmd.com
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICRjCCAa gAwIBAgIIOoJpYk/2Z/QwDQYJKoZIhvcNAQELBQAwJjEkMCIGA1UE
Awwbd3d3LnU0ZzJkeHpsZXNudGRtMjZ2bWQuY29tMB4XDTIxMDcxNjAwMDAwMFoX
DTIyMDIwODIzNTk1OVowITEfMB0GA1UEAwwWd3d3Lno3Ym03ZWt0emxsbnNoLm5l
dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM9iGBTOVMi QpMhsYM
GZzRJBTxXzCADz82DSZCiXCW6wMYJ9TPKWUo9awqqLUYW5MfIzTRfhPxndPJsEG1
hMISh4NEQ1FnmUlJx3MvR34j9esTWeA6wHacN92T76d gXshHHLRZZ0prKpzBCZK
F98EmnZAH40EvG/ hBWjgkA0tWhvNFcxqTdUqEUd69ES m6L08hQdlzKetWfwPwg
2oe2ZlLExAOZbai/D zyWC/06PcsSUBueiDtnJ75TDZwejzc12REbLCurMHs2U3w
NBqyCV43HI4kH1NQAMbyumWO7wNOVDI/qrfnR8/g HeGk/arM1pwVDdxVWi/8dja
OCcCAwEAATANBgkqhkiG9w0BAQsFAAOBgQCuO8JWDQiZcHA LfaReL5KinVUyo v
4J5X81pgvRNGrHkmuqHz6RHXLIP9KqmkFWwccP2JpUulGqYbbBzjaKRGcBRsuW5y
H87ZSuVzQ2fz6jOBbRCiiBYDeXoOjFhL8XFxWS9JSZ2Yn7LuTaUsnq4OxKhxFj/P
9R6hwOPwjbXbwQ==
-----END CERTIFICATE-----
subject=/CN=www.z7bm7ektzllnsh.net
issuer=/CN=www.u4g2dxzlesntdm26vmd.com
---
No client certificate CA names sent
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1067 bytes and written 328 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1
Cipher : ECDHE-RSA-AES256-SHA
Session-ID:
Session-ID-ctx:
Master-Key: 40DF5E33387B92F1B2B132CC8DD09492CC9B37757B0B16073EC36DB9EACE34242A53D88F419CF40FBF4A8263EC524BA1
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1629350998
Timeout : 7200 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
Почему Nginx сбрасывает соединения TLSv1.0 и не просит их перейти на TLSv1.2 или TLSv1.3, как в приложении?
Почему мои изменения ssl_protocols не вступают в силу в Nginx, чтобы включать и/или исключать указанные протоколы?
Мы высоко ценим вашу помощь.
Уважительно,
Гэри