Я работаю на скрученном сервере, где должно быть двухстороннее рукопожатие SSL. Я очень новичок в работе с этими инструментами, поэтому я не уверен, как установить эту опцию. Это мой реактор:
def main(reactor):
with open('/opt/ssl/cert.pem') as f:
certdata = f.read()
with open('/opt/ssl/issuer.pem') as f:
issuer_certdata = f.read()
log.info("SSL Certificate Loaded.")
certificate = ssl.PrivateCertificate.loadPEM(certdata)
issuer_certificate = ssl.PrivateCertificate.loadPEM(issuer_certdata)
options = ssl.CertificateOptions(privateKey=certificate.privateKey.original,
certificate=certificate.original,
raiseMinimumTo=ssl.TLSVersion.TLSv1_2,
trustRoot=ssl.trustRootFromCertificates([issuer_certificate]))
factory = protocol.Factory.forProtocol(MPG)
reactor.listenSSL(6060, factory, options)
return defer.Deferred()
Из чтения https://twistedmatrix.com/documents/16.2.0/api/twisted.internet.ssl.CertificateOptions.html я обнаружил, что мне нужно использовать аргумент доверия Root и передать ему объект, содержащий CA. Теперь, в моем случае, сервер и клиенты имеют один и тот же CA, поэтому я передаю этот сертификат, так что CA из этого сертификата является доверенным.
Тем не менее, это как-то не работает, и наши тесты wireshark терпят неудачу с сообщением об ошибке с unknown CA
во время проверки сертификата клиента. Я не знаю, потому что я неправильно настроил скрученный сервер или потому что информация CA просто не совпадает.
Редактировать: Со времени первоначального комментария Жана-Поля я попытался использовать посредника, ЦС и их обоих в качестве аргумента доверия Root, используя trustRootFromCertificates. Все они приводят к неизвестной ошибке CA.
PS. Я на Centos7, и я обновил /etc/pki/ca-trust/source/anchors/
, чтобы включить сертификат CA. и побежал update-ca-trust
PS2. Протестировав мой сервер с помощью команды ниже, я обнаружил, что он не может проверить мою собственную цепочку, когда я удаляю доверие Root из моего кода выше. openssl s_client -connect x.x.x.x:6060 -tls1_2 -state -cert cert.pem -key cert.pem
То есть без аргумента доверия Root это цепочка сертификатов от openssl:
---
Certificate chain
0 s:C = TR, O = MYCERT
i:C = TR, CN = MYCERT's issuer
---
В то время как с аргументом доверия Root я получаю :
---
Certificate chain
0 s:C = TR, O = MYCE
i:C = TR, CN = MYCERT's issuer
1 s:C = TR, CN = MYCERT's issuer
i:C = TR, L = ROOT CA
---
Я не знаю, почему доверие Root вызывает это изменение. Я, вероятно, неправильно понимаю все это, и я очень потерян. Любая помощь будет оценена.