문제

이 'https hostname 잘못을 잘못 받고 있습니다.'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 가능한 원인에 대해 옳습니다.

스푸핑 점검을 끄는 방법도 있습니다.

구현하는 객체를 만들 수 있습니다 HostNameverifier 그것은 '평소'보다 더 많은 상황에서 사실을 반환합니다.

호출하여 기본 hostnameverifier를 교체합니다 Sethostnameverifier 질문의 코드의 연결 객체에서.

이 답변은 '영감을 받았습니다': http://www.java-samples.com/showtutorial.php?tutorialid=211

이 쿼리와의 링크를 발견했습니다. http://www.google.com/search?q=https+hostname+wrong+ should+be

한 가지 더 참고 :이 작업을 수행하기 전에 두 번 생각하십시오. 클라이언트와 서버 구성 요소 간의 보안에 악용 가능한 약점을 만듭니다.

나는이 예외를 얻었다 - java.io.IOException: HTTPS hostname wrong: should be <localhost>.

내 해결책은 자체 서명 된 인증서를 변경하고 CN=localhost.

또는

인증서 도메인 이름을 추가하십시오 cn=<domain-name> 호스트 파일에있을 것입니다 C :/Windows/System32/드라이버/etc/...

다음 코드는 내 문제를 해결했습니다

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 name)을 별칭 이름으로 사용하십시오.

전:

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

Java 기본적으로 인증서 CN (공통 이름)이 URL의 호스트 이름과 동일하다는 것을 확인합니다. 만약 CN 인증서에서는 동일하지 않습니다 호스트 이름, 웹 서비스 클라이언트는 다음과 같이 예외로 실패합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top