Java SSL客户端无法建立握手

时间:2014-06-10 02:44:32

标签: java ssl x509certificate

我正在尝试实现可与我的C ++ SSL服务器一起使用的Java SSL客户端。我知道SSL服务器正常工作,因为我已经使用CURL SSL客户端对其进行了测试。

我尝试与Java客户端连接时遇到的问题是它似乎没有发送客户端证书,因此服务器抛出一个错误,说它没有收到客户证书。

我似乎正在加载客户端证书和密钥,所以我很困惑为什么服务器没有收到任何证书。

非常感谢有人查看我的Java客户端代码并查看是否有任何事情发生在您身上。

KeyStore keyStore = KeyStore.getInstance("JKS");
InputStream stream = null;
stream = new FileInputStream("C:\\certs\\client.keystore");
keyStore.load(stream, "changeit".toCharArray());                
System.out.println("loaded the keystore");

KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
PrivateKey key = (PrivateKey) keyStore.getKey("client-identity", "changeit".toCharArray());
System.out.println("private key:  " + key);
Certificate cert = (Certificate) keyStore.getCertificate("client-identity");
System.out.println("client cert:  " + cert);
kmf.init(keyStore, "changeit".toCharArray());

SSLContext sslCtx = SSLContext.getInstance("TLS");
sslCtx.init(kmf.getKeyManagers(), null, null);          

SSLSocketFactory sslSF = (SSLSocketFactory) sslCtx.getSocketFactory();
System.out.println(" Creating and opening new SSLSocket with SSLSocketFactory");

// using createSocket(String hostname, int port)
SSLSocket sslSock = (SSLSocket) sslSF.createSocket("localhost", 1111);
System.out.println(" SSLSocket created");
HandshakeCompletedListener mListener = null;
mListener = new MyListener();

sslSock.addHandshakeCompletedListener(new MyListener());

更新

这可能是个问题。

C:\movrm-contract\https-client>keytool -list -keystore client.keystore -v
keytool error: java.lang.Exception: Keystore file does not exist: client.keystore
java.lang.Exception: Keystore file does not exist: client.keystore
        at sun.security.tools.KeyTool.doCommands(KeyTool.java:565)
        at sun.security.tools.KeyTool.run(KeyTool.java:171)
        at sun.security.tools.KeyTool.main(KeyTool.java:165)

但我不确定如何解决这个问题。我从client.pem和privkey.pem文件创建了JSK文件。将它们导入Java密钥库的正确方法是什么?并且,签名CA证书是否需要位于同一个密钥库中?

0 个答案:

没有答案