我试图发送一个客户端证书到服务器。我正在HttpURLConnection上构造一个SSLSocketFactory。java HttpsURLConnection和发送客户端证书
我想我需要通过KeyManager提供SSLSocketFactory知道的密钥。我遇到的麻烦是将Key输入到KeyManager中。
私钥和证书位于PEM文件中(并且它们不能位于密钥库文件中)。我知道如何读取/解码文件,并且我已经成功验证了客户端证书。但是,当我试图把重点(以字节[])进入的KeyManager,它抱怨:java.security.KeyStoreException: key is not encoded as EncryptedPrivateKeyInfo
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(null); // init the keystore
// This Fails: it wants it encoded as EncryptedPrivateKeyInfo
ks.setKeyEntry("MyAlias", clientKeyAsBytes, new Certificate[]{clientCert});
什么是做到这一点的正确方法?
只是让我更好地理解根你的问题,你在做什么背景?有许多库和框架可以自动处理这类事情。一个这样的库是JSch(J Secure Channel)库。 – 2010-11-12 00:11:58
这是客户不想使用任何额外的库(这将不得不审查)的代码。客户正在调用一个需要授权客户端证书的Web服务。部署使用.PEM文件。 – 2010-11-12 03:01:05