2つのキーをKeyStoreに保存する必要があります。関連するコードは次のとおりです。
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();
「秘密鍵は証明書チェーンを伴う必要がある」という例外はありますが
正確には何ですか?そしてそれをどのように生成しますか?
また、秘密鍵エントリの証明書(公開鍵)を提供する必要があります。 CAによって署名された証明書の場合、チェーンはCAの証明書と最終証明書です。自己署名証明書の場合、自己署名証明書しかありません
例:
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");
}