SSL प्रमाणपत्र त्रुटि: त्रुटि सत्यापित करें: num = 20: स्थानीय जारीकर्ता प्रमाणपत्र प्राप्त करने में असमर्थ


11

मैं काम करने के लिए एक LDAPS सर्वर (सक्रिय निर्देशिका) के लिए एक एसएसएल कनेक्शन प्राप्त करने की कोशिश कर रहा हूं, लेकिन समस्या हो रही है। मैंने इसका उपयोग करने की कोशिश की:

openssl s_client -connect the.server.edu:3269 

निम्नलिखित परिणाम के साथ:

verify error:num=20:unable to get local issuer certificate 

मैंने सोचा, ठीक है, एक अच्छा उत्पादन सर्वर कुछ साल पुराना है। शायद सीए मौजूद नहीं है। मैंने तब आउटपुट से पेम फ़ाइल में प्रमाण पत्र निकाला और कोशिश की:

openssl s_client -CAfile mycert.pem -connect the.server.edu:3269

और वह भी काम नहीं किया।

मैं क्या खो रहा हूँ? कि हमेशा काम नहीं करना चाहिए?

ssl  openssl 

स्पष्टता के लिए, ऐसा प्रतीत होता है कि LDAPS, जब Windows से सेवा की जाती है, तो कनेक्शन होने पर CA प्रमाणपत्र प्रस्तुत नहीं करता है। इसलिए, आपको CA X.509 प्रमाणपत्र प्राप्त करना चाहिए, बेस 64 के रूप में निर्यात करें और नीचे दिए गए उत्तरों के अनुसार निर्दिष्ट करें। मेरे मामले में, python-ldap का उपयोग करके आप इसे GLOBAL गुंजाइश पर असाइन करते हैं (आपके ldap.initialize () उदाहरण के रूप में): ldap.set_option(ldap.OPT_X_TLS_CACERTFILE,'./ca_issuer_cert.pem') इसके बाद, मैं अपेक्षा के अनुसार STARTTLS (LDAP पोर्ट 389 के भीतर) का उपयोग करने में सक्षम था।
mbrownnyc

जवाबों:


4

तो यह वही है जो मैं CA प्रमाणित नाम के रूप में देखता हूं:

depth=1 /C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at //www.verisign.com/rpa (c)10/CN=VeriSign Class 3 International Server CA - G3
verify error:num=20:unable to get local issuer certificate
verify return:0

उस प्रमाणपत्र का नाम था जिसे मैंने अपने दूसरे प्रयास में -showcerts करने के बाद आयात किया था। मैंने ऐसा करके किस्टोर में सेरट्स को सूचीबद्ध किया:

$JAVA_HOME/bin/keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts

मैं वहां सीए प्रमाण पत्र देखता हूं।

Alias name: versign2006
Creation date: Jan 21, 2011
Entry type: trustedCertEntry

Owner: CN=VeriSign Class 3 International Server CA - G3, OU=Terms of use at www.verisign.com/rpa (c)10, OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5, OU="(c) 2006 VeriSign, Inc. - For authorized use only", OU=VeriSign Trust Network, O="VeriSign, Inc.", C=US
Serial number: 641be820ce020813f32d4d2d95d67e67
Valid from: Sun Feb 07 19:00:00 EST 2010 until: Fri Feb 07 18:59:59 EST 2020
Certificate fingerprints:
  MD5:  BA:B0:65:B4:3B:9C:E8:40:30:21:7D:C5:C6:CD:3F:EB
  SHA1: B1:8D:9D:19:56:69:BA:0F:78:29:51:75:66:C2:5F:42:2A:27:71:04

यह सुनिश्चित करने के लिए कि खुलता है कि कीस्टोर का उपयोग मैं सर्वर के साथ कर रहा हूं, -CAfile तर्क का उपयोग कर रहा हूं:

openssl s_client -connect the.server.edu:3269 -CAfile $JAVA_HOME/jre/lib/security/cacerts

यह जानकर कि CA के पास java keystore का पासवर्ड है, मैंने इस तरह पास-पास पास: पासवर्ड विकल्प का उपयोग करने की कोशिश की:

