[버그 리포트] 인증서(SSL) 오류
🚨 24.03.15 인증서(SSL) 오류
AWS free tier Lambda가 제공하는 request가 1,000,000개 임을 알게 되었다. 초반에 홍보를 크게 하지 않아 사용자가 12명 정도였다. 2월 한 달간 내역을 확인하니, 총 request가 100개도 되지 않았고 뭔가 아쉬운 마음에 다시 에타에 홍보를 결심했다.
그래서 총 63명으로 늘게 되었다! 늘어난 친구수에 기쁨도 잠시 에타 홍보글에 댓글이 달렸다.
밖에서 이 댓글을 확인하고 부랴부랴 카페로 들어가서 확인해 봤더니 실제로 작동이 되지 않았다. 아무리 불러도 호출이 안 됐다.
그래서 CloudWatch 로그를 통해 15일 오전 8시 33분까지만 해도 정상적으로 작동하던 것이 11시부터 에러가 났음을 확인할 수 있었다.
Lambda 테스트를 실행하면 '통과'는 하는데 위의 error 값이 불러와지는 것이다. 그래서 챗봇 관리자센터에서 알림이 안 왔고 오후 3시쯤에서야 확인할 수 있었다. 해당 에러에 대해 찾아보니 '인증서 에러'라고 했다. 일단 부랴부랴 채널 소개와 소식에 에러 확인 중이라는 글을 올렸다.
아래는 내가 에러에 접근했던 방식이다.
❓ 1. PKIX path building failed가 무슨 에러지?
Java 애플리케이션에서 종종 일어나는 문제로, JDK의 인증서에 해당 URL과 연관된 인증서가 없어서 나는 에러라고 한다.
(다들 Jsoup이 아니라 BeautifulSoup을 쓰는 이유는 비단 동적 사이트를 위한 것뿐만이 아니었다고 생각했다..😢)
근데 분명 지금까지는 문제없이 잘 됐었는데, 왜 갑자기 에러가 나지?
❓ 2. 학교 사이트에 변경이 있었나?
학교의 영업시간은 9시부터이다. 8시 즈음까지도 멀쩡했던 기능이 11시부터 에러가 났다는 것은 학교 사이트에서 변화가 있었기 때문 아닐까?라는 생각을 가장 먼저 했다. 도메인 확인, html 코드를 확인했고 변경된 것은 없었다.
❓ 3. 그렇다면 인증서를 넣자!
'인증서가 없어서 발생하는 문제라면 인증서를 넣어주자!'라고 생각했다. 이 3번에서 가장 많은 시간이 소요됐다.
일단 InstallCert.java를 다운로드하고, 구동해서 해당 URL의 인증서를 찾아 저장했다. 그리고 keytool을 통해 keystore에서 인증서를 추출하고 이를 JDK의 keystore에 import 했다. 아래 블로그 글을 통해 진행했다.
PKIX path building failed
URL 접근 시 javax.net.ssl.SSLHandshakeException: PKIX path building failed가 발생한 경우 JDK의 인증서에 해당 URL와 연관된 인증서가 없어서 발생한 오류 2022-07-12 09:07:28,988 WARN o.j.r.PluginManagerMenuItem: Failed to load p
futer.tistory.com
여전히 에러가 계속됐다. 이 부분에서 계속 헤매다가 아래 글을 보고 뭔가를 깨달았다.
Solve “unable to find valid certification path to requested target” | Packagecloud Blog
Read how to solve “unable to find valid certification path to requested target”. | Packagecloud blog
blog.packagecloud.io
❓ 4. 나는 Lambda를 사용하잖아?
난 Lambda에 jar 파일을 통해 코드를 업로드하잖아..?
그렇다.. 나는 그저 로컬에 인증서를 위치시켜놓고, '왜 로컬에서는 되는데 Lambda에 올리면 안 되지?' 하고 있던 것이다. 그래서 src/main/resources 밑에 우리 학교 사이트의 인증서를 위치시키고 해당 인증서를 불러오는 클래스를 하나 만들었다. 그리고 메인 로직이 시작되기 전 실행될 수 있도록 메인 메서드에 삽입했다. 결론은 성공!