我想生成密钥对并将公钥和私钥插入到不同的密钥库中,以便在SSL套接字连接中用作KeyStore和TrustStore。我使用KeyPairGenerator生成KeyPair,并且我已经使用java的keytool为链生成了签名证书。然后我可以将私钥插入KeyStore,如下所示:
PublicKey publicKey;
PrivateKey privateKey;
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null, "storepass".toCharArray());
keyStore.setKeyEntry("privatekey", privateKey, "keypass".toCharArray(), chain);
使用此密钥库,我可以为SSL连接创建KeyManager。但是要创建一个TrustManager,我需要将公钥存储到KeyStore中,所以我尝试将公钥存储在一个密钥库中:
PublicKey publicKey;
KeyStore trustStore = KeyStore.getInstance("JKS");
keyStore.load(null, "storepass".toCharArray());
trustStore.setKeyEntry("publickey", publicKey, "public".toCharArray(), chain);
这会返回错误:java.security.KeyStoreException: Cannot store non-PrivateKeys
所以我尝试使用setCertificateEntry()
,但这不起作用,因为它是PublicKey
对象,我需要Certificate
。所以我的问题是,如何以编程方式将PublicKey存储在KeyStore中?使用keytool不是一种选择。