nginx 中的密码字符串语法

nginx 中的密码字符串语法

在 nginx 配置文件中,你可以配置如下 SSL 密码列表

ssl_ciphers                HIGH:!aNULL:!eNULL:!LOW:!ADH:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;

这个密码字符串的语法是什么?也就是说,我知道(或者我认为我知道,如果我错了请纠正我)这个字符串旨在提供可能的 SSL 密码列表,并为它们提供优先级。什么文档不太擅长解释这个字符串的格式。

具体问题

  • !否定的?也就是说,是否!DSS意味着不使用 DSS?或者!DSS与密码相同?

  • 这些字符是:分隔符吗?也就是说,上面的密码列表是“HIGH、!aNULL、!eNULL 等...”,还是:另有含义

  • HIGHLOW密码一样吗,或者它们是某种特殊的元指令

  • 上面没有图片,但是我见过像这样的字符串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-SHA384ECDHE-RSA-RC4-SHA是特定的密码套件。

符号!表示在握手阶段服务器与客户端交换支持的密码套件时,删除密码套件组或特定密码套件。例如!eNULL!aNULL表示删除不提供加密和身份验证的密码套件。

相关内容