NGINX'te TLS 1.0'ı devre dışı bırak


22

Sitelerimiz için ters bir proxy görevi gören bir NGINX var ve çok iyi çalışıyor. SSL gerektiren siteler için olabildiğince güçlü bir SSLLabs skoru olduğundan emin olmak için raymii.org'u takip ettim . Sitelerden birinin PCI DSS uyumlu olması gerekir, ancak TLS 1.0 etkinleştirildiği için en son TrustWave taramasına dayalı olarak başarısız oluyor.

Http düzeyinde nginx.conf var:

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

Belirli bir sunucu için:

ssl_protocols TLSv1.1 TLSv1.2;

Şifreleri değiştirdim, http seviyesinden ve her ssl site sunucusuna bir şeyler taşıdım, ancak ne zaman çalışırsam çalışalım:

openssl s_client -connect www.example.com:443 -tls1

TLS 1.0 için geçerli bir bağlantı alıyorum. SSLLabs, site için nginx kurulumunu A olarak koyar, ancak TLS 1.0 ile bu yüzden kurulumumun geri kalanının doğru olduğuna inanıyorum, sadece TLS 1.0'ı kapatmayacak.

Ne eksik olabileceğime dair düşünceler?

openssl version -a
OpenSSL 1.0.1f 6 Jan 2014
built on: Thu Jun 11 15:28:12 UTC 2015
platform: debian-amd64

nginx -v
nginx version: nginx/1.8.0

1
30 Haziran 2016'ya kadar TLS 1.0'ı kaldırmanın zorunlu olmadığını unutmayın.
Michael Hampton

Yanıtlar:


12

Buradaki sorun Server name indication, TLS müzakeresinin bir kısmının, bağlantının kendisi müzakere edildikten sonra yapılmasıdır. Ve protokol bağlantı görüşmesi sırasında müzakere edilir.

Bu sanal ana bilgisayarı, sunucuda kendisiyle ilişkilendirilmiş başka sanal ana bilgisayarı olmayan bir IP adresine yapılandırırsanız, o sanal ana bilgisayar için TLS v1.0 uygulaması zorlanabilir. Bu nedenle nginx, IP adresine göre TLS v 1.0'a izin verilmediğini bilir.


Teşekkürler. Şu anda bunu test etmek için yedek bir IP'miz olmadığından, bunun hiçbir yolu olmadığını varsayıyorum.
Shawn C.

1
Server Name IndicationTLS'nin bir parçasıdır ClientHello. Müşteri tarafından gönderilen ilk mesajdadır ve daha sonra müzakere edilmez. Nginx'in bir tasarım kusuru varmış gibi geliyor. bağlantıyı kabul ettiği anlaşılıyor ve ardından doğru veya yanlış olsun Sanal Ana Bilgisayara iletiliyor. Bunun yerine, nginx sunucu adını ayrıştırmalı, Sanal Ana Bilgisayar'a başvurmalı ve Sanal Ana Bilgisayar gereksinimlerini karşılayamazsa bağlantıyı reddetmelidir. TLS 1.0 zaman zaman sorgulanabilir olduğundan tasarım hatası muhtemelen CVE'ye layıktır. Bazı durumlarda açıkça bir C&A ihlalidir.

Yorum için teşekkürler. Gerçekten gerçek bir tasarım hatasıysa bu ilginç.
Tero Kilkanen

1
2019'da yeni nginx sürümlerinde bu değişmedi mi?
robsch

18

"Varsayılan" SSL görüşme şablonunuz olarak kullanmak istediğiniz bir sunucu bloğunu bulun. Dinleme hattınızı bulun

server {
    ...
    listen 443 ssl;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

ve default_serversatırın sonuna ekle

server {
    ...
    listen 443 ssl default_server;
    ssl_protocols TLSv1.1 TLSv1.2;
    ...
}

Bu, nginx'in hangi TLS sürümünü kullanacağını görüşürken bir yapılandırmaya sahip olmasını sağlar. Dezavantajı, bağlantı noktası başına yalnızca bir varsayılan sunucunuz olabilir. Bu yüzden TLSv1 etkin bazı sanal etki alanlarına ve devre dışı olan diğer sanal etki alanlarına sahip olmak hiç de kolay değildir.


Bu, ssl_protocolls'un etkili olduğu tek bir yer olduğu anlamına mı geliyor? Default_server bildirimi olan sunucu yapılandırmasında? Bu yapılandırma görüşme sırasında kullanıldığında, başka bir yapılandırmadaki ssl_protocolls ayarının bir etkisi olmaz mı?
robsch

4

Nginx 1.8.1 sürümünde TLSv1'i devre dışı bıraktım. Openssl dosyasını 1.0.1g veya 1.0.1h sürümlerine güncellemeniz gerekir. Daha sonra ssl_protocols yönergesinden 'TLSv1'i kaldırın:

ssl_protocols TLSv1.1 TLSv1.2

Ardından bağlantıyı TLSv1 üzerinden komutla kontrol edin:

openssl s_client -tls1 -connect example.com:443 < /dev/null

Böyle bir şey almalısınız:

CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 0 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1
    Cipher    : 0000
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1474531027
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---

1
Barındırılan bir ortamda yer alan kişiler genellikle OpenSSL sürümünün yerini alamaz. Sunucu operatörü sunucunun yapılandırmasını denetler; sanal sunucuyu kiralayan web sitesi operatörü değil.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.