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 を呼び出して、デフォルトのHostnameVerifierを置き換えます。
この回答は「インスピレーション」でした: 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 <localhost>
。
私の解決策は、自己署名証明書を変更してCN=localhost
。
OR
証明書のドメイン名を追加しますcn=<domain-name>
は、おそらくc:/ windows/system32/drivers/etc /...にあるHostファイルに
次のコードは私の問題を解決しました
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;
}
});
}
static {
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("domain name"));
}
デフォルトでは、Javaは証明書のCN(共通名)がURLのホスト名と同じであることを確認します。証明書の[〜#〜] cn [〜#〜]がホスト名と同じでない場合、Webサービスクライアントは次の例外で失敗します:Java .io.IOException:HTTPSホスト名が間違っています:証明書のホスト名である必要があります。
エイリアス名としてホスト名(dns名)を使用します。
例:
keytool -import -alias <google.com> -file certificate_one.cer -keystore cacerts