Requests: certifiをインストールし、REQUESTS_CA_BUNDLE env varを設定しましたが、SSLエラーが発生します。

作成日 2013年07月25日  ·  10コメント  ·  ソース: psf/requests

内部でリクエストを使用するjenkinsapiモジュールを使用しています。 SSLを使用するjenkinsサーバーに向けて、箱から出して使用しようとすると、次のようになります。

SSLError:[Errno 1] _ssl.c:504:エラー:14090086 :SSLルーチン:SSL3_GET_SERVER_CERTIFICATE :証明書の検証に失敗しました

jenkinsapiは、verify = Falseを設定するためのフックを提供していません。 jenkinsサーバーから証明書を保存し、それを指すようにREQUESTS_CA_BUNDLE環境変数を設定しようとしましたが、それでも同じエラーが発生しました。 certifiもインストールしてみましたが、違いはありません。

jenkinsapiコードをハックできることは知っていますが、コードのすべてのユーザーが同じことをしなければならないため、それでは不十分です。 私は何かを見落としていますか?

最も参考になるコメント

同じ問題が発生し、ssl certifacateの検証に失敗しました。boto3コードを確認したところ、REQUESTS_CA_BUNDLEが設定されていないことがわかったため、手動で設定して両方の問題を修正しました。

from boto3.session import Session
import os

# debian
os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(
    '/etc/ssl/certs/',
    'ca-certificates.crt')
# centos
#   'ca-bundle.crt')

aws-cliの場合、〜/ .bashrcでREQUESTS_CA_BUNDLEを設定すると、この問題が修正されると思います(aws-cliはそれなしで動作するためテストされていません)

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE

全てのコメント10件

保存された証明書がどのように見えるかを教えていただけますか? ここに貼り付けるだけでいいはずです。

返信ありがとうございます。 証明書を再保存しましたが、現在は機能しています。

くそ! 私はあまりにも早く話しました。 証明書は次のとおりです。

