витая проверка клиента SSL доверие Root значение - PullRequest
0 голосов
/ 20 марта 2020

Я работаю на скрученном сервере, где должно быть двухстороннее рукопожатие 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 вызывает это изменение. Я, вероятно, неправильно понимаю все это, и я очень потерян. Любая помощь будет оценена.

...