MySQL 에 JDBC + SSL 로 연결시 서버 SSL 인증서(server SSL certificate) 검증을 해제하는 방법을 설명합니다.


증상

Java 에서 MySQL 8 에 연결하면 다음과 같은 예외가 발생합니다.

WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
CODE


원인

MySQL 이 8 로 업그레이드되면서 여러 가지 보안이 강화되었고 연결시 기본적으로 SSL 통신을 사용하도록 변경되었습니다.

메시지중에 다음 항목을 보면 SSL 통신시 서버 인증서를 검증할 수 없다는 내용이 있으며 이는 서버의 SSL 인증서가 Java 의 신뢰하는 인증서 목록에 없기때문입니다.

For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
CODE

조치

2가지 방법이 있는데 첫 번째 방법을 권장합니다.

1.서버 인증서 검증 끄기

SSL 을 사용하도록 설정하고 서버 인증서를 검증하는 옵션인 verifyServerCertificate 를 false 로 주어서 인증서 검증을 해제하면 됩니다.

jdbc:mysql://localhost/mydb?autoReconnect=true&verifyServerCertificate=false&useSSL=true
CODE

2. SSL 사용해제

이 방식은 보안 감사등에서 지적받을 수 있으니 권장하지 않습니다.


JDBC 설정에 다음 내용을 넣으면 SSL 을 사용하지 않으므로 SSL 인증서로 인한 에러를 해결할 수 있습니다.

jdbc:mysql://localhost/mydb?autoReconnect=true&useSS=false
CODE


같이 보기

Ref