JDBC를 통한 SSL 연결 설정 - Amazon Relational Database Service

JDBC를 통한 SSL 연결 설정

JDBC를 통한 SSL 연결을 사용하려면 키 스토어를 만들고 Amazon RDS 루트 CA 인증서를 신뢰하고 아래에 지정된 코드 조각을 사용해야 합니다.

키 스토어를 JKS 형식으로 만들려면 다음 명령을 사용하면 됩니다. 키 스토어 만들기에 대한 자세한 내용은 Oracle 설명서의 키 스토어 생성을 참조하세요. 참조 정보는 Java 플랫폼, 표준 에디션 도구 참조의 keytool을 참조하세요.

keytool -genkey -alias client -validity 365 -keyalg RSA -keystore clientkeystore

다음 단계에 따라 Amazon RDS 루트 CA 인증서를 신뢰합니다.

Amazon RDS 루트 CA 인증서를 신뢰하려면
  1. 모든 AWS 리전에서 작동하는 인증서 번들 .pem 파일을 다운로드하고 파일을 ssl_wallet 디렉터리에 저장합니다.

    인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스 또는 클러스터에 대한 연결 암호화 단원을 참조하세요.

  2. OS 유틸리티를 사용하여 .pem 파일의 각 인증서를 별도의 파일로 추출합니다.

  3. 별도의 openssl 명령을 사용하여 각 인증서를 .der 형식으로 변환하고 certificate-pem-file을 인증서 .pem 파일 이름(.pem 확장자 제외)으로 대체합니다.

    openssl x509 -outform der -in certificate-pem-file.pem -out certificate-pem-file.der
  4. 다음 명령을 사용하여 각 인증서를 키 스토어로 가져옵니다.

    keytool -import -alias rds-root -keystore clientkeystore.jks -file certificate-pem-file.der

    자세한 내용은 SSL/TLS 인증서 교체 단원을 참조하십시오.

  5. 키 스토어가 성공적으로 만들어졌는지 확인하십시오.

    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 } }
참고

보안 모범 사례로 여기에 표시된 프롬프트 이외의 암호를 지정하는 것이 좋습니다.