Python-клиент - SSL lib - проверка сертификата не удалась

Я пытаюсь создать небольшой защищенный HTTPS-клиент в учебных целях и посмотреть, как все механизмы SSL работают на более высоком уровне, так что я ' m пытается преобразовать простой сокет в ssl через ssl.wrap_socket.

Я, вероятно, перевернул всю концепцию в обратном порядке, но вот что я делаю:

s.connect((host, port))
if port == 443:
    f = open('cacerts.txt', 'r')
    calist = f.read()
    f.close()
    ca = ssl.get_server_certificate((host, port), ssl_version=ssl.PROTOCOL_SSLv3|ssl.PROTOCOL_TLSv1)
    if not ca in calist:
        f = open('cacerts.txt', 'a')
        f.write(ca)
        f.close()
    s = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3|ssl.PROTOCOL_TLSv1, cert_reqs=ssl.CERT_REQUIRED, ca_certs="cacerts.txt")
    s.do_handshake()

И когда я вызываю do_handshake (), я получаю следующее:

Traceback (most recent call last):
  File "SSL_test.py", line 84, in Requester
    s = ssl.wrap_socket(s, ssl_version=ssl.PROTOCOL_SSLv3|ssl.PROTOCOL_TLSv1, cert_reqs=ssl.CERT_REQUIRED, ca_certs="cacerts.txt")
  File "C:\Python26\lib\ssl.py", line 338, in wrap_socket
    suppress_ragged_eofs=suppress_ragged_eofs)
  File "C:\Python26\lib\ssl.py", line 120, in __init__
    self.do_handshake()
  File "C:\Python26\lib\ssl.py", line 279, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [Errno 1] _ssl.c:490: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Я некоторое время искал и пытался найти что-то, что было бы близко к тому, что я делаю, но все указывают либо на PyOpenSSL, либо на Twisted, и я бы предпочел, чтобы я мог держаться подальше от этих библиотек, в основном потому, что позже я планирую перенести это в четкую производственную среду, где я разрешено использовать только встроенные библиотеки Python2.6.

Любая помощь будет полезна!

11
задан Torxed 21 September 2011 в 09:03
поделиться