2013-07-17 8 views
67

में निजी-कुंजी/सार्वजनिक-प्रमाण पत्र जोड़ी आयात करना मैंने टीएलएस के साथ जावा (आंतरिक) सर्वर द्वारा उपयोग किए जाने वाले निजी/सार्वजनिक कुंजी की एक जोड़ी के साथ एक नया जावा कीस्टोर बनाने के लिए निम्न चरणों का उपयोग किया। कृपया ध्यान दें कि प्रमाणपत्र selfsigned है:जावा कीस्टोर

1) AES256

साथ
openssl genrsa -aes256 -out server.key 1024 

2 उत्पन्न कुंजी) सीए

openssl req -x509 -sha256 -new -key server.key -out server.csr 

3) उत्पन्न स्वयं हस्ताक्षर किए समाप्ति समय के लिए प्रमाणपत्र अनुरोध उत्पन्न 10 साल

openssl x509 -sha256 -days 3652 -in server.csr -signkey server.key -out selfsigned.crt 

4) जोड़ी आयात करने के लिए KeyStoreExplorer जैसे प्रोग्राम का उपयोग करें (priva ते कुंजी और स्वयं हस्ताक्षर प्रमाणपत्र) एक नए जेकेएस

यह काम करता है लेकिन मैं एक जीयूआई के प्रयोग किए बिना अंतिम चरण को लागू करना चाहता हूं।

// create the keystore and import the public key. THIS WILL NOT IMPORT THE PRIVATE KEY SO THE KEYSTORE CAN'T BE USED ON THE SERVER TO MAKE THE TLS CONNECTION 
/usr/java/jdk1.6.0_45/bin/keytool -import -alias myservercert -file server.crt -keystore mykeystore.jks 

तो सवाल यह है: कैसे मैं एक का उपयोग किए बिना एक जावा KeyStore और आयात दोनों सार्वजनिक कुंजी के साथ प्रमाणपत्र और निजी कुंजी बना सकते हैं

मैं केवल स्वयं हस्ताक्षरित प्रमाणपत्र आयात करने के लिए कैसे पता जीयूआई?

+1

शायद यह "आयातकी" जावा प्रोग्राम आपके लिए जीयूआई के बिना नौकरी करेगा: http://www.agentbob.info/agentbob/79-AB.html – sk2212

+0

यदि लक्ष्य प्रणाली जावा है तो उपयोग करने की कोई आवश्यकता नहीं है ओपनएसएसएल बिल्कुल, सिर्फ keytool। उदाहरण के लिए जेएसएसई संदर्भ गाइड, या keytool के लिए उपकरण प्रलेखन देखें। – EJP

उत्तर

162

अपनी निजी कुंजी और सार्वजनिक प्रमाणपत्र के साथ, आपको पहले एक पीकेसीएस 12 कीस्टोर बनाने की आवश्यकता है, फिर इसे जेकेएस में परिवर्तित करें।

# Create PKCS12 keystore from private key and public certificate. 
openssl pkcs12 -export -name myservercert -in selfsigned.crt -inkey server.key -out keystore.p12 

# Convert PKCS12 keystore into a JKS keystore 
keytool -importkeystore -destkeystore mykeystore.jks -srckeystore keystore.p12 -srcstoretype pkcs12 -alias myservercert 

JKS की सामग्री को सत्यापित करने के लिए, तो आप इस आदेश का उपयोग कर सकते हैं: यदि यह एक स्व-हस्ताक्षरित प्रमाणपत्र नहीं था

keytool -list -v -keystore mykeystore.jks 

, तो आप शायद प्रमाणपत्र आयात करने के साथ इस चरण का पालन करने के लिए चाहते हो जाएगा विश्वसनीय सीए प्रमाण के लिए अग्रणी श्रृंखला।

+10

http://stackoverflow.com/a/8224863/183622 सीए प्रमाण पत्र और श्रृंखला संरक्षण सहित एक और गहन उदाहरण दिखाता है यदि इसकी आवश्यकता है –

0

एक कीस्टोर को एक कीस्टोर फ़ाइल की आवश्यकता है। KeyStore कक्षा को FileInputStream की आवश्यकता है। लेकिन अगर आप शून्य की आपूर्ति करते हैं (FileInputStream उदाहरण के बजाय) empty keystore will be loaded। एक बार जब आप एक कीस्टोर बनाते हैं, तो आप keytool का उपयोग करके इसकी अखंडता को सत्यापित कर सकते हैं।

के बाद कोड खाली पासवर्ड के साथ एक खाली कुंजीस्टोर बनाता

KeyStore ks2 = KeyStore.getInstance("jks"); 
    ks2.load(null,"".toCharArray()); 
    FileOutputStream out = new FileOutputStream("C:\\mykeytore.keystore"); 
    ks2.store(out, "".toCharArray()); 

एक बार जब आप कुंजी संग्रह है, प्रमाण पत्र का आयात बहुत आसान है। नमूना कोड के लिए चेकआउट this link

+0

इसे पूरा करने के लिए कोई भी कोड लिखना आवश्यक नहीं है। आपके द्वारा उद्धृत लिंक में महत्वपूर्ण त्रुटियां हैं। – EJP

+0

@EJB, मैंने ब्लॉग पर आपकी टिप्पणी देखी। मैं मानता हूं कि इसे पूरा करने के लिए कोई कोड लिखना आवश्यक नहीं है। लेकिन, अगर इसे प्रोग्रामेटिक रूप से पूरा किया जाना है? – Santosh

+1

इसके अलावा, 'InpputStream.available()' के बारे में आपका अवलोकन सही है, लेकिन मैं देखता हूं कि 'FilterInputStream का दस्तावेज़।उपलब्ध() 'कहते हैं _ बाइट्स की संख्या का अनुमान प्रस्तुत करता है जिसे इस इनपुट स्ट्रीम_ से पढ़ा जा सकता है (या छोड़ दिया जा सकता है) और कोई चेतावनी नहीं है! उदाहरण में (ब्लॉग में), 'DataInputStream.available() 'हर जगह उपयोग किया जाता है और' फ़िल्टर इनपुट स्ट्रीम '' DataInputStream' द्वारा बढ़ाया जाता है। क्या इस विशेष मामले में 'उपलब्ध()' का उपयोग सुरक्षित नहीं होना चाहिए? – Santosh

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