티스토리 뷰
Java
[Java] javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative DNS name matching IP Address found. 에러 해결
Jane Kwon 2021. 12. 1. 22:31반응형
로컬 서버에서도 잘되고, 스테이징 서버, 운영 서버에서도 잘되는데
개발 서버에서만 외부 통신에서 아래와 같은 에러가 발생하는 경우가 발생했다.
Caused by: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative DNS name matching IP Address found.
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1959)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:328)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:322)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1614)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1052)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:987)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:162)
at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpRequest.java:73)
at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHttpRequest.java:48)
at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:50)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:519)
... 75 more
HTTPS 사용에 따른 SSL 인증 오류라고 한다.
구글링 해보니 여러 해결 방법이 있지만,
대부분 HttpURLConnection을 이용해서 Connect 시에 SSL 인증을 무시하는 방법을 사용하는 듯 했다.
(또한 개발 서버에서만 발생하는 상황이라 개발 서버에서만 이 방법을 사용해 문제를 해결해도 되지 않을까?ㅎ)
아래처럼 disableSslVerification 메소드를 만들어서
커넥션 전에 호출해주면 더이상 이 같은 문제가 발생하지 않는다.
private void disableSslVerification() {
// TODO Auto-generated method stub
try {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType){}
public void checkServerTrusted(X509Certificate[] certs, String authType){}
}
};
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Create all-trusting host name verifier
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session){
return true;
}
};
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
} catch (Exception e) {
e.printStackTrace();
}
}
(참고 : https://hunyongchoi.tistory.com/58)
반응형
'Java' 카테고리의 다른 글
[Java] nslookup (0) | 2021.12.24 |
---|---|
[Java] javax.net.ssl.SSLException: Certificate doesn't match any of the subject alternative names 에러 해결 (1) | 2021.12.03 |
[Java] 두 날짜 차이 구하기 (0) | 2021.11.24 |
[Java] SSL 인증서 PKIX path building failed 에러 해결 (0) | 2021.09.24 |
[Java] Spring RestTemplate timeout 설정 (0) | 2021.09.23 |