簡體   English   中英

Python套接字SSL:證書驗證失敗

[英]Python Sockets SSL: certificate verify failed

我正在嘗試使用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客戶端發出請求時,我成功從registrar獲得了問候響應,但是當我在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)

知道這里有什么問題嗎?

從您的代碼:

                    cert_reqs=ssl.CERT_REQUIRED,
                    ca_certs=None

wrap_socket文檔中

如果此參數的值不是CERT_NONE,則ca_certs參數必須指向CA證書文件

本質上,您是在代碼中要求從服務器驗證證書( CERT_REQUIRED ),但同時指定您沒有受信任的根( ca_certs=None )。 但是,如果沒有受信任的根證書,則無法進行驗證。

請注意,將代碼更改為使用CERT_NONE會是個壞主意。 由於可能不會進行證書驗證,因此可能會起作用,但是對於中等程度的攻擊,它是開放的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM