簡體   English   中英

Python 證書錯誤請求。 由 SSLError(SSLError(9, '[SSL] PEM lib (_ssl.c:4027)

[英]Python request with certificates error. Caused by SSLError(SSLError(9, '[SSL] PEM lib (_ssl.c:4027)

這是我的代碼:

import requests


url = 'https://ecomm.pashabank.az:18443/ecomm2/MerchantHandler'

headers = {'content-type' : 'application/json'}

data = { # some optional data
    "command": "v",
    "amount": "10",
    "currency": "932",
    "client_ip_addr": "167.992.139.153",
    "msg_type": "SMS"
}

# all certificates are in the current directory within this script file
psroot = "PSroot.pem"
cert_file = "certificate.0025598.der"
key_file = "certificate.0025598.pem"

certs = (cert_file, key_file, psroot)
response = requests.post(url, cert=certs)

引發此錯誤:

Traceback (most recent call last):
  File "/Users/mammadaliyevmammadali/Desktop/bank/main.py", line 19, in <module>
    response = requests.post(url, cert=certs)
  File "/Users/mammadaliyevmammadali/.local/share/virtualenvs/bank-wIDLHQju/lib/python3.9/site-packages/requests/api.py", line 115, in post
    return request("post", url, data=data, json=json, **kwargs)
  File "/Users/mammadaliyevmammadali/.local/share/virtualenvs/bank-wIDLHQju/lib/python3.9/site-packages/requests/api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "/Users/mammadaliyevmammadali/.local/share/virtualenvs/bank-wIDLHQju/lib/python3.9/site-packages/requests/sessions.py", line 587, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/mammadaliyevmammadali/.local/share/virtualenvs/bank-wIDLHQju/lib/python3.9/site-packages/requests/sessions.py", line 701, in send
    r = adapter.send(request, **kwargs)
  File "/Users/mammadaliyevmammadali/.local/share/virtualenvs/bank-wIDLHQju/lib/python3.9/site-packages/requests/adapters.py", line 563, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='ecomm.pashabank.az', port=18443): Max retries exceeded with url: /ecomm2/MerchantHandler (Caused by SSLError(SSLError(9, '[SSL] PEM lib (_ssl.c:4027)')))

注意錯誤結尾的_ssl.c:4027 我找不到解決方法。 我需要驗證我的 3 個證書以處理請求。 怎么做? 為了安全起見,所有證書的格式和傳遞都正確無誤。 所有實現都是正確的,但我的腳本不起作用。 請幫忙!

 cert_file = "certificate.0025598.der"

鑒於文件擴展名,這對我來說看起來像是 DER 格式的證書。 但是需要 PEM 格式。 證書可以從 DER 轉換為 PEM

 openssl x509 -inform der -in certificate.0025598.der -out certificate.0025598.pem

然后改用certificate.0025598.pem

....由 SSLError(SSLError(9, '[SSL] PEM lib (_ssl.c:4027)')))

此錯誤是指源代碼中 Modules/_ssl.c 中的第 4027 行,但如果沒有您確切的 Python 版本,則不知道此行號處的代碼是什么。 所知道的是您正在使用某種 Python 3.9。 此行號附近的相關代碼是這樣的

  4031      r = SSL_CTX_use_certificate_chain_file(self->ctx,
  4032          PyBytes_AS_STRING(certfile_bytes));
  4033      PySSL_END_ALLOW_THREADS_S(pw_info.thread_state);
  4034      if (r != 1) {
  ...
  4044              _setSSLError(NULL, 0, __FILE__, __LINE__);

這是嘗試加載作為客戶端證書給出的證書的代碼,即您的certificate.0025598.der PEM lib意味着錯誤來自 OpenSSL 中的一部分,該部分試圖將證書解釋為 PEM - 但失敗了。 因此它符合我最初的推測,即您的證書不是預期的 PEM 格式,而是 DER 格式。

暫無
暫無

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

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