Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- G1diamond
- oracle db
- ORA-65096
- 포맷
- DATABASE
- SpringMVC
- G1다이아몬드
- naver cloud platform
- java
- PKIX
- 종로다이아반지
- NAVER SMS
- ServerTimeZone
- 윈도우10
- 허먼밀러
- SENS API
- Windows 10
- 웨딩링
- ora-00984
- cloud outbound mailer
- 지원다이아몬드
- WINDOWS10
- NAVER API
- Spring
- Oracle
- 웨딩밴드
- 당근마켓
- pom.xml
- 종로예물
- 스프링 프레임 워크
Archives
- Today
- Total
더 나은 개발자가 되고싶다..
PKIX path building failed 무시하기 본문
프로젝트 개발 중 api 테스트를 해야하는데
내부망에서 개발을 하면 restfulAPI 호출시
PKIX path building failed 블라블라
이런식의 에러를 볼 수 있다..
원인은 SSL 인증서 정보가 현재 JVM 의 신뢰하는 인증기관 인증서 목록에 등록되어 있지 않기때문이라고 하는데
구글링을 해보면 해결 방법이 많이 나온다.
나는 그 중에 SSL 무시하여 호출하는 방법으로 테스트를 진행했다.
먼저 해방 방법은 보안 이슈가 생길 수 있으며, 앱의 경우 배포 리젝당할 수 있다..단순 테스트 용도로만 사용하길 권장한다..
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class aipCall {
public static void main(String[] args) throws Exception{
String url = "api URL 입력";
String resultData = "";
try {
URL aURL = new URL(url);
if (aURL.getProtocol().equals("https")) {
resultData = httpsGet(url);
System.out.println("https resultData: "+ resultData);
}
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
public static String httpsGet(String strURL)throws Exception{
URL url = null;;
HttpsURLConnection conn = null;
String ret = new String();
try {
url = new URL(strURL);
ignoreSSL();
conn = (HttpsURLConnection) url.openConnection();
BufferedReader br = null;
br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String input = null;
while((input = br.readLine())!=null){
ret += input;
}
br.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return ret;
}
public static void ignoreSSL()throws Exception{
HostnameVerifier hv = new HostnameVerifier(){
public boolean verify(String urlHostName, SSLSession session){
return true;
}
};
trustAllHttpsCertificates();
HttpsURLConnection.setDefaultHostnameVerifier(hv);
}
private static void trustAllHttpsCertificates() throws Exception{
TrustManager[] trustAllCerts = new TrustManager[1];
TrustManager tm = new miTM();
trustAllCerts[0] = tm;
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, null);
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
static class miTM implements TrustManager,X509TrustManager{
public X509Certificate[] getAcceptedIssuers(){
return null;
}
public boolean isServerTrusted(X509Certificate[] certs){
return true;
}
public boolean isClientTrusted(X509Certificate[] certs){
return true;
}
public void checkServerTrusted(X509Certificate[] certs, String authType)throws CertificateException{
return;
}
public void checkClientTrusted(X509Certificate[] certs, String authType)throws CertificateException{
return;
}
}
}
단순하게 콘솔에서 응답을 보고싶었기 때문에 main에서 실행했다.
참조 블로그
https://ram2ram2.tistory.com/16
https://goddaehee.tistory.com/268
'코딩 > Web' 카테고리의 다른 글
ckeditor5 사이즈 조절 (0) | 2019.02.12 |
---|