Nginx禁用TLS 1.0和TLS 1.1

Nginx禁用TLS 1.0和TLS 1.1

从时间上看,TLS 1.0 协议已经有20年历史了,确实要退出历史舞台了。

目前TLS协议主流的版本是 v1.2,那么和 v1.0 和 v1.1 版本相比,它有那些优势呢?或者说 v1.0 和 v1.1 版本必然有一些缺陷,所以才要被各大浏览器厂商废弃。

主要原因有两方面,首先就是性能,TLS 1.2协议有了更快的密码学算法,比如支持AEAD类的加密模式。当然更重要的是安全性。

有的同学说,大部分浏览器使用v1.2版本连接我的网站,那么为了兼容老设备,服务器同时也只支持v1.0和v1.1版本,有何不可?还是安全性,只要你的服务器存在v1.0和v1.1版本,攻击者就会强制让你从v1.2降级到老版本,从而带来安全风险。

TLS测试

可以通过openssl这个工具,使用以下命令来测试服务器端使用哪个版本的TLS。

openssl s_client -connect www.baidu.com:443 -tls1 2> /dev/null | grep -i -E "cipher|protocol"
openssl s_client -connect www.baidu.com:443 -tls1_1 2> /dev/null | grep -i -E "cipher|protocol"
openssl s_client -connect www.baidu.com:443 -tls1_2 2> /dev/null | grep -i -E "cipher|protocol"
openssl s_client -connect www.baidu.com:443 -tls1_3 2> /dev/null | grep -i -E "cipher|protocol"

如果不支持此TLS版本的话,会显示类似以下信息:

New, (NONE), Cipher is (NONE)
Protocol : TLSv1.1
Cipher : 0000

支持此TLS版本的话,会显示类似以下信息:

New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256

nginx配置

ginx 有个ssl_protocols参数,用于配置支持的SSL版本。但是重点在于,需要在配有default_server的server域里面配置才可以生效。

 server {
    listen 80 default_server;
    listen 443 default_server;

    server_name _;

    ssl_certificate /usr/local/nginx/conf/ssl/www.pem;
    ssl_certificate_key /usr/local/nginx/conf/ssl/www.key;

    access_log /usr/local/nginx/logs/default.access.log;
    error_log /usr/local/nginx/logs/default.error.log;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
            ...
    }
}

TLSv1.1 和 TLSv1.2 参数(1.1.13、1.0.12)仅在使用 OpenSSL 1.0.1 或更高版本时有效。
TLSv1.3 参数 (1.13.0) 仅在使用 OpenSSL 1.1.1 或更高版本时有效。

修改完后,执行nginx -s reload重载生效即可。

你可能感兴趣的:(nginx,服务器,运维)