JDBC를 통한 SSL 연결 설정
JDBC를 통한 SSL 연결을 사용하려면 키 스토어를 만들고 Amazon RDS 루트 CA 인증서를 신뢰하고 아래에 지정된 코드 조각을 사용해야 합니다.
키 스토어를 JKS 형식으로 만들려면 다음 명령을 사용하면 됩니다. 키 스토어 만들기에 대한 자세한 내용은 Oracle 설명서의 키 스토어 생성
keytool -genkey -alias
client
-validity365
-keyalgRSA
-keystoreclientkeystore
다음 단계에 따라 Amazon RDS 루트 CA 인증서를 신뢰합니다.
Amazon RDS 루트 CA 인증서를 신뢰하려면
-
모든 AWS 리전에서 작동하는 인증서 번들 .pem 파일을 다운로드하고 파일을 ssl_wallet 디렉터리에 저장합니다.
인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화 단원을 참조하세요.
-
OS 유틸리티를 사용하여 .pem 파일의 각 인증서를 별도의 파일로 추출합니다.
-
별도의
openssl
명령을 사용하여 각 인증서를 .der 형식으로 변환하고certificate-pem-file
을 인증서 .pem 파일 이름(.pem 확장자 제외)으로 대체합니다.openssl x509 -outform der -in
certificate-pem-file
.pem -outcertificate-pem-file
.der -
다음 명령을 사용하여 각 인증서를 키 스토어로 가져옵니다.
keytool -import -alias rds-root -keystore
clientkeystore.jks
-filecertificate-pem-file
.der자세한 내용은 SSL/TLS 인증서 교체 단원을 참조하십시오.
-
키 스토어가 성공적으로 만들어졌는지 확인하십시오.
keytool -list -v -keystore
clientkeystore.jks
메시지가 표시되면 키 스토어 암호를 입력하십시오.
다음은 JDBC를 사용하여 SSL 연결을 설정하는 방법을 보여 주는 코드 예입니다.
import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties; public class OracleSslConnectionTest { private static final String DB_SERVER_NAME = "
dns-name-provided-by-amazon-rds
"; private static final Integer SSL_PORT = "ssl-option-port-configured-in-option-group
"; private static final String DB_SID = "oracle-sid
"; private static final String DB_USER = "user-name
"; private static final String DB_PASSWORD = "password
"; // This key store has only the prod root ca. private static final String KEY_STORE_FILE_PATH = "file-path-to-keystore
"; private static final String KEY_STORE_PASS = "keystore-password
"; public static void main(String[] args) throws SQLException { final Properties properties = new Properties(); final String connectionString = String.format( "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=%s)(PORT=%d))(CONNECT_DATA=(SID=%s)))", DB_SERVER_NAME, SSL_PORT, DB_SID); properties.put("user", DB_USER); properties.put("password", DB_PASSWORD); properties.put("oracle.jdbc.J2EE13Compliant", "true"); properties.put("javax.net.ssl.trustStore", KEY_STORE_FILE_PATH); properties.put("javax.net.ssl.trustStoreType", "JKS"); properties.put("javax.net.ssl.trustStorePassword", KEY_STORE_PASS); final Connection connection = DriverManager.getConnection(connectionString, properties); // If no exception, that means handshake has passed, and an SSL connection can be opened } }
참고
보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.