https hostname 잘못 : 이어야합니다. 이것이 원인은 무엇입니까?
문제
이 '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 인증서에서는 동일하지 않습니다 호스트 이름, 웹 서비스 클라이언트는 다음과 같이 예외로 실패합니다.