我有一台服务器和一台客户端,它们都使用 SSL 相互通信。服务器上以前的自签名 SSL 密钥库已过期,因此我使用相同的详细信息生成了一个新的 SSL 密钥库
我有一个服务器和客户端,它们都使用 SSL 相互通信。 以前的自签名 sslkeystore 在服务器上已过期,因此我生成了一个具有相同详细信息且有效期延长的新密钥库。 但是现在,当我尝试从客户端与服务器通信时,出现以下异常。
javax.net.ssl.SSLHandshakeException: Received fatal alert: certificate_unknown
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154)
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1991)
在我更新密钥库之前它一直正常工作。
它从以下代码块中创建异常。当我尝试从 BufferedInputStream bis
.
private byte[] readBytesFromStream(BufferedInputStream bis) throws IOException {
byte[] lengthBytes = new byte[4];
bis.read(lengthBytes);
int length = ByteBuffer.wrap(lengthBytes).getInt();
System.out.print("length : " + length);
byte[] data = new byte[length];
bis.read(data);
return data;
}
我应该做其他事情来反映更新的密钥库吗?
我必须让客户端的密钥库信任服务器的公钥。然后它就开始工作了。我还在网上找到了一个很棒的工具,它可以帮助处理密钥库和证书的这类问题,它叫做 portecle ( https://sourceforge.net/projects/portecle/ )