如何在openssl中禁用特定密码套件?
我想保护我的服务器免受畸形攻击,所以我想禁用所有使用Openssl导出级RSA密钥的密码套件。有没有办法禁用openssl中的特定密码套件?如果是,我该怎么做 有没有办法禁用openssl中的特定密码套件?如果是,我该怎么做 要回答禁用特定密码套件的直接问题,请将其从传递到如何在openssl中禁用特定密码套件?,openssl,Openssl,我想保护我的服务器免受畸形攻击,所以我想禁用所有使用Openssl导出级RSA密钥的密码套件。有没有办法禁用openssl中的特定密码套件?如果是,我该怎么做 有没有办法禁用openssl中的特定密码套件?如果是,我该怎么做 要回答禁用特定密码套件的直接问题,请将其从传递到SSL\u CTX\u set\u cipher\u list或SSL\u CTX\u set\u cipher\u list的密码套件列表中删除: int rc = SSL_CTX_set_cipher_list(ctx,
SSL\u CTX\u set\u cipher\u list
或SSL\u CTX\u set\u cipher\u 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);
int rc = SSL_set_cipher_list(ssl, "ALL:!EXP");
assert(0 != rc);
在上面的例子中,NULL-MD5
是SSL\u RSA\u和\u NULL\u MD5
和NULL-SHA
是SSL\u RSA\u和\u NULL\u SHA
。您可以从命令中获取映射列表
您还可以使用
禁用导出密码!EXP
:
int rc = SSL_CTX_set_cipher_list(ctx, "ALL:!EXP");
assert(0 != rc);
您可以通过以下方式在SSL*
上执行此操作:
int rc = SSL_set_cipher_list(ssl, "ALL:!NULL-MD5:!NULL-SHA");
assert(0 != rc);
int rc = SSL_set_cipher_list(ssl, "ALL:!EXP");
assert(0 != rc);
您可以看到“ALL:!EXP”等同于OpenSSL命令的内容(请注意单引号,这样shell就不会获得bang): 您可以使用以下方法计算密码套件的数量:
$ openssl ciphers 'ALL:!EXP' | tr ':' ' ' | wc -w
124
这表明由于124个密码套件,您的ClientHello
将使用至少248个字节。理想情况下,你应该为你真正想要的16套左右的套房做广告
您通常仅使用
“高”
配置密码套件。它不包括“中等”
、“低”
和“EXP”
。我的电话有时是这样的:
int rc = SSL_CTX_set_cipher_list(ctx, "HIGH:!ADH:!MD5:!RC4:!SRP:!PSK:!DSS");
assert(0 != rc);
请确保排除匿名齿轮(!ADH
),因为默认情况下包括匿名齿轮<代码>!MD5和!使用RC4是因为它们虚弱/受伤<代码>!SRP
,!PSK
,和!DSS
用于进一步精简密码列表,因为它们通常不被使用
您还可以使用SSL*
和SSL\u set\u cipher\u列表
执行相同的操作
如果在服务器上调用SSL\u CTX\u set\u cipher\u list
和SSL\u set\u cipher\u 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;
}
了解如何在编译时禁用一个/多个特定的密码套件也很重要。也就是说,“密码套件列表”在哪里?这些更改应该发生在哪里?