새 SSL/TLS 인증서를 사용해 Oracle DB에 연결할 애플리케이션을 업데이트 - Amazon Relational Database Service

새 SSL/TLS 인증서를 사용해 Oracle DB에 연결할 애플리케이션을 업데이트

2023년 1월 13일부터 Amazon RDS는 보안 소켓 계층(SSL) 또는 전송 계층 보안(TLS)을 사용해 RDS DB 인스턴스에 연결하기 위한 용도의 새 인증 기관(CA) 인증서를 게시하였습니다. 아래에서 새 인증서를 사용하기 위해 애플리케이션을 업데이트하는 방법에 관한 정보를 찾으실 수 있습니다.

이 주제는 클라이언트 애플리케이션에서 SSL/TLS를 사용해 DB 인스턴스에 연결하는지 여부를 판단하는 데 도움이 됩니다.

중요

Amazon RDS for Oracle DB 인스턴스에 대한 인증서를 변경하면 데이터베이스 리스너만 다시 시작됩니다. DB 인스턴스는 다시 시작되지 않았습니다. 기존 데이터베이스 연결은 영향을 받지 않지만, 리스너가 다시 시작되는 동안 잠시 새 접속에 오류가 발생합니다.

참고

SSL/TLS를 사용하여 DB 인스턴스에 연결하는 클라이언트 애플리케이션의 경우, 새 CA 인증서를 포함하도록 클라이언트 애플리케이션 트러스트 스토어를 업데이트해야 합니다.

클라이언트 애플리케이션 트러스트 스토어에서 CA 인증서를 업데이트한 후에는 DB 인스턴스에서 인증서를 교환할 수 있습니다. 이 절차를 프로덕션 환경에서 구현하기 전에 개발 또는 스테이징 환경에서 테스트해볼 것을 적극 권장합니다.

인증서 교환에 대한 자세한 내용은 SSL/TLS 인증서 교체 단원을 참조하십시오. 인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스에 대한 연결 암호화 단원을 참조하십시오. Oracle DB 인스턴스에서 SSL/TLS를 사용하는 방법에 관한 자세한 내용은 Oracle 보안 소켓 Layer 단원을 참조하십시오.

애플리케이션이 SSL을 사용하여 연결하는지 확인

Oracle DB 인스턴스가 SSL 옵션이 추가된 옵션 그룹을 사용하는 경우 SSL을 사용 중일 수 있습니다. 옵션 그룹의 옵션 및 옵션 설정 표시하기의 지침을 따라서 확인합니다. SSL 옵션에 대한 자세한 내용은 Oracle 보안 소켓 Layer 단원을 참조하십시오.

리스너 로그를 확인하여 SSL 연결이 있는지 확인하십시오. 다음은 리스너 로그의 출력 샘플입니다.

date time * (CONNECT_DATA=(CID=(PROGRAM=program) (HOST=host)(USER=user))(SID=sid)) * (ADDRESS=(PROTOCOL=tcps)(HOST=host)(PORT=port)) * establish * ORCL * 0

PROTOCOL의 한 항목 값이 tcps인 경우, SSL 연결이 표시됩니다. 그러나 HOST127.0.0.1인 경우 항목을 무시할 수 있습니다. 127.0.0.1로부터의 연결은 DB 인스턴스의 로컬 관리 에이전트입니다. 이 연결은 외부 SSL 연결이 아닙니다. 따라서 리스너 로그 항목에 PROTOCOLtcps로, HOST127.0.0.1아닌 것으로 표시되면 SSL을 사용하여 연결하는 애플리케이션이 있는 것입니다.

리스너 로그를 확인하려면 Amazon CloudWatch Logs에 로그를 게시하면 됩니다. 자세한 내용은 Amazon CloudWatch Logs에 Oracle 로그 게시 섹션을 참조하세요.

애플리케이션 트러스트 스토어 업데이트

SSL/TLS 연결을 위해 SQL*Plus 또는 JDBC를 사용하는 애플리케이션에 대해 트러스트 스토어를 업데이트할 수 있습니다.

SQL*Plus를 위한 애플리케이션 트러스트 스토어 업데이트

SSL/TLS 연결을 위해 SQL*Plus를 사용하는 애플리케이션에 대해 트러스트 스토어를 업데이트할 수 있습니다.

참고

트러스트 스토어를 업데이트할 때 새 인증서를 추가할 뿐 아니라 이전 인증서를 유지할 수도 있습니다.

SQL*Plus 애플리케이션에 대해 트러스트 스토어를 업데이트하려면
  1. 모든 AWS 리전에서 작동하는 새 루트 인증서를 다운로드하고 이 파일을 ssl_wallet 디렉터리에 저장하세요.

    루트 인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스에 대한 연결 암호화 단원을 참조하십시오.

  2. 다음 명령을 실행하여 Oracle wallet을 업데이트합니다.

    prompt>orapki wallet add -wallet $ORACLE_HOME/ssl_wallet -trusted_cert -cert $ORACLE_HOME/ssl_wallet/ssl-cert.pem -auto_login_only

    파일 이름을 다운로드한 파일 이름으로 바꿉니다.

  3. wallet이 성공적으로 업데이트되었는지 확인하려면 다음 명령을 실행하십시오.

    prompt>orapki wallet display -wallet $ORACLE_HOME/ssl_wallet

    출력에 다음 사항이 포함되어 있어야 합니다.

    Trusted Certificates: Subject: CN=Amazon RDS Root 2019 CA,OU=Amazon RDS,O=Amazon Web Services\, Inc.,L=Seattle,ST=Washington,C=US

JDBC를 위한 애플리케이션 트러스트 스토어 업데이트

SSL/TLS 연결을 위해 JDBC를 사용하는 애플리케이션에 대해 트러스트 스토어를 업데이트할 수 있습니다.

루트 인증서 다운로드에 대한 자세한 내용은 SSL/TLS를 사용하여 DB 인스턴스에 대한 연결 암호화 단원을 참조하십시오.

인증서를 가져오는 샘플 스크립트는 트러스트 스토어로 인증서를 가져오기 위한 샘플 스크립트 섹션을 참조하세요.

SSL 연결 설정을 위한 Java 코드 예시

다음은 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 } }
중요

데이터베이스 연결에서 SSL/TLS를 사용함을 확인하고 애플리케이션 트러스트 스토어를 업데이트한 후에는 데이터베이스에서 rds-ca-rsa2048-g1 인증서를 사용하도록 업데이트할 수 있습니다. 지침은 DB 인스턴스를 수정하여 CA 인증서 업데이트의 3단계를 참조하십시오.