2016-01-12 26 views

Odpowiedz

6

Aby wyłączyć SSL3, należy ustawić zmienną ssl_context samemu zamiast akceptując wartość domyślną. Oto przykład użycia wbudowanego modułu Pythona ssl (zamiast wbudowanego modułu ssl cherrypy).

import cherrypy 
import ssl 

ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23) 
ctx.options |= ssl.OP_NO_SSLv2 
ctx.options |= ssl.OP_NO_SSLv3 

cherrypy.config.update(server_config) 

gdzie w tym przypadku SSL jest z modułu OpenSSL.

Warto zauważyć, że począwszy od Pythona 3.2.3, moduł ssl domyślnie wyłącza niektóre słabe szyfry.

Ponadto można specjalnie ustawić wszystkie szyfry, które chcesz z

ciphers = { 
    'DHE-RSA-AE256-SHA', 
    ... 
    'RC4-SHA' 
} 

ctx.set_ciphers(':'.join(ciphers)) 

Jeśli używasz CherryPyWSGIServer z modułu web.wsgiserver, by ustawić domyślne szyfrów z

CherryPyWSGIServer.ssl_adapter.context.set_cipher_list(':'.join(ciphers)) 

Tutaj jest częścią dokumentacji opisującej powyższe: http://docs.cherrypy.org/en/latest/pkg/cherrypy.wsgiserver.html#module-cherrypy.wsgiserver.ssl_builtin

Wreszcie, oto kilka źródeł (prosząc o sim Ilar pytań), że może warto spojrzeć na:

+0

Cześć Michał, niestety muszę użyć polecenie wbudowane Pythona ' moduł ssl', z CherryPy, a nie 'pyopenssl' - który dostarcza moduł' OpenSSL'. Próbowałem twojego rozwiązania, ale sprawdzając z 'openssl s_client ... -ssl3' łączy się z ssl3, które muszę zapewnić, aby być wyłączone. – gc5

+0

@fbrundu - Mój błąd, widziałem, jak mówisz Python3, ale i tak dałem ci odpowiedź Python2! Edytowałem powyższą odpowiedź. Daj znać czy działa. –

+1

Przykro mi, ale to nie działa. Uruchamianie z 'openssl s_client ... -ssl3' zawsze daje mi' Protokół: SSLv3' .. Czy to możliwe, że 'ssl_context' działa tylko z' pyOpenSSL', który nie działa z cherrypy na Python3? – gc5