在 nginx 配置文件中,你可以配置如下 SSL 密码列表
ssl_ciphers HIGH:!aNULL:!eNULL:!LOW:!ADH:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
这个密码字符串的语法是什么?也就是说,我知道(或者我认为我知道,如果我错了请纠正我)这个字符串旨在提供可能的 SSL 密码列表,并为它们提供优先级。什么文档不太擅长解释这个字符串的格式。
具体问题
是
!
否定的?也就是说,是否!DSS
意味着不使用 DSS?或者!DSS
与密码相同?这些字符是
:
分隔符吗?也就是说,上面的密码列表是“HIGH、!aNULL、!eNULL 等...”,还是:
另有含义HIGH
和LOW
密码一样吗,或者它们是某种特殊的元指令上面没有图片,但是我见过像这样的字符串
AES256-GCM-SHA384:ECDHE-RSA-RC4-SHA:
。这些-
字符是密码名称的一部分吗?或者它们有特殊含义吗?
是否有资源可以解释这个字符串是如何工作的,或者在这种情况下,需要使用该字符串的人也需要阅读 nginx 源代码来弄清楚它是如何工作的?
答案1
此语法来自 OpenSSL。请参阅密码列表格式。
下面列出了不同的密码和这些元密码,例如HIGH
摘抄:
密码列表由一个或多个用冒号分隔的密码字符串组成。逗号或空格也是可接受的分隔符,但通常使用冒号。
实际的密码字符串可以采用几种不同的形式。
它可以由单个密码套件(例如 RC4-SHA)组成。
它可以表示包含特定算法的密码套件列表,也可以表示特定类型的密码套件。例如,SHA1 表示所有使用摘要算法 SHA1 的密码套件,SSLv3 表示所有 SSL v3 算法。
可以使用 + 字符将密码套件列表组合成单个密码字符串。这用作逻辑与运算。例如,SHA1+DES 表示包含 SHA1 和 DES 算法的所有密码套件。
每个密码字符串前面都可以选择加上字符 !、- 或 +。
如果使用 !,则密码将从列表中永久删除。即使明确说明,删除的密码也不会再出现在列表中。
如果使用 -,那么密码将从列表中删除,但可以通过以后的选项再次添加部分或全部密码。
如果使用 +,则密码将移至列表末尾。此选项不会添加任何新密码,而只会移动匹配的现有密码。
...
答案2
Nginxssl_ciphers
指令使用OpenSSL 密码列表格式。
这密码列表被描述为一个或多个密文串通常用冒号或逗号分隔(OpenSSL 也支持空格,但您必须使用 nginx 将列表括在引号中)。
密码字符串是特定密码套件或按关键字分组的密码套件。
默认情况下,OpenSSL 带有一个在库编译时确定的默认密码列表,出于明显的安全目的,该列表排除了没有加密或身份验证的密码套件。它应该ALL:!aNULL:!eNULL
与 OpenSSL 1.0 一样。
例如,密码字符串HIGH
表示所有使用大于 128 位密钥进行加密的密码套件,而密码字符串LOW
匹配使用 56 位或 64 位密钥的密码套件。此外,AES256-GCM-SHA384
和ECDHE-RSA-RC4-SHA
是特定的密码套件。
符号!
表示在握手阶段服务器与客户端交换支持的密码套件时,删除密码套件组或特定密码套件。例如!eNULL
和!aNULL
表示删除不提供加密和身份验证的密码套件。