2012-01-05 9 views
26

मैं स्वयं हस्ताक्षरित certs बनाने के लिए openssl का उपयोग कर रहा हूँ। मैं प्रमाणपत्र मैं उत्पन्न के साथ इस त्रुटि हो रही है: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: नहीं विषय विकल्प वर्तमान नामएसएसएल सीर्ट्स में विषय अलौकिक नाम कैसे जोड़ें?

किसी को कैसे "विषय वैकल्पिक नाम" निर्दिष्ट करने के लिए पता है, जबकि एक प्रमाणपत्र बनाना? इस तरह मैं एक कीस्ट्रोक पैदा कर रहा हूँ है:

sudo $JAVA_HOME/bin/keytool -genkey -dname "CN=192.168.x.xxx, OU=I, O=I, L=T, ST=On, C=CA" -alias tomcat -validity 3650 -keyalg RSA -keystore /root/.keystore -keypass abcd -storepass abcd 

कुंजी उत्पन्न करने के लिए:

openssl s_client -connect 192.168.x.xxx:8443 2>/dev/null 

कृपया मदद! धन्यवाद!

+0

संभव डुप्लिकेट [? कैसे SSL प्रमाणपत्र सर्वर नाम हल कर रहे हैं/मैं Keytool का उपयोग कर वैकल्पिक नाम जोड़ सकते हैं] (http://stackoverflow.com/questions/8443081/how-are-ssl-certificate-server-names-resolved-can-i-add-alternative-names-using) – Bruno

+0

@ नीलमणि: मुझे आपकी समस्या नहीं आती है। विषय वैकल्पिक नाम X.50 9 प्रमाणपत्र में एक आवश्यक एक्सटेंशन नहीं है। इसलिए यदि आपके पास इसके बिना प्रमाणपत्र है, तो कोई समस्या नहीं है। तो आप यह अपवाद कैसे प्राप्त कर रहे हैं? – Cratylus

+0

@ user384706 क्या आप इस प्रश्न को देख सकते हैं? यहां तक ​​कि मैं उलझन में हूं कि यह इस त्रुटि को क्यों फेंक रहा है। [http://stackoverflow.com/questions/8759956/failed-to-create-service-exception-javax-xml-ws-webserviceexception/8760118#8760118] – Sapphire

उत्तर

37

हालांकि this question विषय Alt में आईपी पते के बारे में अधिक विशेष रूप से था। नाम, आदेश समान हैं (होस्ट नाम के लिए DNS प्रविष्टियों का उपयोग करके और IP आईपी पते के लिए प्रविष्टियां)।

अपने आप के शब्दों में:

आप keytool उपयोग कर रहे हैं, Java 7, keytool के रूप में एक विकल्प के लिए एक विषय वैकल्पिक नाम शामिल हैं (-ext के लिए दस्तावेज़ में तालिका देखें) है: क्या आप इस्तेमाल कर सकते हैं -ext सान = dns: www.example.com या -ext सान = आईपी: 10.0.0.1

ध्यान दें कि आप केवल इस आदेश का उपयोग करने के लिए जावा 7 के keytool की जरूरत है। एक बार जब आप अपना कीस्टोर तैयार कर लेंगे, तो इसे जावा के पिछले संस्करणों के साथ काम करना चाहिए।

(इस उत्तर के बाकी भी कहा गया है कि कैसे OpenSSL के साथ ऐसा करना है, लेकिन यह है कि तुम क्या प्रयोग कर रहे हैं होने के लिए प्रतीत नहीं होता।)

+0

मैं Java7 में नहीं बदल सकता। क्या मेरे जावा कोड में subjectalternativename चेक को बाईपास करने का कोई तरीका है? – Sapphire

+3

इस चेक से बचें नहीं। जैसा कि मैंने कहा, आपको इस 'keytool' कमांड का उपयोग करने के लिए केवल जावा 7 की आवश्यकता है। एक बार यह हो जाने के बाद, आप अपने जावा 6 (या निचले) इंस्टॉलेशन के साथ जेकेएस फ़ाइल का उपयोग करने में सक्षम होना चाहिए (यह एक ही मशीन पर भी नहीं होना चाहिए)। वैकल्पिक रूप से, आप इस (स्वयं हस्ताक्षरित) प्रमाणपत्र उत्पन्न करने के लिए ओपनएसएसएल का उपयोग कर सकते हैं (कमांड और सेटिंग्स थोड़ा अधिक जटिल हो सकती हैं): आप ओपनएसएसएल के साथ उत्पन्न पीईएम कुंजी/प्रमाण को '.p12' फ़ाइल में बदल सकते हैं और इसे सीधे इस्तेमाल कर सकते हैं कीस्टोर प्रकार 'पीकेसीएस 12' का उपयोग कर जावा से एक कीस्टोर के रूप में। आप आईपी एड्र के बजाय होस्टनाम का भी उपयोग कर सकते हैं: आप सीएन से दूर हो जाएंगे। – Bruno

+0

मैंने आपके द्वारा सुझाए गए होस्टनाम का उपयोग किया और मुझे यह मिला: myhostname.com से मेल खाने वाला कोई नाम नहीं मिला। – Sapphire

12

दोनों IP और DNS Keytool अतिरिक्त तर्क के साथ निर्दिष्ट किया जा सकता '-ext SAN = dns: abc.com, ip: 1.1.1.1'

उदाहरण: कीटोल -genkeypair -keystore keystore -dname "सीएन = परीक्षण, ओयू = अज्ञात, ओ = अज्ञात, एल = अज्ञात, एसटी = अज्ञात, सी = अज्ञात "-किपास कुंजीपीडब्ल्यू-स्टोरेपास स्टोरपास -कीएलजी आरएसए-ali अज्ञात -ext SAN = dns: test.abc.com, आईपी: 1.1.1.1

+3

सावधान रहें कि उपरोक्त आदेश ** ** नहीं है ** एक सीएसआर बनाएं। जावा की कीटोल कुंजी स्टोर में एक स्व-हस्ताक्षरित प्रमाणपत्र के रूप में एक कीपैयर बनाता है, और SAN विशेषता उस स्व-हस्ताक्षरित प्रमाणपत्र में जाती है। यदि आप एक SAN विशेषता के साथ एक CSR जारी करना चाहते हैं, तो आपको 'keytool -certreq' के समान-आगे तर्क पारित करने की आवश्यकता है। मजेदार बात यह है कि कीटोल की स्वयं-दस्तावेज सहायता ** ** में ** विकल्प नहीं है, हालांकि कीटोल प्रक्रिया करता है - ठीक है। – avarvit

+0

@avarvit इसका मतलब है कि मैं सीएसआर में altNames जोड़ सकता हूं भले ही इन्हें '-genkeypair' का उपयोग नहीं किया जाता है। इस सीएसआर के साथ सीए से प्रमाणपत्र प्राप्त करते समय क्या होगा? Woule keytool इसे आयात और सही निजी कुंजी से लिंक? क्या यह प्रमाणीकरण में altName जोड़ने का एक संभावित तरीका है जो इसे याद करता है? – eppesuig

+0

एक पूर्ण उदाहरण जोड़ने के लिए धन्यवाद – Tom

3

जब सीएसआर उत्पन्न करना संभव है निर्दिष्ट करना संभव है -ext विशेषता इसे फिर से सीएसआर

keytool -certreq -file test.csr -keystore test.jks -alias testAlias -ext SAN=dns:test.example.com 

पूर्ण उदाहरण यहाँ में डाला है करने के लिए: How to create CSR with SANs using keytool

की
संबंधित मुद्दे