Предотвратить использование OpenSSL системных сертификатов? - PullRequest
3 голосов
/ 24 октября 2010

Как я могу предотвратить использование OpenSSL (в частности, модуля ssl Python) системными центрами сертификации?

Другими словами, я хотел бы, чтобы он доверял только тем центрам сертификации, которые я указал, и ничему другому:

ssl_socket = ssl.wrap_socket(newsocket, server_side=True, certfile="my_cert.pem",
                             ca_certs=MY_TRUSTED_CAs, # <<< Only CAs specified here
                             cert_reqs=ssl.CERT_REQUIRED, ssl_version=ssl.PROTOCOL_TLSv1)

1 Ответ

2 голосов
/ 25 октября 2010

Я только что провел несколько тестов, и перечисление вашего выбора СА в параметрах ca_certs - это именно то, что вам нужно.

Система, на которой я пробовал это Linux с Python 2.6.Если вы не используете ca_certs, это не позволяет вам использовать cert_reqs=ssl.CERT_REQUIRED:

Traceback (most recent call last):
  File "sockettest.py", line 18, in <module>
    cert_reqs=ssl.CERT_REQUIRED, ssl_version=ssl.PROTOCOL_TLSv1)
  File "/usr/lib/python2.6/ssl.py", line 350, in wrap_socket
    suppress_ragged_eofs=suppress_ragged_eofs)
  File "/usr/lib/python2.6/ssl.py", line 113, in __init__
    cert_reqs, ssl_version, ca_certs)
ssl.SSLError: _ssl.c:317: No root certificates specified for verification of other-side certificates.

Я также пытался использовать клиент для отправки сертификата, который не был получен от ЦС вca_certs, и я получаю ssl_error_unknown_ca_alert (как и ожидалось).

Обратите внимание, что в любом случае отправка списка CA сертификатов клиентов не производится (в списке certificate_authorities в сообщении CertificateRequest TLS), но это не требуется.Полезно только помочь клиенту выбрать сертификат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...