Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
The Sorry State Of SSL by Hynek Schlawack
Search
PyCon 2014
April 12, 2014
Technology
570
2
Share
The Sorry State Of SSL by Hynek Schlawack
PyCon 2014
April 12, 2014
More Decks by PyCon 2014
See All by PyCon 2014
Postgres Performance for Humans by Craig Kerstiens
pycon2014
29
3.7k
Technical Onboarding, Training, and Mentoring by Kate Heddleston and Nicole Zuckerman
pycon2014
1
2.4k
"My big gay adventure. Making, releasing and selling an indie game made in python." by Luke Miller
pycon2014
2
1.7k
Farewell and Welcome Home, Python in Two Genders by Naomi_Ceder
pycon2014
1
790
Deliver Your Software in an Envelope by Augie Fackler and Nathaniel Manista
pycon2014
1
620
Hitchhikers Guide to Free and Open Source Participation by Elena Williams
pycon2014
6
1.3k
Localization Revisted (aka. Translations Evolved) by Ruchi Varshney
pycon2014
0
730
Smart Dumpster by Bradley E. Angell
pycon2014
0
570
Software Engineering for Hackers: Bridging the Two Solitudes by Tavish Armstrong
pycon2014
0
790
Other Decks in Technology
See All in Technology
JJUG CCC 2026 Spring AI時代の開発こそ標準化を武器に! ― 方式・プロセス・プラットフォームの標準化
s27watanabe
2
650
Claude Codeですべての日常業務を爆速化しよう!
minorun365
PRO
17
16k
Fabric-cicd によるAzure DevOps デプロイ
ryomaru0825
0
170
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
200
運用を見据えたAIエージェント設計実践
amacbee
0
650
大規模災害時でも高い信頼性を維持するアプリケーション基盤の実現/nikkei-tech-talk46
nikkei_engineer_recruiting
0
130
関西に縁あるMicrosoft MVPsが語るCopilotの未来
kasada
0
910
はじめてのDatadog
kairim0
0
250
開発を止めない CI/CD ~CI Visibilityによる継続的最適化~
pensuke628
0
230
ChatworkとBPaaS 異なる特性で学んだAI機能開発の ベストプラクティス
kubell_hr
2
550
TROCCOで始めるクラウドコストを民主化するためのFinOps
tk3fftk
2
520
大学生が本気でDatabricksを活用してDiscordサークルをデータ駆動させてみた
phantomjuju
1
310
Featured
See All Featured
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
160
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.5k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Skip the Path - Find Your Career Trail
mkilby
1
130
エンジニアに許された特別な時間の終わり
watany
107
240k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Faster Mobile Websites
deanohume
310
31k
Rails Girls Zürich Keynote
gr2m
96
14k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
470
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
130
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Transcript
THE SORRY STATE OF SSL Hynek Schlawack
@hynek https://hynek.me https://github.com/hynek https://www.variomedia.de Hi!
None
None
None
ONLY LINK ox.cx/t
WTF
WTF SSL
WTF SSL & TLS
TIMELINE
TIMELINE 1995: Secure Sockets Layer 2.0, Netscape
TIMELINE 1995: Secure Sockets Layer 2.0, Netscape 1996: SSL 3.0,
still Netscape
TIMELINE 1995: Secure Sockets Layer 2.0, Netscape 1996: SSL 3.0,
still Netscape 1999: Transport Layer Security 1.0, IETF
TIMELINE 1995: Secure Sockets Layer 2.0, Netscape 1996: SSL 3.0,
still Netscape 1999: Transport Layer Security 1.0, IETF 2006: TLS 1.1
TIMELINE 1995: Secure Sockets Layer 2.0, Netscape 1996: SSL 3.0,
still Netscape 1999: Transport Layer Security 1.0, IETF 2006: TLS 1.1 2008: TLS 1.2
2013
2013 • newfound scrutiny
2013 • newfound scrutiny • browsers add TLS 1.2
2013 • newfound scrutiny • browsers add TLS 1.2 •
just using TLS not enough
TLS
TLS • identity
TLS • identity • confidentiality
TLS • identity • confidentiality • integrity
TLS HYGIENE
SERVERS
BE UP-TO-DATE • OpenSSL >= 1.0.1c • Apache >= 2.4.0
• nginx >= 1.0.6 or 1.1.0
CERTIFICATES • identity • validity
CERTIFICATES • identity • validity • CA sig
CERTIFICATES • identity • validity • CA sig
CERTIFICATES • identity • validity • CA sig
CERTIFICATES • identity • validity • CA sig
CERTIFICATES • identity • validity • CA sig
EXTENDED VALIDATION CERTIFICATES
EXTENDED VALIDATION CERTIFICATES
TRUST CHAIN
TRUST CHAIN
TRUST CHAIN
CERTIFICATES • trust chain
CERTIFICATES • trust chain • host name/service
CERTIFICATES • trust chain • host name/service • already/still valid?
DISABLE • SSL 2.0
DISABLE • SSL 2.0 • SSL 3.0 (if you can)
DISABLE • SSL 2.0 • SSL 3.0 (if you can)
• TLS compression
CIPHER SUITES
CIPHER
CIPHER Cipher
CIPHER Cipher Plaintext
CIPHER Cipher Plaintext
CIPHER Cipher Ciphertext Plaintext
Ciphertext CIPHER Cipher Plaintext
CIPHER: MODE
CIPHER: MODE • CBC
CIPHER: MODE • CBC • stream ciphers
CIPHER: MODE • CBC • stream ciphers • GCM
ENCRYPTION: PREFER THIS
ENCRYPTION: PREFER THIS AES128-GCM &
ENCRYPTION: PREFER THIS AES128-GCM & ChaCha20
ENCRYPTION: FALL BACK TO AES128-CBC
ENCRYPTION: IF LIFE IS CRUEL TO YOU 3DES-CBC
ENCRYPTION: EOL
ENCRYPTION: DANGEROUS • EXP-*
ENCRYPTION: DANGEROUS • EXP-* • DES
ENCRYPTION: DANGEROUS • EXP-* • DES • RC4
KEY EXCHANGE
KEY EXCHANGE fast PFS RSA ✔️ ❌
KEY EXCHANGE fast PFS RSA ✔️ ❌ DHE ❌ ✔️
KEY EXCHANGE fast PFS RSA ✔️ ❌ DHE ❌ ✔️
ECDHE ✔️ ✔️
KEY EXCHANGE fast PFS RSA ✔️ ❌ DHE ❌ ✔️
ECDHE ✔️ ✔️
INTEGRITY: MACS • Message Authentication Code
INTEGRITY: MACS • Message Authentication Code • HMAC
INTEGRITY: MACS • Message Authentication Code • HMAC • GCM
HAVE THE LAST WORD
YOU’RE DONE!
YOU’RE DONE! (but test your results!)
CERTIFICATE
CERTIFICATE
CERTIFICATE
CERTIFICATE
CERTIFICATE
CERTIFICATE
CERTIFICATE
PROTOCOLS
PROTOCOLS
PROTOCOLS
PROTOCOLS
CIPHER SUITES
CIPHER SUITES
CIPHER SUITES
CIPHER SUITES
CIPHER SUITES
CIPHER SUITES
CIPHER SUITES
CIPHER SUITES
CLIENTS
YOU HAD ONE JOB!
YOU HAD ONE JOB! VERIFY!
VERIFY THE CERTIFICATE! • valid?
VERIFY THE CERTIFICATE! • valid? • trustworthy chain?
VERIFY THE CERTIFICATE! • valid? • trustworthy chain? • correct
hostname/service?
TRUST CHAIN
TRUST CHAIN • VERIFY_PEER
TRUST CHAIN • VERIFY_PEER • trust stores OS dependent
TRUST CHAIN • VERIFY_PEER • trust stores OS dependent •
SSL_CTX_set_default_ verify_paths
SYSTEM CA • FreeBSD: ca_root_nss
SYSTEM CA • FreeBSD: ca_root_nss • debian/Red Hat: ca-certificates
SYSTEM CA • FreeBSD: ca_root_nss • debian/Red Hat: ca-certificates •
OS X: TEA or homebrew
SYSTEM CA • FreeBSD: ca_root_nss • debian/Red Hat: ca-certificates •
OS X: TEA or homebrew • Windows: wincertstore
SYSTEM CA • FreeBSD: ca_root_nss • debian/Red Hat: ca-certificates •
OS X: TEA or homebrew • Windows: wincertstore • or: Mozilla/certifi
HOSTNAME VERIFICATION OpenSSL to developers:
HOSTNAME VERIFICATION OpenSSL to developers: LOL
DON’T VERIFY TRUST CHAIN I can pretend to be Google
with any self-signed certificate.
DON’T VERIFY HOSTNAME I can pretend to be Google with
any valid certificate.
None
SET SOME OPTIONS • acceptable ciphers • disable SSL 2.0
THAT’S ALL!
USERS
FUNDAMENTAL MISCONCEPTIONS
FUNDAMENTAL MISCONCEPTIONS • no end-to-end security
FUNDAMENTAL MISCONCEPTIONS • no end-to-end security • metadata
VPN?
VPN? • sees all your traffic
VPN? • sees all your traffic • same for CDN
CERTIFICATE WARNINIGS
CERTIFICATE WARNINIGS
ROOT CERTIFICATE POISONING
TRUST ISSUES
TRUST ISSUES
TRUST ISSUES
TRUST ISSUES
TRUST ISSUES • hacked
TRUST ISSUES • hacked • screw up
TRUST ISSUES • hacked • screw up • court orders
TRUST ISSUES • hacked • screw up • court orders
• big corp
None
DON’T DO IT YOURSELF IF YOU CAN HELP IT. Rule
of Thumb
STANDARD LIBRARY VS. PYOPENSSL
STANDARD LIBRARY
STANDARD LIBRARY • terrible pre-3.3
STANDARD LIBRARY • terrible pre-3.3 • very incomplete in 2.7
STANDARD LIBRARY • terrible pre-3.3 • very incomplete in 2.7
• PFS impossible
STANDARD LIBRARY • terrible pre-3.3 • very incomplete in 2.7
• PFS impossible • missing options
STANDARD LIBRARY • terrible pre-3.3 • very incomplete in 2.7
• PFS impossible • missing options • bound to Python’s OpenSSL
HOSTNAME VERIFICATION 3.2– from ssl import match_hostname 2.4–2.7 pip install
backports.ssl_match_hostname
PYOPENSSL
PYOPENSSL • Python 2.6+, 3.2+, and PyPy
PYOPENSSL • Python 2.6+, 3.2+, and PyPy • more complete
API coverage
PYOPENSSL • Python 2.6+, 3.2+, and PyPy • more complete
API coverage • no server ECDHE (yet)
PYOPENSSL • Python 2.6+, 3.2+, and PyPy • more complete
API coverage • no server ECDHE (yet) • cryptography!
CRYPTOGRAPHY.IO
CRYPTOGRAPHY.IO • Python crypto w/o footguns
CRYPTOGRAPHY.IO • Python crypto w/o footguns • PyPy ♥ cffi
CRYPTOGRAPHY.IO • Python crypto w/o footguns • PyPy ♥ cffi
• SecureTransport is coming!
CRYPTOGRAPHY.IO • Python crypto w/o footguns • PyPy ♥ cffi
• SecureTransport is coming! • gives pyOpenSSL momentum
HOSTNAME VERIFICATION service_identity
LIBRARIES & FRAMEWORKS
SERVERS lib PFS good defaults configurable eventlet hybrid ❌ ❌
❌ gevent stdlib ❌ ❌ ❌ gunicorn depends ❌ ❌ ❌ Tornado stdlib ❌ ❌ ❌
SERVERS lib PFS good defaults configurable eventlet hybrid ❌ ❌
❌ gevent stdlib ❌ ❌ ❌ gunicorn depends ❌ ❌ ❌ Tornado stdlib ❌ ❌ ❌ Twisted 14.0 pyOpenSSL ✔️ ✔️ ✔️
SERVERS lib PFS good defaults configurable eventlet hybrid ❌ ❌
❌ gevent stdlib ❌ ❌ ❌ gunicorn depends ❌ ❌ ❌ Tornado stdlib ❌ ❌ ❌ Twisted 14.0 pyOpenSSL ✔️ ✔️ ✔️ uWSGI own C code ✔️ ❌ ✔️
SERVERS lib PFS good defaults configurable eventlet hybrid ❌ ❌
❌ gevent stdlib ❌ ❌ ❌ gunicorn depends ❌ ❌ ❌ Tornado stdlib ❌ ❌ ❌ Twisted 14.0 pyOpenSSL ✔️ ✔️ ✔️ uWSGI own C code ✔️ ❌ ✔️
CLIENTS lib verifies certificates verifies hostnames good defaults eventlet hybrid
❌ ❌ ❌ gevent stdlib ❌ ❌ ❌
CLIENTS lib verifies certificates verifies hostnames good defaults eventlet hybrid
❌ ❌ ❌ gevent stdlib ❌ ❌ ❌ Tornado stdlib ✔️ ✔️ ❌
CLIENTS lib verifies certificates verifies hostnames good defaults eventlet hybrid
❌ ❌ ❌ gevent stdlib ❌ ❌ ❌ Tornado stdlib ✔️ ✔️ ❌ Twisted 14.0 pyOpenSSL opt-in opt-in ✔️
CLIENTS lib verifies certificates verifies hostnames good defaults eventlet hybrid
❌ ❌ ❌ gevent stdlib ❌ ❌ ❌ Tornado stdlib ✔️ ✔️ ❌ Twisted 14.0 pyOpenSSL opt-in opt-in ✔️ urllib2 stdlib ❌ ❌ ❌
CLIENTS lib verifies certificates verifies hostnames good defaults eventlet hybrid
❌ ❌ ❌ gevent stdlib ❌ ❌ ❌ Tornado stdlib ✔️ ✔️ ❌ Twisted 14.0 pyOpenSSL opt-in opt-in ✔️ urllib2 stdlib ❌ ❌ ❌ urllib3/requests hybrid ✔️ ✔️ ✔️
SUMMARY
SUMMARY • keep TLS out of Python if you can
SUMMARY • keep TLS out of Python if you can
• use pyOpenSSL-powered requests for HTTPS
SUMMARY • keep TLS out of Python if you can
• use pyOpenSSL-powered requests for HTTPS • write servers in Twisted
SUMMARY • keep TLS out of Python if you can
• use pyOpenSSL-powered requests for HTTPS • write servers in Twisted • use pyOpenSSL
SUMMARY • keep TLS out of Python if you can
• use pyOpenSSL-powered requests for HTTPS • write servers in Twisted • use pyOpenSSL • use Python 2 stdlib only for clients
WHY SORRY?
IMPLEMENTATIONS
IMPLEMENTATIONS
USERS
USERS • run outdated software
USERS • run outdated software • click certificate warnings away
USERS • run outdated software • click certificate warnings away
• are at the mercy of 3rd parties
SERVERS
SERVERS
CLIENTS
CLIENTS
PYTHON Is at the forefront of terrible.
HOPE
HOPE • people care again
HOPE • people care again • stdlib
HOPE • people care again • stdlib • PyCA
CALLS TO ACTION
CALLS TO ACTION
CALLS TO ACTION
CALLS TO ACTION
CALLS TO ACTION
ox.cx/t @hynek Crypto Open Space!