web-dev-qa-db-ja.com

リソースにアクセスしようとするとSSLError( "bad handshake")カスタム証明書とリクエスト

Python Zeepを使用してデータを交換するようにWebサービスをプログラムしたい。自分の証明書でのみサービスにアクセスできる。PFX証明書を持っているが、2つに変換した.pemファイル。

私のコード:

from zeep import Client
from zeep.wsse.signature import Signature 
import requests
from requests import Session
key_filename ='/.files/cert.key.pem'
cert_filename = './files/cert.crt.pem'
session = Session()  
r = requests.get('https:...../PingWs?wsdl',
             cert=(cert_filename, key_filename)) 
print (r)

しかし、私は得る

sSLError(e、request = request)を要求します。 SSLError(SSLError( "bad handshake:Error([( 'SSL routines'、 'tls_process_server_certificate'、 'certificate verify failed')]、)"、)、))

12
lopow

システム設定から接続しようとしているリモートサーバー証明書の署名に使用されるCA証明書をホワイトリストに登録することで解決する必要があるその問題。ただし、テストのみを目的として、以下を使用して検証をオフにすることができます。

r = requests.get('https:...../PingWs?wsdl',verify=False)

本番環境では使用しないでください。

それが役に立てば幸い!

10
sshussain270

このエラーは、ほぼ確実に、リモートエンドポイントがローカル認証局ストアの証明書で署名されていないことを意味します。次の2つのオプションがあります。

  • 要求が使用するCAストアに証明書をインストールします。デフォルトでは、これはローカルシステムCAストアであり、少なくとも要求によって決定できます。

  • リクエストセッションオブジェクトで使用する別の証明書セットを設定します。

例として:

import requests.sessions

photon_requests_session = requests.sessions.Session()
photon_requests_session.verify = "/etc/photon/cacerts.pem"

次に、サーバーのCA証明書が/etc/photon/cacerts.pemにあることを確認する必要があります。私はこれを次のように使用します:

r = photon_requests_session.get(url)
1
Sam Hartman

時刻と日付が正しいことを確認してください。そうでない場合、SSLは問題を引き起こす可能性があります

0
oroel