Requests: تم تثبيت الشهادة ، قم بتعيين REQUESTS_CA_BUNDLE env var ، مازال يتم الحصول على خطأ SSL.

تم إنشاؤها على ٢٥ يوليو ٢٠١٣  ·  10تعليقات  ·  مصدر: psf/requests

أنا أستخدم وحدة جينكينسابي التي تستخدم الطلبات تحت الغطاء. إذا حاولت استخدامه خارج الصندوق ، وتوجيهه إلى خادم jenkins الذي يستخدم SSL ، فسأحصل على:

خطأ SSLE: [Errno 1] _ssl.c: 504: خطأ: 14090086 : إجراءات SSL

لا يوفر jenkinsapi خطافًا لتعيين التحقق = خطأ. حاولت حفظ الشهادة من خادم jenkins وضبط متغير البيئة REQUESTS_CA_BUNDLE للإشارة إليه ، وما زلت أحصل على نفس الخطأ. لقد حاولت أيضًا تثبيت Certifi ولكن هذا لا يحدث فرقًا.

أعلم أنه يمكنني اختراق كود jenkinsapi ولكن هذا ليس مرضيًا لأن جميع مستخدمي الكود الخاص بي يجب عليهم فعل الشيء نفسه. هل أنا أغفل شيء؟

التعليق الأكثر فائدة

لقد واجهت نفس المشكلة وفشل التحقق من شهادة SSL ، من خلال مراجعة كود 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 ، أعتقد أن إعداد REQUESTS_CA_BUNDLE في ~ / .bashrc سيصلح هذه المشكلة (لم يتم اختبارها لأن 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 =
----- نهاية الشهادة -----

Traceback (آخر مكالمة أخيرة):
ملف "Goals.py" ، السطر 3 ، بتنسيق
J = api.Jenkins ('https: // fusion. [مراجع] .com / jenkins /')
ملف "C: \ python27 \ lib \ site -pack \ jenkinsapi \ jenkins.py" ، السطر 35 ، في init
جينكينز بيس. init (self، baseurl)
ملف "C: \ python27 \ lib \ site -pack \ jenkinsapi \ jenkinsbase.py" ، السطر 27 ، in init
self.poll ()
ملف "C: \ python27 \ lib \ site -pack \ jenkinsapi \ jenkinsbase.py" ، السطر 49 ، في الاستطلاع
self._data = self._poll ()
ملف "C: \ python27 \ lib \ site -pack \ jenkinsapi \ jenkinsbase.py" ، السطر 53 ، في _poll
إرجاع self.get_data (url)
ملف "C: \ python27 \ lib \ site -pack \ jenkinsapi \ jenkinsbase.py" ، السطر 57 ، في get_data
response = requester.get_url (url)
ملف "C: \ python27 \ lib \ site -pack \ jenkinsapi \ utils \ requester.py" ، السطر 59 ، في get_url
عودة طلبات الحصول على (url، _requestKwargs)ملف "C: \ python27 \ lib \ site -pack \ orders \ api.py" ، السطر 55 ، في getطلب الإرجاع ('get' ، url ، * _kwargs)ملف "C: \ python27 \ lib \ site -pack \ orders \ api.py" ، السطر 44 ، في الطلبإرجاع session.request (طريقة = طريقة ، url = url ، * _kwargs)ملف "C: \ python27 \ lib \ site -pack \ orders \ Session.py" ، السطر 335 ، في الطلبResp = self.send (الإعدادية ، * _send_kwargs)ملف "C: \ python27 \ lib \ site -pack \ orders \ Session.py" ، السطر 438 ، في الإرسالr = adaptor.send (request، * kwargs)
ملف "C: \ python27 \ lib \ site -pack \ orders \ adapters.py" ، السطر 331 ، في الإرسال
رفع خطأ SSLE (e)
request.exceptions.SSLE الخطأ : [Errno 1] _ssl.c: 504: إجراءات SSL

هل يمكنك محاولة الاتصال باستخدام الطلبات مباشرة ، دون المرور عبر jenkinsapi ولكن أثناء تمرير الشهادة ، يمكنك حفظها للطلبات.

r = request.get (url، check = certfile)

خطأ SSLE: [Errno 1] _ssl.c: 504: خطأ: 14090086 : إجراءات SSL

r = request.get (url، cert = certfile)

خطأ SSLE: [Errno 336265225] _ssl.c: 351: خطأ: 140B0009 : إجراءات SSL

هل هذا يعني أنه من المفترض أن أمتلك المفتاح الخاص؟ أشك في أن أصحاب الخادم سيسمحون لي بالحصول عليه.

عذرًا ، تجاهل الجزء الثاني - اكتشفت أن تحديد "cert" يتعلق بمصادقة نفسك على الخادم وهي ليست المشكلة هنا.

نحن نعلم الآن أن المشكلة تكمن في الشهادة :-)
بالنظر إلى أن الشهادة من المرجع المصدق وليس من الخادم نفسه: هل سلسلة الدفع كاملة؟
يجب أن ترى هذه السلسلة في متصفحك حيث قمت بتصدير الشهادة.
للتحقق من طلبات الشهادة يحتاج إلى سلسلة كاملة. تم إرسال العنصر الأخير بواسطة الخادم ، أفترض أنك قمت فقط بحفظ شهادة الجذر في ملف.
ما زلت بحاجة إلى جميع الشهادات بين الجذر والأوراق. يمكن أن يرسلها الخادم جنبًا إلى جنب مع الشهادة النهائية ، أو يجب أن تكون قادرًا على إضافتها إلى ملف الشهادة.

شكرًا - لقد نجحت أخيرًا في العمل! للتلخيص ، إذا كان هذا مفيدًا لشخص آخر: كنت بحاجة إلى تصدير كل شهادة في السلسلة من الخادم نفسه إلى الجذر ، وحفظ كل واحدة بتنسيق base64 ، ثم نسخ جميع الشهادات في ملف واحد ، وتعيين البيئة متغير REQUESTS_CA_BUNDLE للإشارة إليه.

شكرا مرة أخرى لمساعدتكم!

بالنسبة لموظفي Google الآخرين - يمكنك تعطيل التحقق من طبقة المقابس الآمنة في jenkinsapi باستخدام:

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 ، من خلال مراجعة كود 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 ، أعتقد أن إعداد REQUESTS_CA_BUNDLE في ~ / .bashrc سيصلح هذه المشكلة (لم يتم اختبارها لأن aws-cli يعمل بدونها)

REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt # ca-bundle.crt
export REQUESTS_CA_BUNDLE
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

justlurking picture justlurking  ·  3تعليقات

mitar picture mitar  ·  4تعليقات

eromoe picture eromoe  ·  3تعليقات

ReimarBauer picture ReimarBauer  ·  4تعليقات

remram44 picture remram44  ·  4تعليقات