如何禁用 openssl 中的特定密码套件?
How do I disable a particular cipher suite in openssl?
我想保护我的服务器免受 FREAK 攻击,所以我想禁用所有使用 Openssl 导出级 RSA 密钥的密码套件。有没有办法在 openssl 中禁用特定的密码套件?如果是,我该怎么做?
Is there a way to disable a particular cipher suite in openssl? If yes, how do i do it?
要回答禁用特定密码套件的直接问题,请将其从传递给 SSL_CTX_set_cipher_list
或 SSL_CTX_set_cipher_list
:
的密码套件列表中删除
int rc = SSL_CTX_set_cipher_list(ctx, "ALL:!NULL-MD5:!NULL-SHA");
assert(0 != rc);
您可以在 SSL*
上使用:
int rc = SSL_set_cipher_list(ssl, "ALL:!NULL-MD5:!NULL-SHA");
assert(0 != rc);
在上面,NULL-MD5
是SSL_RSA_WITH_NULL_MD5
,NULL-SHA
是SSL_RSA_WITH_NULL_SHA
。您可以从 openssl ciphers
命令获取映射列表。
您还可以使用 !EXP
:
禁用导出密码
int rc = SSL_CTX_set_cipher_list(ctx, "ALL:!EXP");
assert(0 != rc);
您可以在 SSL*
上使用:
int rc = SSL_set_cipher_list(ssl, "ALL:!EXP");
assert(0 != rc);
您可以看到 "ALL:!EXP"
等同于 OpenSSL 命令(注意单引号,这样 shell 就不会出现爆炸):
$ openssl ciphers 'ALL:!EXP'
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:
ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:SRP-DSS-AES-256-CBC-SHA:
SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:DH-DSS-AES256-GCM-SHA384...
您可以计算密码套件的数量:
$ openssl ciphers 'ALL:!EXP' | tr ':' ' ' | wc -w
124
这告诉您,由于有 124 个密码套件,您的 ClientHello
将至少使用 248 个字节。理想情况下,您应该宣传您 真正 想要的 16 间左右的套房。
您通常只使用 "HIGH"
配置您的密码套件。它不包括 "MEDIUM"
、"LOW"
和 "EXP"
。以下是我的电话有时的样子:
int rc = SSL_CTX_set_cipher_list(ctx, "HIGH:!ADH:!MD5:!RC4:!SRP:!PSK:!DSS");
assert(0 != rc);
请务必排除匿名装备 (!ADH
),因为它默认包含在内。使用!MD5
和!RC4
是因为它们是weak/wounded。 !SRP
、!PSK
和 !DSS
用于进一步 trim 密码列表,因为它们通常不被使用。
您也可以对 SSL*
和 SSL_set_cipher_list
执行相同的操作。
如果您在服务器上调用 SSL_CTX_set_cipher_list
和 SSL_set_cipher_list
,密码套件列表将 trim 根据证书中的密钥类型进一步调整。
在上一个块中,我说 ...我的电话有时看起来如何。通常,我喜欢指定 16 左右我想使用 with:
string GetCipherSuites()
{
static string ciphers = ""
#if defined(ALLOW_ECDSA)
"ECDHE-ECDSA-AES256-GCM-SHA384:"
"ECDHE-ECDSA-AES128-GCM-SHA256:"
#endif
"ECDHE-RSA-AES256-GCM-SHA384:"
"ECDHE-RSA-AES128-GCM-SHA256:"
#if defined(ALLOW_DSA)
"DHE-DSS-AES256-GCM-SHA384:"
#endif
"DHE-RSA-AES256-GCM-SHA384:"
#if defined(ALLOW_DSA)
"DHE-DSS-AES128-GCM-SHA256:"
#endif
"DHE-RSA-AES128-GCM-SHA256:"
#if defined(ALLOW_DSA)
"DHE-DSS-AES256-SHA:"
#endif
"DHE-RSA-AES256-SHA:"
#if defined(ALLOW_DSA)
"DHE-DSS-AES128-SHA:"
#endif
"DHE-RSA-AES128-SHA:"
#if defined(ALLOW_DSA)
"EDH-DSS-DES-CBC3-SHA:"
#endif
"EDH-RSA-DES-CBC3-SHA:"
#if defined(ALLOW_DSA)
"DH-DSS-DES-CBC3-SHA:"
#endif
"DH-RSA-DES-CBC3-SHA:";
return ciphers;
}
我想保护我的服务器免受 FREAK 攻击,所以我想禁用所有使用 Openssl 导出级 RSA 密钥的密码套件。有没有办法在 openssl 中禁用特定的密码套件?如果是,我该怎么做?
Is there a way to disable a particular cipher suite in openssl? If yes, how do i do it?
要回答禁用特定密码套件的直接问题,请将其从传递给 SSL_CTX_set_cipher_list
或 SSL_CTX_set_cipher_list
:
int rc = SSL_CTX_set_cipher_list(ctx, "ALL:!NULL-MD5:!NULL-SHA");
assert(0 != rc);
您可以在 SSL*
上使用:
int rc = SSL_set_cipher_list(ssl, "ALL:!NULL-MD5:!NULL-SHA");
assert(0 != rc);
在上面,NULL-MD5
是SSL_RSA_WITH_NULL_MD5
,NULL-SHA
是SSL_RSA_WITH_NULL_SHA
。您可以从 openssl ciphers
命令获取映射列表。
您还可以使用 !EXP
:
int rc = SSL_CTX_set_cipher_list(ctx, "ALL:!EXP");
assert(0 != rc);
您可以在 SSL*
上使用:
int rc = SSL_set_cipher_list(ssl, "ALL:!EXP");
assert(0 != rc);
您可以看到 "ALL:!EXP"
等同于 OpenSSL 命令(注意单引号,这样 shell 就不会出现爆炸):
$ openssl ciphers 'ALL:!EXP'
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:
ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:SRP-DSS-AES-256-CBC-SHA:
SRP-RSA-AES-256-CBC-SHA:SRP-AES-256-CBC-SHA:DH-DSS-AES256-GCM-SHA384...
您可以计算密码套件的数量:
$ openssl ciphers 'ALL:!EXP' | tr ':' ' ' | wc -w
124
这告诉您,由于有 124 个密码套件,您的 ClientHello
将至少使用 248 个字节。理想情况下,您应该宣传您 真正 想要的 16 间左右的套房。
您通常只使用 "HIGH"
配置您的密码套件。它不包括 "MEDIUM"
、"LOW"
和 "EXP"
。以下是我的电话有时的样子:
int rc = SSL_CTX_set_cipher_list(ctx, "HIGH:!ADH:!MD5:!RC4:!SRP:!PSK:!DSS");
assert(0 != rc);
请务必排除匿名装备 (!ADH
),因为它默认包含在内。使用!MD5
和!RC4
是因为它们是weak/wounded。 !SRP
、!PSK
和 !DSS
用于进一步 trim 密码列表,因为它们通常不被使用。
您也可以对 SSL*
和 SSL_set_cipher_list
执行相同的操作。
如果您在服务器上调用 SSL_CTX_set_cipher_list
和 SSL_set_cipher_list
,密码套件列表将 trim 根据证书中的密钥类型进一步调整。
在上一个块中,我说 ...我的电话有时看起来如何。通常,我喜欢指定 16 左右我想使用 with:
string GetCipherSuites()
{
static string ciphers = ""
#if defined(ALLOW_ECDSA)
"ECDHE-ECDSA-AES256-GCM-SHA384:"
"ECDHE-ECDSA-AES128-GCM-SHA256:"
#endif
"ECDHE-RSA-AES256-GCM-SHA384:"
"ECDHE-RSA-AES128-GCM-SHA256:"
#if defined(ALLOW_DSA)
"DHE-DSS-AES256-GCM-SHA384:"
#endif
"DHE-RSA-AES256-GCM-SHA384:"
#if defined(ALLOW_DSA)
"DHE-DSS-AES128-GCM-SHA256:"
#endif
"DHE-RSA-AES128-GCM-SHA256:"
#if defined(ALLOW_DSA)
"DHE-DSS-AES256-SHA:"
#endif
"DHE-RSA-AES256-SHA:"
#if defined(ALLOW_DSA)
"DHE-DSS-AES128-SHA:"
#endif
"DHE-RSA-AES128-SHA:"
#if defined(ALLOW_DSA)
"EDH-DSS-DES-CBC3-SHA:"
#endif
"EDH-RSA-DES-CBC3-SHA:"
#if defined(ALLOW_DSA)
"DH-DSS-DES-CBC3-SHA:"
#endif
"DH-RSA-DES-CBC3-SHA:";
return ciphers;
}