web-dev-qa-db-ja.com

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チェックをオフにできますか?

21
paul

Domain.comのSSL証明書がsub.domain.comに提供されているようです。または、より可能性が高いのは、domain.comであったものが、SSL証明書を更新せずにsub.domain.comに名前が変更されたことです。

19
cletus

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つ注意:これを行う前に、よく考えてください。クライアントとサーバーコンポーネント間のセキュリティに悪用可能な弱点を作成します。

13
vkraemer

この例外が発生しました-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;
        }
    });
}
5
Jure Males

これは「svarog」投稿の代わりです

static {

    HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("domain name"));
}
0
jegadeesh

デフォルトでは、Javaは証明書のCN(共通名)がURLのホスト名と同じであることを確認します。証明書の[〜#〜] cn [〜#〜]ホスト名と同じでない場合、Webサービスクライアントは次の例外で失敗します:Java .io.IOException:HTTPSホスト名が間違っています:証明書のホスト名である必要があります。

0
shanmugam

エイリアス名としてホスト名(dns名)を使用します。

例:

keytool -import -alias <google.com> -file certificate_one.cer -keystore cacerts
0
user11353764