[HTTPS] Hostname in cerificate didn't match?

특정 업체의 API를 호출하던 중 아래와 같은 에러가 발생
Hostname in certificate didn't match?
SSLPeerUnverifiedException

  위의 에러발생 이유는 해당 업체의 인증서가 나에게 등록 되어있지 않기 때문이다. 해당 업체의 인증서를 등록하여 해결하는 방법도 있지만, 나는 데이터가 원하는데로 전달되는지만 확인하면 되었기에 인증서를 무시하고 요청하는 방식을 사용하였다.

pom.xml 에 httpclient 추가

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>


인증서 무시를 위해 사용한 코드

@Test
public void shouldAcceptUnsafeCerts() throws Exception{
 HttpClient httpclient = httpClientTrustingAllSSLCerts();
 final String uri = "YOUR URI";
 HttpGet httpGet = new HttpGet(uri);
 HttpResponse response = httpclient.execute(httpGet);
 System.out.println(EntityUtils.toString(response.getEntity()));
}

private HttpClient httpClientTrustingAllSSLCerts() throws                    HttpClientBuilder builder = HttpClientBuilder.create();
 SSLContext sc = SSLContext.getInstance("TLS");
 sc.init(null, getTrustingManager(), new java.security.SecureRandom());

 SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sc, new  NoopHostnameVerifier());
 Registry registry = RegistryBuilder.   create().register("https", socketFactory).build();

 HttpClientConnectionManager ccm = new BasicHttpClientConnectionManager(registry);
 builder.setConnectionManager(ccm);
 return builder.build();
}

private TrustManager[] getTrustingManager(){
 TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {

  @Override
  public java.security.cert.X509Certificate[] getAcceptedIssuers(){
   return null;
  }

  @Override
  public void checkClientTrusted( X509Certificate[] certs, String authType ){
   // Do nothing
  }

  @Override
  public void checkServerTrusted( X509Certificate[] certs, String authType ){
   // Do nothing
  }

 } };
 return trustAllCerts;
}

refs :
사용한 코드 참고 사이트
Hostname in cerificate didn't match?


댓글

이 블로그의 인기 게시물

[JDBC] 쿼리 후에 ResultSet 에 데이터가 있는지 확인하는 방법

[Android] Android 로깅 시 isLoggable() 메서드 사용

[Spring] @PropertySource and Environment 사용시 Property 값이 null 로 들어오는 경우