有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java SSL客户端无法建立握手

<>我试图实现一个java SSL客户端,它将与C++ SSL服务器一起工作。我知道SSL服务器可以正常工作,因为我已经用一个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)

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


共 (0) 个答案