Отключить слабые шифры в SSL-соединении
Я использую функцию SSL_CTX_set_cipher_list, чтобы установить шифры, поддерживаемые для SSL-соединения. Какой аргумент перейти к SSL_CTX_set_cipher_list, чтобы отключить слабые шифры.
Я пробовал пропустить ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH
но он не работает.
Мой инструмент для обнаружения слабых отчетов шифрования для следующих, как включен еще
** SSLv3:DES-CBC-SHA - ENABLED - WEAK 56 bits **
** TLSv1:DES-CBC-SHA - ENABLED - WEAK 56 bits **
** SSLv2:RC4-MD5 - ENABLED - WEAK 128 bits **
** SSLv2:RC2-CBC-MD5 - ENABLED - WEAK 128 bits **
** SSLv2:RC4-64-MD5 - ENABLED - WEAK 64 bits **
** SSLv2:DES-CBC-MD5 - ENABLED - WEAK 56 bits **
** SSLv2:EXP-RC4-MD5 - ENABLED - WEAK 40 bits **
** SSLv2:EXP-RC2-CBC-MD5 - ENABLED - WEAK 40 bits **
** SSLv2:DES-CBC3-MD5 - ENABLED - WEAK 168 bits **
Какой аргумент перейти к SSL_CTX_set_cipher_list, чтобы отключить вышеуказанные шифры?
Ответы
Ответ 1
ВЫСОКИЙ:! DSS:! aNULL @STRENGTH должен работать.
openssl ciphers -v 'HIGH:! DSS:! aNULL @STRENGTH' печатает следующий список шифров:
DHE-RSA-AES256-SHA SSLv3 Kx=DH Au=RSA Enc=AES(256) Mac=SHA1
AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256) Mac=SHA1
EDH-RSA-DES-CBC3-SHA SSLv3 Kx=DH Au=RSA Enc=3DES(168) Mac=SHA1
DES-CBC3-SHA SSLv3 Kx=RSA Au=RSA Enc=3DES(168) Mac=SHA1
DES-CBC3-MD5 SSLv2 Kx=RSA Au=RSA Enc=3DES(168) Mac=MD5
DHE-RSA-AES128-SHA SSLv3 Kx=DH Au=RSA Enc=AES(128) Mac=SHA1
AES128-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(128) Mac=SHA1
Полный список шифрованных строк OpenSSL и их значение см. на странице http://www.openssl.org/docs/apps/ciphers.html
Ответ 2
Какой аргумент перейти к SSL_CTX_set_cipher_list для отключения слабых шифров
Это зависит от того, кто использует слабость, которую вы используете. В 2015 году вы должны эффективно использовать HIGH:!aNULL
, потому что современные браузеры отвергают некоторые из шифров, включенных в HIGH
. Если вы разрешите MD5 и/или RC4, вы получите устаревшее предупреждение о криптографии.
HIGH:!aNULL:!MD5:!RC4
Вызов будет выглядеть так:
rc = SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!MD5:!RC4");
ASSERT(rc >= 1);
Вы также должны отключить SSLv2, SSLv3 и, возможно, сжатие. Вы делаете это так:
const long flags = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION;
SSL_CTX_set_options(ctx, flags);
SSL_CTX_set_options
не возвращает значение, поэтому нет ничего, чтобы проверить, чтобы вызов был успешным.