HTTPSホスト名が間違っています:< sub.domain.com>である必要があります。これは何が原因ですか?
質問
httpsを使用してサーバーに接続しようとすると、この「HTTPSホスト名が間違っています:」エラーが表示されます。私のURLは次のようになります
https://sub.domain.com/tamnode/webapps/app/servlet.
次のコードを使用して接続します
// Create a URLConnection object for a URL
URL url = new URL(requestedURL);
HttpURLConnection.setFollowRedirects(false);
// connect
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$
OutputStreamWriter wr = new OutputStreamWriter(connection
.getOutputStream());
ただしエラーが発生する
IOException: HTTPS hostname wrong: should be <sub.domain.com>.
at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing
....
これは過去に機能していたが、現在は機能していないコードです。システムアーキテクチャにいくつかの変更がありましたが、責任者にアプローチする前に、より多くのデータを取得する必要があります。
このエラーの原因は何ですか? URLSpoofingチェックをオフにできますか?
解決
domain.comのSSL証明書がsub.domain.comに与えられているようです。または、おそらく、domain.comであったものは、SSL証明書を更新せずにsub.domain.comに名前が変更されました。
他のヒント
cletus は考えられる原因について正しいです。
スプーフィングチェックをオフにする方法もあります。
「通常」よりも多くの状況でtrueを返すHostnameVerifier 。
問題のコード内の接続オブジェクトのsetHostnameVerifier 。
この回答は「触発された」: http://www.java -samples.com/showtutorial.php?tutorialid=211
このクエリとのリンクが見つかりました: http:/ /www.google.com/search?q=https+hostname+wrong+should+be
もう1つの注意:これを行う前によく考えてください。クライアントコンポーネントとサーバーコンポーネント間のセキュリティに悪用可能な脆弱性が生じます。
この例外が発生しました- java.io.IOException:HTTPS hostname wrong:should be&lt; localhost&gt;
。
私の解決策は、自己署名証明書を変更し、 CN = localhost
を作成することです。
または
証明書のドメイン名 cn =&lt; domain-name&gt;
を、おそらく c:/ windows / system32 / drivers / etc / ...にあるホストファイルに追加します。 strong>
次のコードで問題が解決しました
static {
//for localhost testing only
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new javax.net.ssl.HostnameVerifier() {
@Override
public boolean verify(String hostname,
javax.net.ssl.SSLSession sslSession) {
if (hostname.equals("your_domain")) {
return true;
}
return false;
}
});
}
ホスト名(dns名)をエイリアス名として使用します。
例:
keytool -import -alias <google.com> -file certificate_one.cer -keystore cacerts
Javaはデフォルトで、証明書CN(共通名)がURLのホスト名と同じであることを検証します。証明書の CN がホスト名と同じでない場合、Webサービスクライアントは次の例外で失敗します:java.io.IOException:HTTPS hostname wrong:should証明書のようにホスト名になります。