openssl s_client -connect the.server.edu:3269 -CAfile $JAVA_HOME/jre/lib/security/cacerts -pass pass:changeit

लेकिन वह भी काम नहीं किया।

इसके बारे में मजेदार बात यह है कि कैसर्ट फाइल का इस पर एक पासवर्ड है और ओप्सल शिकायत नहीं कर रहा है कि यह कैसर्ट फाइल को नहीं पढ़ सकता है। यह मुझे गलत लगता है। क्या वह या कुछ और घंटी बजाता है?


3

यह त्रुटि कहने का तरीका है कि "मैं एक विश्वसनीय रूट के लिए प्रमाणपत्र श्रृंखला का पालन नहीं कर सकता"। मैंने अपने AD सर्वरों के लिए बस यही कमांड किया और मुझे एक पूर्ण प्रमाणपत्र-श्रृंखला मिलती है, लेकिन शीर्ष प्रमाणपत्र में वह सटीक त्रुटि है। यदि आपके पास उस CA की पब-की है जिसने प्रमाण पत्र पर हस्ताक्षर किए हैं तो आप इसे -CAfileया -CApathविकल्पों के साथ निर्दिष्ट कर सकते हैं


ठीक है, प्रतिक्रिया के लिए धन्यवाद। इसलिए मैंने वह कोशिश की। पर -showcerts विकल्प के साथ एक ही काम करके CA सर्टिफिकेट प्राप्त करें, अन्य प्रमाण पत्र को पकड़ा। वह सीए सर्टिफिकेट होना चाहिए, है ना? कोशिश की कि पेम फाइल में सर्वर सर्टिफिकेट की जगह और वही एरर मैसेज मिले। कोई और विचार?

उस स्थिति में यह संभावित है कि यह किसी अन्य कारण से सत्यापन को विफल कर रहा है, जैसे कि समाप्त हो रहा है।
sysadmin1138

1

मैं काम करने के लिए एक LDAPS सर्वर (सक्रिय निर्देशिका) के लिए एक एसएसएल कनेक्शन प्राप्त करने की कोशिश कर रहा हूं, लेकिन समस्या हो रही है। मैंने इसका उपयोग करने की कोशिश की:

यदि आप OpenLDAP का उपयोग कर रहे हैं, तो आप सेट कर सकते हैं:

TLS_REQCERT=never

आपकी openldap.confफ़ाइल में, जो OpenLDAP को प्रमाणपत्र सत्यापन का प्रयास नहीं करने का निर्देश देता है। यदि आप Apache के साथ LDAP प्रमाणीकरण कर रहे हैं तो एक समान विकल्प है।

यदि आप वास्तव में प्रमाणपत्र सत्यापन करना चाहते हैं, तो निम्नलिखित मदद कर सकते हैं:

मैं क्या खो रहा हूँ? कि हमेशा काम नहीं करना चाहिए?

मुझे ऐसा नहीं लगता। हालांकि निम्नलिखित निश्चित लग सकता है, यह वास्तव में सिर्फ मेरा सबसे अच्छा मेहमान है:

आपने जो प्रयास किया वह केवल एक स्व-हस्ताक्षरित प्रमाण पत्र के लिए काम करेगा। क्योंकि प्रमाणपत्र वास्तव में Windows CA द्वारा जारी किया गया था, सर्वर प्रमाणपत्र का उपयोग करने का प्रयास करते हुए तर्क के रूप में -CAfileआपको कुछ भी नहीं मिलेगा।

पर -showcerts विकल्प के साथ एक ही काम करके CA सर्टिफिकेट प्राप्त करें, अन्य प्रमाण पत्र को पकड़ा। वह सीए सर्टिफिकेट होना चाहिए, है ना?

जरूरी नहीं, नहीं। इस बात की कोई गारंटी नहीं है कि रिमोट सर्वर अपने आउटपुट में CA प्रमाणपत्र प्रस्तुत करता है। आपको सर्वप्रथम सर्वर प्रमाणपत्र जारी करने वाले को देखना होगा:

openssl x509 -in server.crt -noout -text | grep Issuer

... और फिर देखें कि क्या आपके पास जारी करने वाले अन्य प्रमाणपत्रों में से एक है जो जारीकर्ता से मेल खाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.