2012-12-15 13 views
12

jakie trzeba przechowywać 2 klucze do kluczy Oto odpowiedni kod:Java - sposobu przechowywania klucza w magazynie kluczy

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(); 

Choć dostaję execption „Klucz prywatny musi towarzyszyć łańcuchu certyfikatów”

Co to dokładnie jest? i jak mógłbym to wygenerować?

Odpowiedz

15

Należy również podać certyfikat (klucz publiczny) do wpisania klucza prywatnego. W przypadku certyfikatu podpisanego przez urząd certyfikacji łańcuchem jest certyfikat urzędu certyfikacji i certyfikat końcowy. W przypadku certyfikatu z podpisem własnym masz tylko samodzielnie podpisanego certyfikatu
Przykład:

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); 

aby wygenerować certyfikat obserwować tą link:
Przykład:

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

klucz publiczny jest typu Key i żądają certyfikatu []. Jak mogę rzucić klucz publiczny do łańcucha certyfikatów – MichBoy

+0

Nie masz certyfikatu X509? Skąd masz klucz prywatny? – Cratylus

+0

Zainicjowałem KeyPairGenerator w celu wygenerowania pary kluczy – MichBoy

Powiązane problemy