2009-08-24 14 views
25

से कुंजी प्राप्त नहीं कर सकता मैं कुंजीस्टोर से कुंजी प्राप्त करने का प्रयास करता हूं।KeyStore

Keytool -genkeypair -dname "cn = मार्क जोन्स, कहां = JavaSoft, o = सूर्य, ग = अमेरिका" -alias business2 -keypass abcdtest -keystore C: \ कार्यक्षेत्र \ XMLSample \ मैं Keytool द्वारा एक कीस्ट्रोक बनाया कुंजीस्टोर \ mykeystore.jks -storepass 123456

और निम्नलिखित GenerateXML.java

import java.io.FileInputStream; 
import java.security.KeyStore; 
import java.security.cert.X509Certificate; 
import javax.xml.crypto.dsig.XMLSignContext; 
import javax.xml.crypto.dsig.XMLSignatureFactory; 
import javax.xml.crypto.dsig.dom.DOMSignContext; 
import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.Document; 

public class GenerateXML { 

    public static void main(String[] args) throws Exception { 

     try { 
      char[] passwd = "123456".toCharArray(); 

      //Load the KeyStore and get the signing key and certificate 
      KeyStore ks = KeyStore.getInstance("JKS"); 
      ks.load(new FileInputStream("C:\\workspace\\XMLSample\\keystore\\mykeystore.jks"), passwd); 
      KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry)ks.getEntry("business2", new KeyStore.PasswordProtection(passwd)); // -> ERROR IN THIS ROW 

      X509Certificate cert = (X509Certificate)keyEnt.getCertificate(); 

      //Create a DOMSignContext 
      XMLSignContext context = new DOMSignContext(keyEnt.getPrivateKey(), doc.getDocumentElement()) ; 

      //Create a DOM XMLSignatureFactory 
      XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM"); 

     } catch(Exception e) { 
      e.printStackTrace(); 
      throw new Exception(e.toString()); 
     } 
    } 
} 

है मैं जावा 1,6

पर चलने लेकिन है त्रुटि:

java.security.UnrecoverableKeyException: Cannot recover key 
at sun.security.provider.KeyProtector.recover(KeyProtector.java:311) 
at sun.security.provider.JavaKeyStore.engineGetKey(JavaKeyStore.java:121) 
at sun.security.provider.JavaKeyStore$JKS.engineGetKey(JavaKeyStore.java:38) 
at java.security.KeyStoreSpi.engineGetEntry(KeyStoreSpi.java:456) 
at java.security.KeyStore.getEntry(KeyStore.java:1261) 
at xml.generate.GenerateXML.main(GenerateXML.java:31) 

उत्तर

18

यह मूलतः

  1. आप एक बुरा पासवर्ड था 2 बातें, का मतलब है।
  2. आपकी कीस्टोर किसी भी तरह दूषित है।

मुझे संदेह है कि यह # 1 है। अपना पासवर्ड दो बार जांचें। कोशिश करें कि क्या आप उसी पासवर्ड के साथ कीटोल में कुंजी सूचीबद्ध कर सकते हैं।

+0

मुझे एक ही समस्या है। मैं कीस्टोर पासवर्ड दे रहा हूं लेकिन यह कहता है: "विश्वसनीय प्रमाणपत्र प्रविष्टियां पासवर्ड-सुरक्षित नहीं हैं"। अगर मैंने पासवर्ड नहीं दिया तो यह कहता है: "java.security.KeyStore $ TrustedCertificateEntry java.security.KeyStore $ PrivateKeyEntry के साथ असंगत है। –

+0

हाय कोडर, मुझे नीचे दिए गए लिंक में उल्लिखित एक समस्या है। कृपया मुझे एक समाधान प्रदान करें। http://stackoverflow.com/questions/33369965/trusted-certificate-entries-are-not-password-protected-java – praneeth

9

ks.getEntry लाइन में, आप इसे स्टोर पासवर्ड दे रहे हैं। इसके बजाय कुंजी पासवर्ड होना चाहिए। इसके साथ लाइन को बदलें और यह काम करेगा:

char[] keypwd = "abcdtest".toCharArray(); 
KeyStore.PrivateKeyEntry keyEnt = (KeyStore.PrivateKeyEntry) ks.getEntry("business2", new KeyStore.PasswordProtection(keypwd)); 
+0

मुझे एक ही समस्या है। मैं कीस्टोर पासवर्ड दे रहा हूं लेकिन यह कहता है: "विश्वसनीय प्रमाणपत्र प्रविष्टियां पासवर्ड-सुरक्षित नहीं हैं"। अगर मैंने पासवर्ड नहीं दिया तो यह कहता है: "java.security.KeyStore $ TrustedCertificateEntry java.security.KeyStore $ PrivateKeyEntry के साथ असंगत है। –

22

मैं इसी तरह के मुद्दे पर चला गया हूं। समस्या की जड़ यह थी कि मैंने पूरे कीस्टोर की तुलना में कुंजी के लिए एक अलग पासवर्ड इस्तेमाल किया था। कोड जेएसएसई आलेख में से एक जैसा है। ऐसा लगता है:

serverKeyStore.load(new FileInputStream("resource/server.jks"), passphrase.toCharArray()); 
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509"); 
tmf.init(serverKeyStore); 
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); 
kmf.init(serverKeyStore, keyphrase.toCharArray()); 

मैं पहली पंक्ति में कीस्टोर पास का उपयोग करता हूं और अंतिम में कुंजी पास का उपयोग करता हूं।

+0

आप कुंजी के लिए पासवर्ड भी बदल सकते हैं http://stackoverflow.com/a/2889605/ 2685402 – Wojtek

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