有没有办法禁用 openssl 中的特定密码套件?如果是,我该怎么做?
要回答禁用特定密码套件的直接问题,请通过将其从传递给的密码套件列表中删除来实现SSL_CTX_set_cipher_list
or SSL_CTX_set_cipher_list
:
int rc = SSL_CTX_set_cipher_list(ctx, "ALL:!NULL-MD5:!NULL-SHA");
assert(0 != rc);
你可以在SSL*
with:
int rc = SSL_set_cipher_list(ssl, "ALL:!NULL-MD5:!NULL-SHA");
assert(0 != rc);
在上文中,NULL-MD5
is SSL_RSA_WITH_NULL_MD5
and NULL-SHA
is SSL_RSA_WITH_NULL_SHA
。您可以从以下位置获取映射列表openssl ciphers http://linux.die.net/man/1/ciphers命令。
您还可以禁用导出密码!EXP
:
int rc = SSL_CTX_set_cipher_list(ctx, "ALL:!EXP");
assert(0 != rc);
你可以在SSL*
with:
int rc = SSL_set_cipher_list(ssl, "ALL:!EXP");
assert(0 != rc);
你可以看到什么"ALL:!EXP"
相当于 OpenSSL 命令(请注意单引号,这样 shell 就不会捕获 bang):
$ 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
这告诉你你的ClientHello
由于有 124 个密码套件,因此将使用至少 248 个字节。理想情况下,您应该为 16 间左右的套房做广告really want.
您通常使用以下方式配置密码套件"HIGH"
仅有的。它排除"MEDIUM"
, "LOW"
and "EXP"
。这是我的通话有时的样子:
int rc = SSL_CTX_set_cipher_list(ctx, "HIGH:!ADH:!MD5:!RC4:!SRP:!PSK:!DSS");
assert(0 != rc);
请务必排除匿名装备(!ADH
) 因为它默认包含在内。!MD5
and !RC4
被使用是因为他们虚弱/受伤。!SRP
, !PSK
, and !DSS
用于进一步修剪密码列表,因为它们通常不被使用。
您也可以对SSL*
and SSL_set_cipher_list
.
如果你打电话SSL_CTX_set_cipher_list
and SSL_set_cipher_list
在服务器上,密码套件列表将根据证书中密钥的类型进一步修剪。
在上一个块中,我说过...我的电话有时是什么样子。通常,我喜欢指定要使用的 16 个左右:
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;
}