SSL 인증서 변경 관련 문의

안녕하세요.

카카오 로그인과 로컬 API를 이용 중이며, 10월말 SSL 인증서 변경 시점 부터 인증서 문제로 접속이 되지 않고 있어 문의드립니다.

JDK가 1.7.80 , OS가 CentOS 6.4 이고, 서비스를 운영 중인 상태이기 때문에 JDK를 현재 상위 버전으로 변경할 수 없는 상황이어서 포럼에서 관련 글들의 답변 내용을 보고 작업을 진행하였으나 동일하게 접속이 실패하고 있습니다.

아래 경로를 참고하여 DigiCert Global Root G2를 받아 JVM에 설치하였습니다.
https://www.digicert.com/kb/digicert-root-certificates.htm
https://connect2id.com/blog/importing-ca-root-cert-into-jvm-trust-store

그리고, curl -v https://test-kapi.kakao.com/test-ca-certificates 을 통해 200 응답 확인하였습니다.

여러가지 방법을 통해 진행했으나 해결되지 않아 다른 방법은 없는지 문의드립니다.

안녕하세요.

curl 이 아니라 API호출하는 방식과 동일하게 프로그램으로 호출 테스트 한번 해보시겠어요?

만약, 정상 호출이 안되고 SSL 오류가 발생한다면. 루트 인증서 설치가 정상 처리안된 상황같아요.


루트 인증서가 정상 설치되었는지 검증하는 방법을 좀 찾아보겠습니다.

요청하신대로 https://test-kapi.kakao.com/test-ca-certificates 으로 api호출 하였는데 정상 호출이 안됩니다.
OS버전과 연관성은 없는지요?
다른 문의 목록 중에 저희와 동일한 증상 같은데 JAVA 1.7와 OS가 CentOS 6.x 의 비슷한 환경이 있어서 문의드립니다.

안녕하세요.

keytool -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit -list | grep 등록하신별칭

위 명령어로 아래와 같이 정상 설치 메시지 나오는지 확인해주세요.

등록하신별칭, Nov 2, 2021, trustedCertEntry,

명령어 실행 후 정상 메시지 확인하였습니다.
image

여전히 테스트API호출이 안되시나요?

그렇다면, 다른 jre폴더가 있는지 확인 부탁드립니다.

WAS인 JBoss와 OS에 2군데 있습니다.
image
image
OS용 JDK는 해당 경로로 이동해서 확인했으며, 정상 호출이 안되어 2군데 다 인증서 반영한 상태입니다.

아래 API호출 테스트 코드 HelloWorld.java로 만드시고

javac HelloWorld.java
java HelloWorld

호출 테스트 해보시겠어요?

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("start");
		Call("GET", "https://test-kapi.kakao.com/test-ca-certificates");
	}

	public static String Call(String method, String reqURL) {
		String result = "";
		try {
			String response = "";
			URL url = new URL(reqURL);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod(method);
            int responseCode = conn.getResponseCode();
            System.out.println("responseCode : " + responseCode);           
            System.out.println("reqURL : " + reqURL);
            System.out.println("method : " + method);
			InputStream stream = conn.getErrorStream();
		    if (stream != null) {
			    try (Scanner scanner = new Scanner(stream)) {
			        scanner.useDelimiter("\\Z");
			        response = scanner.next();
			    }
			    catch(Exception e) {}
			    System.out.println("error response : " + response);
		    }
			BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
			String line = "";
			while ((line = br.readLine()) != null) {
				result += line;
			}
			System.out.println("response body : " + result);
			
			br.close();
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
		return result;
	}		
}

호출 테스트는 정상입니다.
image

그렇다면 jvm에 루트 인증서 설치는 정상처리 된 것입니다.

api호출 구현하신 프로그램이 바라보는 jvm폴더가 다를것으로 예상됩니다.
동일 소스를 사용하시는 프로젝트에 추가해서 여전히 정상 호출되는지 테스트 부탁드려요.