-----証明書の開始-----
MIIGQDCCBSigAwIBAgIKWQnHpQAAAAAIzjANBgkqhkiG9w0BAQUFADBZMRMwEQYK
CZImiZPyLGQBGRYDY29tMRQwEgYKCZImiZPyLGQBGRYEZWJheTEUMBIGCgmSJomT
8ixkARkWBGNvcnAxFjAUBgNVBAMTDUFNRVItU1NMQ0EtMDIwHhcNMTIxMTE4MDUz
MTA4WhcNMTQxMTE4MDUzMTA4WjB1MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2Fs
aWZvcm5pYTERMA8GA1UEBxMIU2FuIEpvc2UxFDASBgNVBAoTC1BheVBhbCBJbmMu
MQwwCgYDVQQLEwNDRUkxGjAYBgNVBAMTEWZ1c2lvbi5wYXlwYWwuY29tMIIBIjAN
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwOZj4ezQ / k5vTU6E63uNsP + LZjeg
4kTEUwSzFsRj3NImQdfOrQ7W7S386ep2EZZqmjevO6HBzkaXaYYQ0GSqthdspd53
A8GnLi0q43oFy + kyAc2ItAM0SH / GOT0J + 5EUdS12S821WMiwebHInSHINAjexAHN
Sm87yXCyO8mZ3Jzc3 + PFraveF9WFmE0NLZUDpEMxq17K3 / 6iGLsVO / YZkUpaAXNJ
962fGrIZ4xcvK // S903ehloKwQnRCgtNoGCmvsoDftbYye6LfRh / rH3xWFXIUmWG
Wib27ZwAgbyxz2FPcexie4FB / IzbH2l9Tp5rzGWfs1159VmVhQ / L3EJIDQIDAQAB
o4IC7DCCAugwHQYDVR0OBBYEFMkZJD5QaahE21k37UvPIP1VmZ1SMB8GA1UdIwQY
MBaAFLI24M3s4ViBTJbTf1lWAEsUzehVMIIBDQYDVR0fBIIBBDCCAQAwgf2ggfqg
gfeGgb9sZGFwOi8vL0NOPUFNRVItU1NMQ0EtMDIsQ049QU1FUi1TU0xDQS0wMixD
Tj1DRFAsQ049UHVibGljJTIwS2V5JTIwU2VydmljZXMsQ049U2VydmljZXMsQ049
Q29uZmlndXJhdGlvbixEQz1jb3JwLERDPWViYXksREM9Y29tP2NlcnRpZmljYXRl
UmV2b2NhdGlvbkxpc3Q / YmFzZT9vYmplY3RDbGFzcz1jUkxEaXN0cmlidXRpb25Q
b2ludIYzaHR0cDovL3BraS5jb3JwLmViYXkuY29tL0NlcnREYXRhL0FNRVItU1NM
Q0EtMDIuY3JsMIIBTgYIKwYBBQUHAQEEggFAMIIBPDCBsQYIKwYBBQUHMAKGgaRs
ZGFwOi8vL0NOPUFNRVItU1NMQ0EtMDIsQ049QUlBLENOPVB1YmxpYyUyMEtleSUy
MFNlcnZpY2VzLENOPVNlcnZpY2VzLENOPUNvbmZpZ3VyYXRpb24sREM9Y29ycCxE
Qz1lYmF5LERDPWNvbT9jQUNlcnRpZmljYXRlP2Jhc2U / b2JqZWN0Q2xhc3M9Y2Vy
dGlmaWNhdGlvbkF1dGhvcml0eTBbBggrBgEFBQcwAoZPaHR0cDovL3BraS5jb3Jw
LmViYXkuY29tL0NlcnREYXRhL0FNRVItU1NMQ0EtMDIuY29ycC5lYmF5LmNvbV9B
TUVSLVNTTENBLTAyLmNydDApBggrBgEFBQcwAYYdaHR0cDovL3BraS5jb3JwLmVi
YXkuY29tL29jc3AwIQYJKwYBBAGCNxQCBBQeEgBXAGUAYgBTAGUAcgB2AGUAcjAL
BgNVHQ8EBAMCBaAwEwYDVR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcNAQEFBQAD
ggEBAFj5s9SdtRpXLz03BjPFsDvQPzoyML9ngHL5zyYMlotUpD7d + aO41Q2E2 + LO
REfbd3NAnLT3MfWMHAxNaZ4TRUog1fFJmLJxHTBax5fpmY8YAhiPjQIO + IZOUZO3
4lAwXKsq4ylWS2tlbxL56mPngN2EzLisWgIZqJSx9zd1K / LvKyvs / R3wxBerhTN5
LyHFf9 / ByUhaqgIE8jydM4qiS8o3zxjrPAIbi6lnZjktkguYTSAKDoHb17BkNoPr
mU1xDtD1 / FuX22dfHpqmJSYVubPVfUTvGB3julT2GNNREoHsQI7wmgFBEMaTdvJq
42DUnHIK0pdMzb2urxL / toZ3mHY =
-----証明書の終了-----

