【问题标题】:Python Sockets SSL: certificate verify failedPython Sockets SSL:证书验证失败
【发布时间】:2018-06-05 13:15:10
【问题描述】:

我正在尝试使用 python 套接字向域注册商发出可扩展配置协议 (EPP) 请求,该注册商只接受通过 ssl 的请求。

证书文件:www.myDomain.se.crt 密钥文件:mydomain.pem

openssl s_client -connect epptestv3.iis.se:700 -cert www.myDomain.se.crt -key mydomain.pem

当我尝试使用 openssl 客户端发出请求时,我成功地从注册商那里获得了问候响应,但是当我在 python 中使用以下代码时,我得到了 ssl 证书错误。

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(15)
sock.connect(('epptestv3.iis.se', 700))
sock.settimeout(60)  # regular timeout


ssl_keyfile='myDomain.pem'
ssl_certfile='www.myDomain.se.crt'
ssl_ciphers='AES256-GCM-SHA384'
ssl_version=ssl.PROTOCOL_TLSv1_2

sock = ssl.wrap_socket(sock,
                        ssl_keyfile,
                        ssl_certfile,
                        ssl_version=ssl_version,
                        ciphers=ssl_ciphers,
                        server_side=False,
                        cert_reqs=ssl.CERT_REQUIRED,
                        ca_certs=None
                        )

执行脚本后出现以下错误:

Traceback (most recent call last):
  File "server_connect.py", line 54, in <module>
    ca_certs=ssl_keyfile
  File "/usr/lib/python2.7/ssl.py", line 933, in wrap_socket
    ciphers=ciphers)
  File "/usr/lib/python2.7/ssl.py", line 601, in __init__
    self.do_handshake()
  File "/usr/lib/python2.7/ssl.py", line 830, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)

知道这里有什么问题吗?

【问题讨论】:

    标签: python sockets ssl registrar


    【解决方案1】:

    来自您的代码:

                        cert_reqs=ssl.CERT_REQUIRED,
                        ca_certs=None
    

    来自documentation of wrap_socket

    如果此参数的值不是 CERT_NONE,则 ca_certs 参数必须指向 CA 证书文件

    本质上,您在代码中要求验证来自服务器的证书 (CERT_REQUIRED),但同时指定您没有受信任的根 (ca_certs=None)。但如果没有受信任的根证书,则无法进行验证。

    请注意,将代码更改为使用 CERT_NONE 是个坏主意。它可能会起作用,因为不会进行证书验证,但它会对中间人攻击开放。

    【讨论】:

    • 其实我也试过提供ca_certs,但是没有用。
    • @OsamaRasheed:这很大程度上取决于您使用ca_certs 指定的文件内容。在您的情况下,您可能需要 this certificate 在文件中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2011-11-21
    • 2015-12-21
    相关资源
    最近更新 更多