我有一个服务器和客户端,他们都使用ssl在彼此之间进行通信。之前自签名的sslkeystore在服务器上过期,因此我使用扩展的有效性生成了一个具有相同详细信息的新的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;
}
我应该做些什么来反映更新的密钥库。
答案 0 :(得分:0)
我必须使客户端中的密钥库信任服务器的公钥。然后它开始工作。此外,我在网上发现了一个很好的工具,它有助于用密钥库和证书来处理这种事情,它叫做portecle(https://sourceforge.net/projects/portecle/)