現在、デーモンを通常の暗号化されていないものから 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 に署名してもらい、このキーストアにインポートしました。私が理解している限り、公開鍵と秘密鍵のペアが1つしかない場合、それが選択されますね。また、公開鍵を再度エクスポートして確認しました。CA によって正しく署名されています。
しかし、デーモンに接続しようとすると (ウェブブラウザ経由で接続しようとしてこれをテストしました)、自己署名証明書が表示され続けます。
なぜそれが起こるのか誰にも分かりますか?
ところで: System.setProperty の行を一番上に置いて少し遊んでみました。間違ったファイル名またはパスワードを入力すると起動しないため、実際には正しいファイルがロードされているように見えます。