Java SSLServerSocket提供错误的证书

时间:2013-12-27 10:03:32

标签: java ssl certificate self-signed ca

我正在尝试使用SSL将我的守护程序从常规未加密的守护程序更改为一个。

我这样做的方式如下:

System.setProperty("javax.net.ssl.keyStore", "keyfile.jks");
System.setProperty("javax.net.ssl.trustStore", "keyfile.jks");
System.setProperty("javax.net.ssl.keyStorePassword", "testtest");

System.out.println("Starting ssl socket for encrypted communication...");
SSLServerSocketFactory sslServerSocketFactory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
SSLServerSocket sslServerSocket = (SSLServerSocket) sslServerSocketFactory.createServerSocket(Settings.listenPortSsl);
SSLServerSocket sslServerSocket = (SSLServerSocket) ssf.createServerSocket(Settings.listenPortSsl);
System.out.println("SSL-Server started.");
while(!stopRequested)
{
    System.out.println("SSL-Server - Waiting for connection.");
    SSLSocket clientSideConnection = (SSLSocket) sslServerSocket.accept();
    // do stuff for the client
}

我的密钥库看起来如下:

C:\SW Setup>keytool -list -keystore keyfile.jks -storepass testtest

Keystore-Typ: JKS
Keystore-Provider: SUN

Ihr Keystore enthõlt 2 Eintrõge.

localserver, 27.12.2013, trustedCertEntry,
Zertifikatsfingerabdruck (MD5): D1:B1:8F:91:C2:1F:7F:85:70:AE:8B:F3:25:9D:9A:65
myname, 27.12.2013, PrivateKeyEntry,
Zertifikatsfingerabdruck (MD5): AF:DA:AD:F0:09:A5:9E:3C:D3:F0:6C:D9:FE:1F:DC:F0

我创建了一个签名请求,由我的(Windows)CA签名并将其导入此密钥库。据我所知,如果只有一对公钥/私钥,它会选择那一个,不是吗? 我还重新导出了公钥并查看了它 - 它已由我的CA正确签名。

但是当我尝试连接到我的守护进程时(我通过尝试通过webbrowser连接到它来测试它)它会不断呈现一些自签名证书。

有人知道为什么会这样吗?

BTW:我在顶部的System.setProperty行玩了一下。如果我输入错误的文件名或密码,它将无法启动,所以它似乎真的加载了正确的文件。

2 个答案:

答案 0 :(得分:0)

在浪费了更多时间进行代码检查后,我决定重新创建密钥库,即使它似乎没问题......事实并非如此。创建一个新的商店,私钥和csr后,它终于工作了,我得到了我正式签署的证书! : - )

答案 1 :(得分:0)

您需要导入已签名的CSR ,其具有与以前只有密钥对时相同的别名