안녕하세요.
카카오 로그인과 로컬 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 응답 확인하였습니다.
여러가지 방법을 통해 진행했으나 해결되지 않아 다른 방법은 없는지 문의드립니다.
tim.l
2
안녕하세요.
curl 이 아니라 API호출하는 방식과 동일하게 프로그램으로 호출 테스트 한번 해보시겠어요?
만약, 정상 호출이 안되고 SSL 오류가 발생한다면. 루트 인증서 설치가 정상 처리안된 상황같아요.
루트 인증서가 정상 설치되었는지 검증하는 방법을 좀 찾아보겠습니다.
요청하신대로 https://test-kapi.kakao.com/test-ca-certificates 으로 api호출 하였는데 정상 호출이 안됩니다.
OS버전과 연관성은 없는지요?
다른 문의 목록 중에 저희와 동일한 증상 같은데 JAVA 1.7와 OS가 CentOS 6.x 의 비슷한 환경이 있어서 문의드립니다.
tim.l
4
안녕하세요.
keytool -keystore "$JAVA_HOME/jre/lib/security/cacerts" -storepass changeit -list | grep 등록하신별칭
위 명령어로 아래와 같이 정상 설치 메시지 나오는지 확인해주세요.
등록하신별칭, Nov 2, 2021, trustedCertEntry,
tim.l
6
여전히 테스트API호출이 안되시나요?
그렇다면, 다른 jre폴더가 있는지 확인 부탁드립니다.
WAS인 JBoss와 OS에 2군데 있습니다.


OS용 JDK는 해당 경로로 이동해서 확인했으며, 정상 호출이 안되어 2군데 다 인증서 반영한 상태입니다.
tim.l
8
아래 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;
}
}
tim.l
10
그렇다면 jvm에 루트 인증서 설치는 정상처리 된 것입니다.
api호출 구현하신 프로그램이 바라보는 jvm폴더가 다를것으로 예상됩니다.
동일 소스를 사용하시는 프로젝트에 추가해서 여전히 정상 호출되는지 테스트 부탁드려요.