![](/img/trans.png)
[英]ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed, Python sockets, ssl, gmail smtp connect
[英]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.