pyopenssl, скрученный с давайте шифровать: цепочка сертификатов сервера неполна
Я хочу использовать шифрование на моем витом сервере, но в последней версии Chrome для Android я получаю:
the identity of this website has not been verified
Аналогичное сообщение о последнем Firefox для Ubuntu.
Мой отчет SSL от ssllabs.com:
Цепочка сертификатов этого сервера неполная. Оценка ограничена до B.
Мой соответствующий код:
from OpenSSL import crypto
from twisted.internet import ssl
privkey=open('/etc/letsencrypt/live/mindolia.com/privkey.pem', 'rt').read()
certif=open('/etc/letsencrypt/live/mindolia.com/fullchain.pem', 'rt').read()
privkeypyssl=crypto.load_privatekey(crypto.FILETYPE_PEM,privkey)
certifpyssl=crypto.load_certificate(crypto.FILETYPE_PEM,certif)
contextFactory=ssl.CertificateOptions(privateKey=privkeypyssl, certificate=certifpyssl)
2 ответа
Самый простой способ создать CertificateOptions
в том числе цепочка сертификатов должна использовать библиотеку pem, например:
from pem.twisted import certificateOptionsFromFiles
contextFactory = certificateOptionsFromFiles(
'/etc/letsencrypt/live/mindolia.com/privkey.pem',
'/etc/letsencrypt/live/mindolia.com/fullchain.pem')
Кроме того, для прямой интеграции Let's Encrypt с Twisted вы можете использовать txacme при условии, что ваше приложение Twisted работает на порту 443 (или на него перенаправлен порт 443).
from OpenSSL import crypto
from twisted.internet import ssl
privkey=open('/etc/letsencrypt/live/mindolia.com/privkey.pem', 'rt').read()
certif=open('/etc/letsencrypt/live/mindolia.com/cert.pem', 'rt').read()
chain=open('/etc/letsencrypt/live/mindolia.com/chain.pem', 'rt').read()
privkeypyssl=crypto.load_privatekey(crypto.FILETYPE_PEM,privkey)
certifpyssl=crypto.load_certificate(crypto.FILETYPE_PEM,certif)
chainpyssl=[crypto.load_certificate(crypto.FILETYPE_PEM,chain)]
contextFactory=ssl.CertificateOptions(privateKey=privkeypyssl,certificate=certifpyssl,extraCertChain=chainpyssl)