Nignx ssl ciphers配置项

来自Linux78|wiki
Bob讨论 | 贡献2020年6月2日 (二) 12:15的版本
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

ssl_ciphers配置项的可选值由openssl 的ciphers定义

查看openssl支持的加密套件

openssl ciphers [-v] [-ssl2] [-ssl3] [-tls1] [cipherlist]

-v:详细列出所有加密套件。包括ssl版本(SSLv2、SSLv3以及 TLS)、密钥交换算法、身份验证算法、对称算法、摘要算法以及该算法是否可以出口。

-ssl2:只列出SSLv2使用的加密套件。

-ssl3:只列出SSLv3使用的加密套件。

-tls1:只列出tls使用的加密套件。

cipherlist:列出一个cipher list的详细内容。用此项能列出所有符合规则的加密套件,如果不加-v选项,它只显示各个套件名字;

算法列表格式:

算法列表包含一个或多个冒号隔开的。逗号或空格是可接受的分隔符,但是冒号是普遍使用的。

真实的算法字符串可以从不同的表中提取。

也可以包含一个简单的算法组件,例如AES256-RSA256。

一个算法组件包含某几个算法,或者算法套件的几个类型值。例如B代表所有的算法套件中的摘要算法为SHA1;B代表所有的SSL v3相关的算法。

一个算法组件可以用B<+>字符把简单的算法字符连接起来。这是一个符合逻辑的B操作。例如,B代表所有同时包含SHA1和DES的算法套件。

可以在每个算法字符串之前使用字符B<!>、B<->或 B<+>。

如果使用字符B<!>,则从算法列表中删除该算法。根据明确的规定,删除了的算法将不会再出现。

如果使用字符B<->,则从算法列表中删除该算法。但是可以通过后面的选项将一个或所有的算法可以被再次添加。

如果使用字符B<+>,则将该算法移到算法列表的末尾。这个选项不会添加任何新的算法,它只是紧紧的移动匹配的已经存在的算法。

如果没有上述字符被提出,则该字符串则作为一个算法列表中的一部分则仅仅被解释。如果这个列表包含的算法已经被提出,则他们将被忽略:因为他们不会被移到列表的末尾。

此外,算法字符串B<@STRENGTH>可以被用于到分类,可以让符合条件的算法按加密算法的长度分类(输出时会聚合在一起)。

算法字符串:

下面是经过许可的所有算法字符串以及他们的详细解释:

B:默认的算法列表。这个在编译的时候决定,OpenSSL1.0.0以上的版本默认的是B。这个必须是第一个有详细说明的算法字符串。

B:这个算法包含B,但没有被默认激活。目前它的值是B。需要注意的是这个规则不包括B(它不被包含在B中)。

B:所有的算法套件但是不包括B算法,因为B算法必须被明确的激活。作为OpenSSL的一部分,B算法套件被合理的被设置为默认算法套件。

B:这个算法套件不激活B,目前仅仅包含B算法。

B:“high”加密算法套件。目前意味着密钥长度值大于128位,目前一些算法套件是128字节的密钥。

B:“medium”加密算法套件。目前一些算法套件是128字节的加密。

B:“low”加密算法套件。目前使用64位或56位密钥的加密算法,但是不包括export系列的算法套件。

B, B:export系列的加密算法。包含40字节和56字节的算法。

B:40字节的加密算法。

B:56字节的加密算法。在OpenSSL0.9.8c版本以后后面的版本中56字节的export算法时空的,除非OpenSSL明确的表明支持实验性的算法。

B, B:“NULL”类型的算法,它表明不用进行任何加密操作。因为他们一直不提供不加密如果要显示包含的数据则存在一些安全风险。

B:算法套件中提供没有验证算法。当前它是一个匿名的DH算法。这些算法套件是易受到中间攻击的,于是不建议使用它。

B, B:用RSA密钥来进行密钥交换。

B:使用短暂的DH密钥协议。

B, B:算法套件使用DH密钥协议和CA分别用RSA和DSS密钥签名的DH证书。目前没有进行运用。

B:用RSA密钥来执行验证操作。证书携带RSA密钥。

B, B:用DSS密钥来执行验证操作。证书携带DSS密钥。

B:用DH密钥来执行验证操作。证书携带DH密钥。目前没有进行运用。

B, B, B, B:用FORTEZZA密钥来进行密钥交换、验证、加密。目前没有进行运用。

B, B, B:TLS v1.0, SSL v3.0 or SSL v2.0算法套件。

B:算法套件使用DH算法,包括匿名的DH。

B:匿名的DH算法套件。

B:算法套件使用AES算法。

B:算法套件使用CAMELLIA算法。

B<3DES>:算法套件使用3des算法。

B:算法套件使用des算法。

B:算法套件使用rc4算法。

B:算法套件使用rc2算法。

