4

まず第一に、すべての証明書を信頼することの潜在的なリスクを認識していますが、いくつかのテスト目的でこれを実装する必要があります。

クライアントにすべての証明書を信頼させるにはどうすればよいですか? で実装していますjavax.websocket

私がやったのは、次のように ws に接続するだけです

WebSocketContainer client = ContainerProvider.getWebSocketContainer();

try {
    session = client.connectToServer(ClientImpl.class, URI.create(uri));
} catch (DeploymentException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}
4

1 に答える 1

4

私も同じ問題を抱えていました。解決策は見つかりませんでしたが、自己署名証明書を使用できました。

すべての手順を説明します。

  1. 接続するサーバー証明書をダウンロードします。ブラウザから実行できます (Google Chrome では、ページの URL の近くにあるロックを右クリックします)。
  2. 次のコマンドでキーストアを作成します (入力したパスワードを記憶します)

keytool -import -alias localhost -file certificate_path -keystore your_new_keystore

WebSocketContainer の代わりに ClientManager を使用することをお勧めします。これにより、ホスト名の検証を上書きできます。

私のコード

System.getProperties().put("javax.net.debug", "all"); //usefull to understand problems

System.getProperties().put(SSLContextConfigurator.KEY_STORE_FILE, your_new_keystore_path);

System.getProperties().put(SSLContextConfigurator.TRUST_STORE_FILE, your_new_keystore_path);

System.getProperties().put(SSLContextConfigurator.KEY_STORE_PASSWORD, the_password_you_entered);

System.getProperties().put(SSLContextConfigurator.TRUST_STORE_PASSWORD, the_password_you_enterede);   

ClientManager client = ClientManager.createClient();

SslEngineConfigurator sslEngineConfigurator = new SslEngineConfigurator(new SslContextConfigurator());

sslEngineConfigurator.setHostVerificationEnabled(false); //skip host verification

client.getProperties().put(ClientProperties.SSL_ENGINE_CONFIGURATOR, sslEngineConfigurator);

client.connectToServer(you_class_with_ws_methods, your_ws_uri);

you_class_with_ws_methodsは、WebSocketContainer で使用するものと同じにすることができます 便利なリソース:

https://tyrus.java.net/documentation/1.10/user-guide.html#d0e1128 https://blogs.oracle.com/PavelBucek/entry/securing_websocket_applications_on_glassfish

于 2015-02-20T10:49:33.067 に答える