Could you please give some advise?
यहां पर विस्तृत जवाब और कैसे दयनीय OpenSSL::SSL::VERIFY_NONE
के अलावा कुछ के साथ रूबी में इस समस्या को ठीक करने के लिए है।
$ openssl s_client -connect 64.103.26.61:443 | openssl x509 -text -noout
depth=2 C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2
...
Subject: C=US, ST=CA, L=San Jose, O=Cisco Systems, Inc., CN=msesandbox.cisco.com
...
X509v3 Subject Alternative Name:
DNS:msesandbox.cisco.com
तो उपकरण में msesandbox.cisco.com का DNS नाम है।
$ nslookup msesandbox.cisco.com
Server: 192.168.1.1
Address: 192.168.1.1#53
Non-authoritative answer:
Name: msesandbox.cisco.com
Address: 64.103.26.61
तो पहली बात अपने DNS नाम हुए इससे जुड़ते है क्या करना है, और नहीं एक आईपी पता: nslookup
आप अपने एक अच्छा होस्ट नाम बताता है।
आप cisco.com
डोमेन के लिए प्रमाणपत्र जारी (या एक अनुरोध कर सकते हैं), तो आप पूछ सकते हैं कि आईपी पते 64.103.26.61 एक विषय वैकल्पिक नाम (SAN) रूप में जोड़ दिया। तो प्रमाण पत्र में दो SAN होंगे।
अब, अगर आप वापस openssl
आदेश पर जाएँ:
$ openssl s_client -connect 64.103.26.61:443 | openssl x509 -text -noout
depth=2 C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2
verify error:num=19:self signed certificate in certificate chain
...
Issuer: C=US, O=HydrantID (Avalanche Cloud Corporation), CN=HydrantID SSL ICA G2
...
Subject: C=US, ST=CA, L=San Jose, O=Cisco Systems, Inc., CN=msesandbox.cisco.com
आप देखेंगे जारीकर्ता और विषय अलग हैं। इसका मतलब है कि यह एक स्वयं हस्ताक्षरित प्रमाणपत्र है। प्रमाणपत्र हाइड्रंटिड (हिमस्खलन बादल निगम) द्वारा जारी किया गया था।
यदि आप आगे देखने के लिए, आप देखेंगे जारीकर्ता की सार्वजनिक कुंजी (प्राधिकरण कुंजी पहचानकर्ता) विषय की सार्वजनिक कुंजी (विषय कुंजी पहचानकर्ता) से अलग है:
X509v3 Authority Key Identifier:
keyid:98:6A:B6:2D:2E:BF:A7:AA:9F:F6:F7:D6:09:AF:D5:8B:57:F9:8A:B7
...
X509v3 Subject Key Identifier:
B5:3D:50:53:0A:A2:06:9E:9A:29:89:7A:AB:96:90:FE:9D:6B:57:A0
फिर, अपने आत्म पर हस्ताक्षर किए।
आप फिर से openssl आदेश के लिए वापस जाओ, तो आप जारीकर्ता HydrantID SSL ICA G2
है देखेंगे, और उसके जारीकर्ता QuoVadis Root CA2 G3
है:
depth=2 C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2
verify return:1
depth=1 C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2
verify return:1
depth=0 C = US, ST = CA, L = San Jose, O = "Cisco Systems, Inc.", CN = msesandbox.cisco.com
verify return:1
इसका मतलब है कि QuoVadis Root CA2 G3
जारी HydrantID SSL ICA G2
; और HydrantID SSL ICA G2
msesandbox.cisco.com
जारी किया गया। QuoVadis Root CA2 G3
खाद्य श्रृंखला का शीर्ष है।
आप QuoVadis CA Certificate Download से QuoVadis Root CA2 G3
लाने कर सकते हैं:
$ curl -O -J -L https://www.quovadisglobal.bm/Repository/~/media/Files/Roots/quovadis_rca2g3_der.ashx
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1380 100 1380 0 0 1808 0 --:--:-- --:--:-- --:--:-- 5726
curl: Saved to filename 'quovadis_rca2g3_der.cer'
$ openssl x509 -in quovadis_rca2g3_der.cer -inform DER -out quovadis-ca.pem -outform PEM
$ cat quovadis-ca.pem
-----BEGIN CERTIFICATE-----
MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL
BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc
BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00
...
-----END CERTIFICATE-----
यदि आप उपकरण को प्रमाणित करने के Quovadis पर भरोसा है, तो:
$ openssl s_client -connect msesandbox.cisco.com:443 -CAfile quovadis-ca.pem
CONNECTED(00000003)
depth=2 C = BM, O = QuoVadis Limited, CN = QuoVadis Root CA 2
verify return:1
depth=1 C = US, O = HydrantID (Avalanche Cloud Corporation), CN = HydrantID SSL ICA G2
verify return:1
depth=0 C = US, ST = CA, L = San Jose, O = "Cisco Systems, Inc.", CN = msesandbox.cisco.com
verify return:1
...
Start Time: 1420616960
Timeout : 300 (sec)
Verify return code: 0 (ok)
सूचना OpenSSL Verify return code: 0 (ok)
साथ समाप्त हो गया। यह आपको बताता है कि आपको अच्छी श्रृंखला मिली है। ओपनएसएसएल होस्टनाम मिलान करने का काम करता है, लेकिन हम पहले ही जानते हैं कि प्रमाणपत्र में होस्टनाम अच्छा है।
अब रूबी कोड के लिए। यहाँ
#!/usr/bin/ruby
require 'net/http'
require 'net/https'
require 'openssl'
uri = URI('https://msesandbox.cisco.com:443')
options_mask = OpenSSL::SSL::OP_NO_SSLv2 | OpenSSL::SSL::OP_NO_SSLv3 | OpenSSL::SSL::OP_NO_COMPRESSION
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Get.new(uri.request_uri)
if uri.scheme == "https"
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
http.ca_file = File.join(File.dirname(__FILE__), "quovadis-ca.pem")
# http.ssl_options = options_mask
end
response = http.request request
और एक रन है:: तुम सब करने की ज़रूरत है रूबी में सीए प्लग है
$ ./Connect-Test.rb
$
कोई छूट नहीं है, और कोई OpenSSL::SSL::VERIFY_NONE
।
आपको options_mask
का उपयोग करने की कोशिश करनी चाहिए क्योंकि इससे कमजोर/घायल/टूटे हुए प्रोटोकॉल को हटा दिया जाता है। लेकिन कभी-कभी रूबी इतनी टूटी हुई और अनियंत्रित होती है, मैं कभी भी इसे काम करने में सक्षम नहीं हूं।
मैं दोनों HydrantID SSL ICA G2
और OpenSSL साथ QuoVadis Root CA2 G3
(जिसका अर्थ है मैं OpenSSL से एक Verify Result 0 (OK)
मिला) में विश्वास जड़ कर रहा था। लेकिन रूबी केवल QuoVadis Root CA2 G3
को संभाल सकता था (यह HydrantID SSL ICA G2
पर एक श्रृंखला नहीं बना सका)। अधिक रूबी टूटी-नेस।
आपके विस्तृत उत्तर के लिए धन्यवाद। अब मैं इस मुद्दे को समझता हूं। ऐसा लगता है कि इस स्व-हस्ताक्षरित प्रमाणपत्र मेरे लोकहोस्ट के लिए उचित नहीं है।मैंने प्रमाणित नामक एक मणि स्थापित किया जो इस समस्या को संभालता है (मुझे नहीं पता कि यह कैसे काम करता है) मैंने अपने कोड से OpenSSL :: SSL :: VERIFY_NONE को हटा दिया। जैसा कि आपने कहा, उत्पादन के लिए मैं QuoVadis सीए प्रमाणपत्र डाउनलोड से प्रमाण पत्र डाउनलोड करने जा रहा हूँ –