(PEP is WIP) • Disabled in recent Linux distros (Debian, RHEL 8) • Major browsers remove TLS 1.0/1.1 in March 2020 • Chrome, Edge, Firefox, IE, Safari, ... • Python 3.8 • minimum version TLS 1.2 • document as “may not work” • deprecate all constants SSL 2.0 - TLS 1.1 • Python 3.9 • Remove everything TLS 1.2 came out in 2008
ssl.create_default_context() • OK on Linux/BSD with platform OpenSSL • Broken on Linux/BSD with self-compiled OpenSSL (wheel, Anaconda) • Partly broken on Windows • Broken on macOS (certifi) • IMHO (!!!) broken in requests, pip, twine, … • They use certifi instead of ss.create_default_context()
store • Fix SSL_CERT_FILE env var (“broken” in LibreSSL) • Detect known paths on Linux/BSD • Maybe use freedesktop.org p11-kit (PKCS#11) • Use platform's chain building and verification mechanism • Windows: CertGetCertificateChain(), CertVerifyCertificateChainPolicy() • macOS: SecTrustEvaluate() • Golang, Chrome browser, PHP use these approaches Open Table?
API for Python • Simplified and unified API around TLS/SSL libraries • OpenSSL • SecureTransport • SChannel Paul Kehrer (PyCA Cryptography) and I will hack on PEP 543 during sprints.