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:
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
@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. –
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