외부에서 API호출 시 오류가 난다.
검색해 보니 SSL 인증서 문제인 거 같다.
환경이 복잡하다.
SSL nginx 세팅은 인프라팀, API 외주 개발, API 호출 타 팀에서 호출
다들 핑퐁...
인프라 팀은 SSL 인증서 및 설정에는 문제없다
외주 톰캣에 로그 들어오는 게 없다.
타 팀 호출이 안된다.
중간에 소통하는데 짜증이... ㅜ3ㅜ
그냥 내가 다하고 싶다. 원인은 SSL 인증서 문제인 거 같은데....
구글 검색해 보니
웹브라우저에서 SSL 인증서 적용된 https:// 웹사이트 호출(접근) 시, 웹서버에 SSL 인증서 설치 적용 시 '루트/체인(중개)'을 누락하고 '서버인증서'만 적용했기 때문입니다. (CSR 직접 생성 후, jks 파일을 직접 생성, 조합 과정에서 루트/체인 포함 누락) 나와서요
문제라고 한다... 우선 방법은 2가지가 있다.
1. SSL 인증서를 추출해서 Java VM 등록
2. JAVA에서 SSL 인증서 무시하고 호출
1번은 Java 설치 및 설정을 인프라팀에서 하고 있어서 2번으로 작업하기로하였다.
인프라에서 처리해주면 될 거 같은데..
1번은 https://ssow93.tistory.com/73
참조하면 될 거 같다.
2번은 JAVA로 작성해서 API호출하는 팀에 공유하였다.
@Test
public void getFranchiseSearch() throws Exception {
//SSL 무시하기 start
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {return null;}
public void checkClientTrusted(X509Certificate[] certs, String authType) {}
public void checkServerTrusted(X509Certificate[] certs, String authType) {}
} };
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection
.setDefaultSSLSocketFactory(sc.getSocketFactory());
// SSL 무시 end
URL url = new URL("{URL}");
HttpURLConnection con = (HttpURLConnection)url.openConnection();
// 서버에서 온 데이터를 출력할 수 있는 상태인지
con.setDoOutput(true);
// GET/POST
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json; utf-8");
con.setRequestProperty("Accept", "application/json");
String jsonInputString = "{\"searchTxt\":\"강남구\"}";
// 서버로 전송할 JSON 형식의 문자열을 정의
try(OutputStream os = con.getOutputStream()) {
byte[] input = jsonInputString.getBytes("utf-8"); // JSON 문자열을 바이트 배열로 변환
os.write(input, 0, input.length); // 변환된 바이트 배열을 출력 스트림을 통해 전송
}
int responseCode = con.getResponseCode(); // 서버로부터 받은 HTTP 응답 코드를 가져옴
System.out.println("Response Code : " + responseCode); // 응답 코드를 콘솔에 출력
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); // 서버로부터의 응답을 읽기 위한 BufferedReader를 생성
String inputLine;
StringBuffer response = new StringBuffer(); // 서버 응답을 저장할 StringBuffer 객체를 생성
while ((inputLine = in.readLine()) != null) { // 서버 응답의 끝까지 한 줄씩 읽어 들임
response.append(inputLine); // 읽은 데이터를 StringBuffer 객체에 추가
}
in.close(); // BufferedReader를 닫아 리소스를 해제
System.out.println(response.toString()); // 받은 JSON 응답을 콘솔에 출력
}
정상 호출 된다.
'공부 > 오류' 카테고리의 다른 글
java.io.FileNotFoundException : /work/Catalina/localhost/ (1) | 2024.09.13 |
---|---|
NGINX SSL 오류 PEM_def_callback:problems getting password error:0906A068:PE (0) | 2024.08.29 |
requestMappingHandlerMapping 오류 (0) | 2024.03.17 |
IOS 결제 영수증 확인 API 호출시 오류 EC KeyFactory not available (0) | 2024.02.26 |
intellij gradle 빌드 오류 (0) | 2024.02.22 |