トレースバック(最後の最後の呼び出し):
ファイル "goals.py"、3行目、
J = api.Jenkins( 'https:// fusion。[編集済み] .com / jenkins /')
ファイル "C:\ python27 \ lib \ site-packages \ jenkinsapi \ jenkins.py"、35行目、 init
JenkinsBase。 init (self、baseurl)
ファイル "C:\ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py"、27行目、 init
self.poll()
ファイル「C:\ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py」、49行目、投票
self._data = self._poll()
ファイル "C:\ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py"、53行目、_poll
self.get_data(url)を返します
get_dataのファイル「C:\ python27 \ lib \ site-packages \ jenkinsapi \ jenkinsbase.py」、57行目
response = requester.get_url(url)
ファイル「C:\ python27 \ lib \ site-packages \ jenkinsapi \ utils \ requester.py」、59行目、get_url
戻り値requests.get(url、 _requestKwargs)ファイル "C:\ python27 \ lib \ site-packages \ requests \ api.py"、55行目、getreturn request( 'get'、url、* _kwargs)ファイル "C:\ python27 \ lib \ site-packages \ requests \ api.py"、44行目、リクエストsession.request(method = method、url = url、* _kwargs)を返しますファイル "C:\ python27 \ lib \ site-packages \ requests \ sessions.py"、335行目、リクエストresp = self.send(prep、* _send_kwargs)ファイル "C:\ python27 \ lib \ site-packages \ requests \ sessions.py"、438行目、送信r = adapter.send
ファイル "C:\ python27 \ lib \ site-packages \ requests \ adapters.py"、331行目、送信
SSLError(e)を発生させます
requests.exceptions.SSLError:[Errno 1] _ssl.c:504:エラー:14090086 :SSLルーチン:SSL3_GET_SERVER_CERTIFICATE :証明書の検証に失敗しました

jenkinsapiを経由せずに、リクエストを使用して直接接続を試みることができますが、証明書を渡しながら、リクエストに安全にアクセスできます。

r = requests.get(url、verify = certfile)

SSLError:[Errno 1] _ssl.c:504:エラー:14090086 :SSLルーチン:SSL3_GET_SERVER_CERTIFICATE :証明書の検証に失敗しました

r = requests.get(url、cert = certfile)

SSLError:[Errno 336265225] _ssl.c:351:エラー:140B0009 :SSLルーチン:SSL_CTX_use_PrivateKey_file :PEM lib

それは私が秘密鍵を持っていることになっているという意味ですか? サーバーの所有者が私にそれを持たせてくれるとは思えません。

申し訳ありませんが、2番目の部分は無視してください。「cert」を指定することは、サーバーに対して自分自身を認証することであり、ここでは問題ではないことがわかりました。

これで、問題が証明書にあることがわかりました:-)
証明書がサーバー自体ではなくCAからのものであるとすると、スラストのチェーンは完了していますか?
証明書をエクスポートしたブラウザにこのチェーンが表示されます。
証明書要求を検証するには、完全なチェーンが必要です。 最後の要素はサーバーによって送信されます。ルート証明書をファイルに保存しただけだと思います。
ルートとリーフの間のすべての証明書が必要です。 これらは、リーフ証明書と一緒にサーバーから送信することも、証明書ファイルに追加できるようにすることもできます。

ありがとう-私はついにそれを機能させました! 要約すると、これが他の誰かに役立つ場合に備えて、チェーン内のすべての証明書をサーバー自体からルートにエクスポートし、それぞれをbase64形式で保存してから、すべての証明書を1つのファイルにコピーして、環境を設定する必要がありました。それを指す変数REQUESTS_CA_BUNDLE。

助けてくれてありがとう!

他のGoogle社員の場合-次を使用してjenkinsapiでSSL検証を無効にできます。

from jenkinsapi.jenkins import Jenkins
from jenkinsapi.utils.requester import Requester

j = Jenkins(base_url, requester=Requester(username, password, baseurl=base_url, ssl_verify=False))

同じ問題が発生し、ssl certifacateの検証に失敗しました。boto3コードを確認したところ、REQUESTS_CA_BUNDLEが設定されていないことがわかったため、手動で設定して両方の問題を修正しました。

from boto3.session import Session
import os

# debian
os.environ['REQUESTS_CA_BUNDLE'] = os.path.join(
    '/etc/ssl/certs/',
    'ca-certificates.crt')
# centos
#   'ca-bundle.crt')

aws-cliの場合、〜/ .bashrcでREQUESTS_CA_BUNDLEを設定すると、この問題が修正されると思います(aws-cliはそれなしで動作するためテストされていません)

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE
このページは役に立ちましたか?
0 / 5 - 0 評価