2012-12-15 8 views
12

में एक महत्वपूर्ण स्टोर करने के लिए मैं KeyStore यहाँ प्रासंगिक कोड है में 2 कुंजी संग्रहीत करने की आवश्यकता है:जावा कैसे कुंजीस्टोर

KeyStore ks = KeyStore.getInstance("JKS"); 
String password = "password"; 
char[] ksPass = password.toCharArray(); 
ks.load(null, ksPass); 
ks.setKeyEntry("keyForSeckeyDecrypt", privateKey, null, null); 
ks.setKeyEntry("keyForDigitalSignature", priv, null, null); 
FileOutputStream writeStream = new FileOutputStream("key.store"); 
ks.store(writeStream, ksPass); 
writeStream.close(); 

हालांकि मैं एक execption प्राप्त "निजी कुंजी प्रमाणपत्र श्रृंखला के साथ होना चाहिए"

वह क्या है, बिल्कुल? और मैं इसे कैसे उत्पन्न करूं?

उत्तर

15

आपको निजी कुंजी प्रविष्टि के लिए प्रमाणपत्र (सार्वजनिक कुंजी) भी प्रदान करने की आवश्यकता है। सीए द्वारा हस्ताक्षरित प्रमाण पत्र के लिए, श्रृंखला सीए का प्रमाणपत्र और अंत प्रमाणपत्र है।

KeyPair keyPair = ...;//You already have this 
X509Certificate certificate = generateCertificate(keyPair); 
KeyStore keyStore = KeyStore.getInstance("JKS"); 
keyStore.load(null,null); 
Certificate[] certChain = new Certificate[1]; 
certChain[0] = certificate; 
keyStore.setKeyEntry("key1", (Key)keyPair.getPrivate(), pwd, certChain); 

उत्पन्न करने के लिए प्रमाण पत्र इस link का पालन करें::
उदाहरण:

public X509Certificate generateCertificate(KeyPair keyPair){ 
    X509V3CertificateGenerator cert = new X509V3CertificateGenerator(); 
    cert.setSerialNumber(BigInteger.valueOf(1)); //or generate a random number 
    cert.setSubjectDN(new X509Principal("CN=localhost")); //see examples to add O,OU etc 
    cert.setIssuerDN(new X509Principal("CN=localhost")); //same since it is self-signed 
    cert.setPublicKey(keyPair.getPublic()); 
    cert.setNotBefore(<date>); 
    cert.setNotAfter(<date>); 
    cert.setSignatureAlgorithm("SHA1WithRSAEncryption"); 
    PrivateKey signingKey = keyPair.getPrivate();  
    return cert.generate(signingKey, "BC"); 
} 
+0

सार्वजनिक कुंजी प्रकार कुंजी के एक स्व-हस्ताक्षरित प्रमाणपत्र के लिए आप केवल स्व-हस्ताक्षरित प्रमाणपत्र
उदाहरण है , और वे प्रमाणपत्र [] का अनुरोध करते हैं। मैं सर्टिफिकेट चेन – MichBoy

+0

पर सार्वजनिक कुंजी कैसे डालूं? क्या आपके पास 'X509 प्रमाण पत्र नहीं है? आपको निजी कुंजी कहां मिली? – Cratylus

+0

मैंने कुंजी की जोड़ी उत्पन्न करने के लिए एक KeyPairGenerator शुरू किया है – MichBoy

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