RDS SSL 인증서 만료, Caused by: java.security.cert.CertificateExpiredException : NotAfter

rds certificate expired
김주혁's avatar
Aug 23, 2024
RDS SSL 인증서 만료, Caused by: java.security.cert.CertificateExpiredException : NotAfter
 
회사에서 사용하는 RDS 인증서가 만료되었다. 과거에 생성된 RDS 인스턴스들은 2019년 버전의 인증서를 사용하고 있었고, 현재는 2061년 버전으로 업데이트되어 있다. 인증서 만료로 인해 다음과 같은 에러가 발생했다:
 
Caused by: java.sql.SQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. ... Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. ... Caused by: javax.net.ssl.SSLHandshakeException: NotAfter: Fri Aug 23 02:08:50 KST 2024 ...
 
이 문제에 대한 자세한 내용은 에서 확인할 수 있다.
Amazon RDS 인증 기관 인증서 rds-ca-2019는 2024년 8월에 만료될 예정입니다. RDS DB 인스턴스 또는 다중 AZ DB 클러스터에 연결하기 위해 인증서 확인과 함께 보안 소켓 계층(SSL) 또는 전송 계층 보안(TLS)을 사용하거나 사용할 계획이라면 새 CA 인증서인 rds-ca-rsa2048-g1, rds-ca-rsa4096-g1 or rds-ca-ecc384-g1 중 하나를 사용하는 것을 고려하세요. 현재 인증서 확인과 함께 SSL/TLS를 사용하지 않는 경우에도 CA 인증서가 만료되었을 수 있으며, 인증서 확인과 함께 SSL/TLS를 사용하여 RDS 데이터베이스에 연결하려는 경우 새 CA 인증서로 업데이트해야 합니다.
 
잘못된 해결책 중 하나는 useSSL 옵션을 false로 설정하는 것이다:
 
jdbc-url: jdbc:mysql://${HOST}:${PORT}/${DB}?useSSL=false
또한, GUI 툴을 사용하는 경우에는 아래 이미지를 참고하여 useSSL 옵션을 false로 변경할 수 있습니다:
notion image
 
하지만 이 방법은 보안상 좋은 해결책이 아니다. 더 나은 해결 방법은 인증서를 최신 버전으로 교체하는 것이다.
인증서를 교체하는 방법에 대해서는 다음의 블로그 포스트에서 상세하게 설명하고 있다:
 
 
요약:
  1. 잘못된 방법: useSSL=false로 설정 (비추천)
  1. 올바른 방법: 최신 SSL 인증서로 교체 (추천)
AWS RDS 인스턴스를 안전하게 유지하기 위해 인증서를 최신 상태로 유지하는 것이 중요하다.

 
이렇게 수정하면, 문제의 근본적인 원인과 해결 방법을 명확하게 전달할 수 있다.
Share article

vlogue