2015-11-30 3 views
1

Dans Apache, j'utilise avec succès les paramètres de chiffrement OpenSSL suivants:pyOpenSSL Cipher Liste échec

SSLHonorCipherOrder on 
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM \ 
       EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 \ 
       EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 \ 
       EECDH EDH+aRSA \ 
       !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4" 

J'essaie d'imiter que dans un serveur python (Twisted), mais le serveur ne servirai toutes les pages avec une liste de chiffrement comparable spécifiée. Qu'est-ce que je fais mal? Voici le python (bien en substance ...)

 from OpenSSL import SSL 
.... 
    httpSslContext = ssl.DefaultOpenSSLContextFactory(...) 
    ctx = httpSslContext.getContext()     
    ctx.set_options(SSL.OP_CIPHER_SERVER_PREFERENCE)     
    ctx.set_cipher_list("EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:EDH+aRSA:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4") 
... 

Il fonctionne si je change la liste de chiffrement à quelque chose de simple comme « RC4-SHA », ou même quelque chose d'un peu plus compliqué comme « DEFAULT: Anull: ! eNULL:! LOW:! 3DES:! MD5:! EXP:! PSK:! SRP:! DSS:! RC4 ". J'ai défini d'autres options, par ex. les protocoles exceptés, mais je ne sais pas si cela pertinent ...

Notez que cette même liste de chiffrement est utilisé ici: Python Paste SSL server with TLSv1.2 and Forward Secrecy

J'essaie d'obtenir les mêmes résultats, pour la même raison, mais en cours d'exécution dans certaines questions. Je me demande maintenant s'il y a une différence de version de pyOpenssl? Les chiffrements EECDH ne sont-ils pas autorisés peut-être? Je ne peux pas utiliser ctx.set_tmp_ecdh() non plus ...

Répondre

0

Le problème était en effet l'impossibilité d'utiliser context.set_tmp_ecdh(), qui était dû à l'absence d'une nouvelle version de pyOpenSSL. Voir: Why is context.set_tmp_ecdh() not defined in pyOpenSSL?. Résoudre cela a résolu le problème.

Lorsque vous spécifiez une liste de chiffrement, ce n'est pas littéralement les chiffrements qui finissent par être implémentés. connection.get_cipher_list() (que j'ai appelé dans une fonction context.set_info_callback()) révélera les résultats réels quand tout le reste sera pris en compte.

Les anciennes versions de pyOpenSSL ne pouvaient pas utiliser les chiffrements EECDH (courbe elliptique). En tant que tel, ils n'étaient pas disponibles et ma liste de chiffrement préférée ne fonctionnait pas sur certains navigateurs.

Apache, d'autre part n'a pas eu ce problème et a permis l'utilisation de ces chiffrements hors de la boîte.