Mas*_*Yab 5 python ssl request ssl-certificate python-3.x
我想发送XML到soap请求,我使用python请求,如下所示:
response = requests.post(url, data=body, headers=headers)
Run Code Online (Sandbox Code Playgroud)
当我发送请求时,我给出这个请求:
requests.exceptions.SSLError: HTTPSConnectionPool(host='49.1.92.38', port=7911): Max retries exceeded with url: /ECARE/CRMInterface_INV_Services (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))
Run Code Online (Sandbox Code Playgroud)
我verify=False提出这样的请求:
response = requests.post(url, data=body, headers=headers, verify=False)
Run Code Online (Sandbox Code Playgroud)
我给出了一些错误,例如you can't send a request like that.
我意识到我必须随此请求发送证书才能获得成功响应
我有.cer和.crt文件一起发送,但我像这样发送:
response = requests.post(url, data=body, headers=headers, cert=(c1, c2))
Run Code Online (Sandbox Code Playgroud)
并得到这个错误:
OpenSSL.SSL.Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]
Run Code Online (Sandbox Code Playgroud)
更新:
我使用openssl x509 -inform der -in PK.cer -out PK.pem并尝试这个:
response = requests.post(url, data=body, headers=headers, verify='PK.pem')
Run Code Online (Sandbox Code Playgroud)
但这一次我得到了这个错误:
requests.exceptions.SSLError: HTTPSConnectionPool(host='49.1.92.38', port=7911): Max retries exceeded with url: /ECARE/CRMInterface_INV_Services (Caused by SSLError(CertificateError("hostname '49.1.92.38' doesn't match 'crm.at.com'",),))
Run Code Online (Sandbox Code Playgroud)
我想使用此证书文件发送此肥皂请求,但我找不到任何有帮助的内容。谁能帮我吗?
带着敬意。
这里有几个问题:
...证书验证失败...
Run Code Online (Sandbox Code Playgroud)response = requests.post(url, data=body, headers=headers, verify=False)我给出了一些错误,例如
you can't send a request like that.
首先,设置它不是一个好主意,verify=False因为这会完全禁用证书验证(即不安全)。不过,您现在不会收到 SSL 错误,而是收到不同的错误。这意味着它成功完成了 SSL 握手(无需证书验证)
您看到的错误可能是因为服务器不喜欢您的请求。由于不知道服务器实际想要什么以及您发送了什么,因此不可能说出您在这里做错了什么。
Run Code Online (Sandbox Code Playgroud)response = requests.post(url, data=body, headers=headers, cert=(c1, c2))并得到这个错误:
Run Code Online (Sandbox Code Playgroud)OpenSSL.SSL.Error: [('PEM routines', 'PEM_read_bio', 'no start line'), ('SSL routines', 'SSL_CTX_use_PrivateKey_file', 'PEM lib')]
这是因为您使用了明确记录cert用于客户端证书的参数,即证书和匹配的私钥。看起来不像你这样的客户证书。我不确定您尝试使用的文件的内容是什么(“我有 .cer 和 .crt 文件”没有提及内容),但如果您尝试将这些文件用作 CA,则需要使用验证参数反而。