HTTPSホスト名が間違っています:< sub.domain.com>である必要があります。これは何が原因ですか?

StackOverflow https://stackoverflow.com/questions/1802051

  •  05-07-2019
  •  | 
  •  

質問

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証明書のようにホスト名になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top