Отключить слабые шифры в 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 не возвращает значение, поэтому нет ничего, чтобы проверить, чтобы вызов был успешным.