[解決済み] Webソケットサーバーに接続しようとすると、No X509TrustManager implementation availableエラーが発生し続ける
2022-02-17 01:06:58
質問内容
私のJavaアプリケーションで、セキュアなウェブソケットを使用してウェブソケットサーバーに接続するための次のコードがあります。
private boolean openConnection(boolean tried) {
String sslFile =
ConfigMgr.getValue(Constants.SSL_CFG_NAME, "sslfile");
String sslPassword =
ConfigMgr.getValue(Constants.SSL_CFG_NAME, "sslpassword");
try {
System.setProperty("javax.net.ssl.trustStore",
//sslFile);
System.setProperty("javax.net.ssl.trustStorePassword", sslPassword);
System.out.println(System.getProperty("javax.net.ssl.trustStore"));
System.out.println(System.getProperty("javax.net.ssl.trustStorePassword"));
} catch (Exception e) {
if (!tried) {
logger.error("unable to get certificates", e);
}
return false;
}
try {
WebSocketContainer container = ContainerProvider
.getWebSocketContainer();
container.connectToServer(this, new URI(websocketServer));
} catch (Exception e) {
// only log error trying to connection to web application first
// time
if (!tried) {
logger.error("error while trying to connect daemon to websocket"
+ " server", e);
}
return false;
}
return true;
}
printステートメントからわかること
System.setProperty("javax.net.ssl.trustStorePassword", sslPassword);
そして
System.out.println(System.getProperty("javax.net.ssl.trustStore"));
正しいパスワードと証明書があること(
.cer
という内容で
-----BEGIN CERTIFICATE-----
MIIDmTCCAoGgAwIBAgIEB/pKmDANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJV
UzELMAkGA1UECBMCUEExGDAWBgNVBAcTD0ZvcnQgV2FzaGluZ3RvbjEXMBUGA1UE
ChMOTWlrcm9zIFN5c3RlbXMxFzAVBgNVBAsTDk1pa3JvcyBTeXN0ZW1zMRUwEwYD
VQQDEwxKYXNvbiBSaWNsZXMwHhcNMTYwNjIyMTcwOTQ0WhcNMTYwOTIwMTcwOTQ0
WjB9MQswCQYDVQQGEwJVUzELMAkGA1UECBMCUEExGDAWBgNVBAcTD0ZvcnQgV2Fz
aGluZ3RvbjEXMBUGA1UEChMOTWlrcm9zIFN5c3RlbXMxFzAVBgNVBAsTDk1pa3Jv
cyBTeXN0ZW1zMRUwEwYDVQQDEwxKYXNvbiBSaWNsZXMwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQCsha/dfnWIibmtySZuE8H+3AOa8/QuARKsFgmZJmWZ
ZErjlzN6liUO1Q9pzYXoka69tiIOw0KDWwGAHCAK8mjNpdcs9XiYq3QMZjNAUhqP
rRU5oDn9jwCwQnpepBhH6uiMaBcvrMsvLTaD4HvwoVyMROEhIWywBYMdHk86gcGr
ALz+iMhE8017CAA2n/35fqwDjxeGxDgY3Ove/fTKoeA+ItKOwsYeFZUeej9omTz+
UcdXJ6fu312At/Sh7YZpgP3LsX+rMfdD9sHn80UTy46UoT5UNW0Me40+S47/oh4H
VeOeR5XpcBPHnqbAJAvPAqD/sF9xbvhESwfoSkMB26drAgMBAAGjITAfMB0GA1Ud
DgQWBBQ7YV0yIawkjCCp0crz52BGwMPHnzANBgkqhkiG9w0BAQsFAAOCAQEAdmwo
8ZXZMxKzyfolVKj2UQBzkeSies133nRns0jFbkzm8N4lNtcWiShfLtlTQAuUZNMl
JK7Eax+weLq7tNMZyBdLWse8E4oe8m3XY/Xe7oQGs2EzdlHVZk7JuDHU63mC33cz
xvoNutE+y1Zonce9WaxACuNNMuxyYTVg6yqz/psjYE2YOajc1MmXjI38FkfmQ1bL
ByeNEvnLT1IcQ0OmaSuk2ESj144y/EtkN9/GKFOTPjSRL3zIStNBytn7WNlFV/ch
qaF/eOJRQMlHDosX40IrkHHIoc/pbTKYmjoreC/+biMKc0gUk+EN/uBrcJrVRFnl
dXTNJe6/sNzvkTc/IA==
-----END CERTIFICATE-----
が正しく設定されています。
しかし、私のコードを実行すると、次のようなエラーが表示されます。
container.connectToServer(this, new URI(websocketServer));
が実行されます。
javax.websocket.DeploymentException: The HTTP request to initiate the WebSocket connection failed
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:434) ~[tomcat7-websocket.jar:7.0.68]
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:184) ~[tomcat7-websocket.jar:7.0.68]
at
cored.web.CoreWebSocket.openConnection(CoreWebSocket.java:278) [cored.jar:3.0.10.160712122615]
at cored.web.CoreWebSocket.establishConnection(CoreWebSocket.java:1150) [cored.jar:3.0.10.160712122615]
at
cored.web.CoreWebSocket.access$100(CoreWebSocket.java:85) [cored.jar:3.0.10.160712122615]
at
cored.web.CoreWebSocket$2.execute(CoreWebSocket.java:138) [cored.jar:3.0.10.160712122615]
at utils.AThread.run(AThread.java:51)
[utils.jar:3.0.10.160712122615]
Caused by: java.util.concurrent.ExecutionException: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
at org.apache.tomcat.websocket.AsyncChannelWrapperSecure$WrapperFuture.get(AsyncChannelWrapperSecure.java:511) ~[tomcat7-websocket.jar:7.0.68]
at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:379) ~[tomcat7-websocket.jar:7.0.68]
... 6 more
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
at sun.security.ssl.Handshaker.checkThrown(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.SSLEngineImpl.checkTaskThrown(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.SSLEngineImpl.writeAppRecord(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.SSLEngineImpl.wrap(Unknown Source) ~[?:1.8.0_92]
at javax.net.ssl.SSLEngine.wrap(Unknown Source) ~[?:1.8.0_92]
at org.apache.tomcat.websocket.AsyncChannelWrapperSecure$WebSocketSslHandshakeThread.run(AsyncChannelWrapperSecure.java:371) ~[tomcat7-websocket.jar:7.0.68]
Caused by: javax.net.ssl.SSLHandshakeException: General SSLEngine problem
at sun.security.ssl.Alerts.getSSLException(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.SSLEngineImpl.fatal(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker.fatalSE(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker.fatalSE(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker.processLoop(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker$1.run(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker$1.run(Unknown Source) ~[?:1.8.0_92]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker$DelegatedTask.run(Unknown Source) ~[?:1.8.0_92]
at org.apache.tomcat.websocket.AsyncChannelWrapperSecure$WebSocketSslHandshakeThread.run(AsyncChannelWrapperSecure.java:397) ~[tomcat7-websocket.jar:7.0.68]
Caused by: java.security.cert.CertificateException: No X509TrustManager implementation available
at sun.security.ssl.DummyX509TrustManager.checkServerTrusted(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker.processLoop(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker$1.run(Unknown Source) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker$1.run(Unknown Source) ~[?:1.8.0_92]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_92]
at sun.security.ssl.Handshaker$DelegatedTask.run(Unknown Source) ~[?:1.8.0_92]
at org.apache.tomcat.websocket.AsyncChannelWrapperSecure$WebSocketSslHandshakeThread.run(AsyncChannelWrapperSecure.java:397) ~[tomcat7-websocket.jar:7.0.68]
は知っている。
.cer
ファイルは、tomcat ウェブサーバーでも使用されており、問題がないため、破損していません。
この原因と思われるもの
No X509TrustManager implementation available
のエラーが発生しました。
解決方法を教えてください。
.cer
ファイルはトラストストアの有効なタイプではありません。システム変数
javax.net.ssl.trustStoreType
を使用して型を設定します。デフォルトでは、以下のように設定されています。
JKS
PKCS12を使用することもできます。
JKS ファイルを作成し、.cer ファイルを含める必要があります。また、トラストストアのパスワードも設定します。
System.setProperty("javax.net.ssl.trustStore", "path/to/truststore");
System.setProperty("javax.net.ssl.trustStorePassword", truststorepassword);
.cerファイルをJKSにインポートするには
keytool -importcert -file certificate.cer -keystore keystore.jks -alias "Alias"
関連
-
[解決済み】Javaパッケージが存在しないエラー
-
[解決済み】エラー:'if'のない'else'エラー
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】宣言されたパッケージが期待されるパッケージと一致しない ""
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み】java.io.IOException: 壊れたパイプ
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】代入の左手は必ず変数 CharAt
-
[解決済み】Android java.lang.IllegalStateException: Android java.lang.IllegalStateException: Could not execute method of the activity
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み] 解決済み】Javaが「型をインスタンス化できない」というエラーを返す [重複] [重複]
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み] intellijが自動配線リポジトリにタイプのBeanが見つからないと不正確な発言をする件
-
[解決済み】Javaを使用するSelenium - ドライバの実行ファイルのパスは、webdriver.gecko.driverシステムプロパティで設定する必要があります。
-
[解決済み】Java LinkedListでNodesを使用する