Игнорировать предупреждение «сертификат неизвестен» - PullRequest
2 голосов
/ 12 декабря 2011

У меня есть следующий простой скрипт Python:

import socket
import ssl

if __name__ == "__main__":
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind("", 443)
    s.listen(1)
    (conn, addr) = s.accept()
    sslconn = ssl.wrap_socket(conn, server_side=True, certfile="server.crt", keyfile="server.key", cert_reqs=ssl.CERT_NONE)

    print 'Connection established'
    while True:
        data = sslconn.recv(1024)
        if not data: break
        print "Data received"


    sslconn.close()

Файлы server.crt и server.key определяют открытый и закрытый ключ самозаверяющего сертификата.Если я подключаюсь к хосту, на котором выполняется этот сценарий, например, с помощью Firefox, сценарий завершается с

ssl.SSLError: [Errno 1] _ssl.c:503: sslv3 alert certificate unknown

. Насколько я понимаю, это происходит от клиента (скажем, Firefox), который предупреждает хост о том, что сертификатнедействительным.Это хорошо, но почему это приводит к завершению сценария?Должен ли я как-то явно игнорировать предупреждение?

1 Ответ

2 голосов
/ 12 декабря 2011

Попробуйте перехватить исключение и игнорировать его. Предполагается, что это не смертельно.

sslconn = ssl.wrap_socket(conn, server_side=True, certfile="server.crt",
                          keyfile="server.key", cert_reqs=ssl.CERT_NONE,
                          do_handshake_on_connect=False)
try:
    sslconn.do_handshake()
except ssl.SSLError, err:
    if err.args[1].find("sslv3 alert") == -1:
        raise
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...