B:算法套件使用IDEA算法。

B:算法套件使用SEED算法。

B:算法套件使用MD5算法。

B, B:算法套件使用SHA算法。

B:算法套件使用GOST R 34.10 (either 2001 or 94)来执行验证操作(需要一个支持GOST算法的硬件引擎)。

B:算法套件使用GOST R 34.10-2001来执行验证操作。

B:算法套件使用GOST R 34.10-94来执行验证操作(注意R 34.10-94的标准已经过期了,建议使用GOST R 34.10-2001)。

B:用VKO 34.10来执行密钥交换操作。在RFC4357中指定。

B:算法套件,用基于GOST R 34.11-94的HMAC算法。

B:算法套件,用GOST 28147-89摘要算法来代替HMAC。

比如列出所有默认的算法列表

pc@ubuntu:~$ openssl ciphers -v ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD

。。。。。。

Kx 密钥交换算法 :用来协商回话密钥 Au 验证算法 :用来验证服务端身份

Enc对称加密算法:加密消息

Mac摘要算法:防消息篡改

nginx 默认配置是 HIGH:!aNULL:!MD5

https://wiki.mozilla.org/Security/Server_Side_TLS#Nginx

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS; ssl_prefer_server_ciphers on;

专业配置建议 其中含有大多数服务器的配置建议。 Cipherli.st Strong Ciphers for Apache, nginx and Lighttpd

https://cipherli.st/

加密套件解读: ECDHE-RSA-AES128-GCM-SHA256 为例

ECDHE:秘钥交换算法 RSA:签名算法 AES128:对称加密算法 GCM-SHA256:签名算法

默认项: 秘钥交换算法:RSA 签名算法:RSA 模式:CBC AES256-SHA256 也就是 RSA-RSA-AES256-CBC-SHA256

以ECDHE-RSA-AES128-GCM-SHA256 为例

秘钥交换算法:ECDHE 证书验证签名算法:RSA 建立连接后的对称加密算法:AES128 完整性检查HASH算法:GCM-SHA256

查询 OpenSSL 支持哪些算法套件:

[root@www ~]# openssl ciphers -v |grep CHA TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD RSA-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=RSAPSK Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD DHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=DHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=ECDHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD PSK-CHACHA20-POLY1305 TLSv1.2 Kx=PSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD 1 2 3 4 5 6 7 8 9 [root@www ~]# openssl ciphers -v |grep CHA TLS_CHACHA20_POLY1305_SHA256 TLSv1.3 Kx=any Au=any Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-ECDSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=ECDSA Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=ECDH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD DHE-RSA-CHACHA20-POLY1305 TLSv1.2 Kx=DH Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD RSA-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=RSAPSK Au=RSA Enc=CHACHA20/POLY1305(256) Mac=AEAD DHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=DHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD ECDHE-PSK-CHACHA20-POLY1305 TLSv1.2 Kx=ECDHEPSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD PSK-CHACHA20-POLY1305 TLSv1.2 Kx=PSK Au=PSK Enc=CHACHA20/POLY1305(256) Mac=AEAD Kx 密钥交换算法 :用来协商回话密钥 Au 验证算法 :用来验证服务端身份 Enc对称加密算法:加密消息 Mac摘要算法:防消息篡改


以下三个名字都是不同叫法的同一套加密套件:

IANA name:TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256

OpenSSL name:ECDHE-RSA-CHACHA20-POLY1305

GnuTLS name:TLS_ECDHE_RSA_CHACHA20_POLY1305

TLS Version(s):TLS1.2

Protocol:Transport Layer Security (TLS)

Key Exchange:Elliptic Curve Diffie-Hellman Ephemeral (ECDHE)

Authentication:Rivest Shamir Adleman algorithm (RSA)

Encryption:ChaCha stream cipher and Poly1305 authenticator (CHACHA20 POLY1305)

Hash:Secure Hash Algorithm 256 (SHA256)


检测TLS版本命令:

curl -I -v --tlsv1 --tls-max 1.0 https://www.nginx.cn curl -I -v --tlsv1.1 --tls-max 1.1 https://www.nginx.cn

-I : Show document header info only -v : Verbose outputs --tlsv1, --tlsv1.0, --tlsv1.1, --tlsv1.2, --tlsv1.3: Use given TLS version --tls-max VERSION : Set maximum allowed TLS version 参考:

检测浏览器支持:https://ssl.haka.se/

tls 测试:https://www.cdn77.com/tls-test

ssl 测试:https://www.ssllabs.com/ssltest/index.html

https://blog.cloudflare.com/announcing-keyless-ssl-all-the-benefits-of-cloudflare-without-having-to-turn-over-your-private-ssl-keys/

https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/

http://www.ruanyifeng.com/blog/2014/09/illustration-ssl.html

https://dev.admirable.pro/ssl-optimization/