web-dev-qa-db-fra.com

Désactiver SSLv3 dans Dovecot -> Échec de l'établissement de liaison TLS: pas de chiffrement partagé?

  • Ubuntu 12.04
  • OpenSSL 1.0.1-4ubuntu5.20 14 mars 2012
  • Dovecot 2.0.19

La situation est que j'essaie de désactiver SSLv3 dans Dovecot en ajoutant !SSLv3 à la ssl_cipher_list:

ssl_cipher_list = EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:!SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA

redémarrez le Dovecot, puis vérifiez le journal, j'ai obtenu:

29 octobre 05:00:46 courrier pigeonnier: imap-login: déconnecté (aucune tentative d'authentification): rip = 118.71.13.x, lip = 107.170.105.y, établissement de liaison TLS: SSL_accept () a échoué: erreur: 1408A0C1: SSL routines: SSL3_GET_CLIENT_HELLO: pas de chiffrement partagé

ce que je ne comprends pas, c'est que la liste de chiffrement ci-dessus prend en charge certains TLSv1.2:

openssl ciphers -v 'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:!SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA' | grep -i tls
DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA256
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA384
DHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=DH       Au=RSA  Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-SHA256   TLSv1.2 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA256
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA256

Exécuter tcpdump tout en utilisant Thunderbird pour se connecter à Dovecot:

Secure Sockets Layer
    SSL Record Layer: Handshake Protocol: Client Hello
        Content Type: Handshake (22)
        Version: TLS 1.0 (0x0301)
        Length: 177
        Handshake Protocol: Client Hello
            Handshake Type: Client Hello (1)
            Length: 173
            Version: TLS 1.2 (0x0303)
            Random
                GMT Unix Time: May  4, 2099 21:21:49.000000000 ICT
                Random Bytes: db3c676892cb86a10350aae7fa67868ed4935862593455bc...
            Session ID Length: 0
            Cipher Suites Length: 46
            Cipher Suites (23 suites)
                Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b)
                Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)

Vous pouvez voir qu'au moins le client et le serveur prennent en charge ECDHE-RSA-AES128-GCM-SHA256, pourquoi l'échec de la poignée de main?

Secure Sockets Layer
    TLSv1.2 Record Layer: Alert (Level: Fatal, Description: Handshake Failure)
        Content Type: Alert (21)
        Version: TLS 1.2 (0x0303)
        Length: 2
        Alert Message
            Level: Fatal (2)
            Description: Handshake Failure (40)
12
quanta

La situation est que j'essaie de désactiver SSLv3 dans Dovecot en ajoutant! SSLv3 à la liste ssl_cipher_list:

C'est une mauvaise idée car il n'y a pas de chiffres spécifiques pour TLS1.0 et TLS1.1, c'est-à-dire qu'ils utilisent les mêmes chiffres que SSL 3.0. Seul TLS1.2 a défini de nouveaux chiffres. Cela signifie que si vous désactivez les chiffrements SSLv3, aucun client SSLv3 ne peut se connecter, mais également aucun client TLS1.0 ou TLS1.1. Ce n'est probablement pas ce que vous aviez l'intention de faire.

La vraie façon n'est pas de désactiver les chiffrements SSLv3, mais de désactiver le protocole SSLv3, mais je ne vois pas d'option pour cela dans Dovecot 2.0. Selon https://zmap.io/sslv3/servers.html il y a un ssl_protocols paramètre dans Dovecot 2.1+, mais la même page recommande également à tort de désactiver les chiffrements SSLv3 dans Dovecot 2, ce qui est tout simplement faux.

12
Steffen Ullrich

iirc ssl_ciphers n'est pas le bon endroit pour désactiver un protocole, essayez:

# dovecot
ssl_protocols = !SSlv2 !SSLv3

après cela, je suggère de tester votre serveur avec le script de testssl.sh