新しいライセンスのリクエストを送信し、そのサーバーで既存のライセンスを検証するクライアント アプリと共に、Java でライセンス サーブレットをセットアップしています。サーブレットは Tomcat で実行されます。https を介したサーブレットへの接続のみを許可するように Tomcat を構成しましたが、これは問題なく動作します。
'keytool -genkey -alias www.mysite.com -keyalg RSA -keystore license.store'
ファイルを作成する自己署名証明書を作成し、 license.store
Tomcat をこの keystoreFile にパスワードで指定しましたasdf1234
。
Java で https 経由でクライアントからサーブレットに接続しようとするとPKIX path building failed
、証明書がトラストストアにないため、おなじみのメッセージが表示されます。この提案を使用してこれを修正しようとした結果、以下のコードが得られました。
private SSLSocketFactory getSSLFactory() throws Exception {
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
InputStream is = this.getClass().getResourceAsStream("license.store");
if(is ==null) {
return null;
}
keyStore.load(is, "asdf1234".toCharArray());
is.close();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(keyStore);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(null, tmf.getTrustManagers(), null);
return ctx.getSocketFactory();
}
その後、私は電話します:
HttpsURLConnection con = (HttpsURLConnection)url.openConnection();
con.setSSLSocketFactory(getSSLFactory());
これにより、接続が成功します。
問題は、 をlicense.store
クライアントにコピーして にロードした場合にのみ機能することKeyStore.load()
です。サーバーが使用する秘密鍵とそのパスワードをクライアントにコピーすることは、あまり安全ではないと思います。license.store から公開鍵のみを抽出して使用する方法はありますか? 私はこのフォーラムや他のフォーラムを 1 日間検索してきましたが、見つけられないようです。