Python Requests - システムの ca-certificates を使用するには (debian/ubuntu)?
2023-09-13 20:18:34
質問
私は自己署名されたルート CA 証明書を debian の
/usr/share/ca-certificates/local
でインストールし
sudo dpkg-reconfigure ca-certificates
. この時点で
true | gnutls-cli mysite.local
は幸せであり
true | openssl s_client -connect mysite.local:443
は幸せですが、python2 と python3 のリクエストモジュールは証明書と幸せでないと主張します。
python2:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 70, in get
return request('get', url, params=params, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 497, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
python3
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
return request('get', url, params=params, **kwargs)
File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
なぜ python はシステムの ca-certificates バンドルを無視するのですか、そしてどのように統合するのですか?
どのように解決するのですか?
から https://stackoverflow.com/a/33717517/1695680
Python のリクエストにシステムの ca-certificates バンドルを使わせるには、 自身の組み込みバンドルよりもそれを使うように指示する必要があります。
export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
Requestsは参考のため、ここにそのバンドルを埋め込みます。
/usr/local/lib/python2.7/site-packages/requests/cacert.pem
/usr/lib/python3/dist-packages/requests/cacert.pem
または、新しいバージョンでは、証明書を取得するために追加のパッケージを使用します。 https://github.com/certifi/python-certifi
どのファイルから証明書が読み込まれるかを確認するために、試すことができます。
Python 3.8.5 (default, Jul 28 2020, 12:59:40)
>>> import certifi
>>> certifi.where()
'/etc/ssl/certs/ca-certificates.crt'
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Jupyter (IPython)ノートブックのセッションをpickleして保存する方法
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
-
[解決済み] Pythonのリクエストで自己署名SSL証明書を信頼させるには?