將 SSL/TLS 與 Amazon RDS 用於 Db2 資料庫執行個體搭配使用 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 SSL/TLS 與 Amazon RDS 用於 Db2 資料庫執行個體搭配使用

SSL 是業界標準的通訊協定,用於保護用戶端與伺服器之間的網路連線。在 SSL 3.0 版之後,名稱已更改為 TLS,但我們仍然經常將該協議稱為 SSL。Amazon RDS 支援適用於 Db2 資料庫執行個體的 SSL 加密。您可以使用 SSL/TLS 來加密應用程式用戶端和 RDS for Db2 資料庫執行個體之間的連線。適用於 Db2 版 RDS AWS 區域 的所有支援均提供 SSL/TLS 支援。

若要啟用 RDS for Db2 資料庫執行個體的 SSL/TLS 加密,請將 Db2 SSL 選項新增至與資料庫執行個體相關聯的參數群組。Amazon RDS 會根據 Db2 的要求,使用第二個連接埠進行 SSL/TLS 連線。這樣做可讓資料庫執行個體和 Db2 用戶端之間同時進行純文字和 SSL 加密的通訊。例如,您可以使用連接埠搭配純文字通訊與 VPC 內的其他資源通訊,同時使用連接埠搭配 SSL 加密的通訊與 VPC 外部的資源通訊。

建立一個 SSL/TLS 連線

若要建立 SSL/TLS 連線,請選擇憑證授權單位 (CA),為所有人下載憑證服務包 AWS 區域,然後將參數新增至自訂參數群組。

步驟 1:選擇 CA 並下載憑證

選擇一個憑證授權單位 (CA),並為所有人下載憑證套裝軟體 AWS 區域。如需詳細資訊,請參閱

步驟 2:更新自訂參數群組中的參數

重要

如果您正在使用 RDS for Db2 的自帶授權 (BYOL) 模型,請修改為您和您IBM Customer ID的. IBM Site ID 如果您為 RDS for Db2 使用不同的授權模式,請依照程序將參數新增至自訂參數群組。如需詳細資訊,請參閱 Amazon 適用於 Db2 的授權選項

您無法修改 Db2 資料庫執行個體之 RDS 的預設參數群組。因此,您必須建立自訂參數群組、對其進行修改,然後將其附加到 RDS for Db2 資料庫執行個體。如需參數群組的詳細資訊,請參閱 在資料庫執行個體中使用資料庫參數群組

使用下表中的參數設定。

參數 Value
DB2COMM TCPIP,SSL
SSL_SVCENAME <any port number except the number used for the non-SSL port>
更新自訂參數群組中參數的步驟
  1. 透過執行create-db-parameter-group指令建立自訂參數群組。

    包含下列必要選項:

    • --db-parameter-group-name— 您要建立之參數群組的名稱。

    • --db-parameter-group-family— Db2 引擎版本和主要版本。有效值:db2-se-11-5db2-ae-11.5

    • --description— 此參數群組的描述。

    如需建立資料庫參數群組的詳細資訊,請參閱建立資料庫參數群組

  2. 修改透過執行modify-db-parameter-group指令建立的自訂參數群組中的參數。

    包含下列必要選項:

    • --db-parameter-group-name— 您建立的參數群組名稱。

    • --parameters— 參數名稱、值以及參數更新的應用程式方法陣列。

    如需修改參數群組的詳細資訊,請參閱修改資料庫參數群組中的參數

  3. 將參數群組與您的 RDS for Db2 資料庫執行個體建立關聯。如需詳細資訊,請參閱 將資料庫參數群組與資料庫執行個體建立關聯

Connect 至您的 Db2 資料庫伺服器

連接到 Db2 資料庫伺服器的指示是特定於語言的。

Java
若要使用連線至 Db2 資料庫伺服器 Java
  1. 下載 JDBC 驅動程式。如需詳細資訊,請參閱 Sup IBM port 文件中的 DB2 JDBC 驅動程式版本與下載

  2. 使用下列內容建立殼層指令碼檔案。此指令碼會將套裝軟體中的所有憑證新增至Java KeyStore.

    重要

    確認指令碼中的路徑上是否keytool存在,以便指令碼可以找到它。如果您使用 Db2 用戶端,您可以找到keytool~sqlib/java/jdk64/jre/bin的。

    #!/bin/bash PEM_FILE=$1 PASSWORD=$2 KEYSTORE=$3 # number of certs in the PEM file CERTS=$(grep 'END CERTIFICATE' $PEM_FILE| wc -l) for N in $(seq 0 $(($CERTS - 1))); do ALIAS="${PEM_FILE%.*}-$N" cat $PEM_FILE | awk "n==$N { print }; /END CERTIFICATE/ { n++ }" | keytool -noprompt -import -trustcacerts -alias $ALIAS -keystore $KEYSTORE -storepass $PASSWORD done
  3. 若要執行 shell 指令碼,並將具有憑證服務包的PEM檔案匯入到中Java KeyStore,請執行下列命令。將 shell_file_name.sh 取代為您的殼層指令碼檔案的名稱和密碼,並使用您的Java KeyStore.

    ./shell_file_name.sh global-bundle.pem password truststore.jks
  4. 若要連線至您的 Db2 伺服器,請執行下列命令。將範例中的下列預留位置取代為您的 RDS for Db2 資料庫執行個體資訊。

    • ip_address — 資料庫執行個體端點的 IP 位址。

    • 連接 — SSL 連線的連接埠號碼。這可以是除了用於非 SSL 連接埠的號碼以外的任何通訊埠號碼。

    • 資料庫名稱 — 資料庫執行個體中資料庫的名稱。

    • master 使用者名稱 — 資料庫執行個體的主使用者名稱。

    • 主密碼 — 資料庫執行個體的主要密碼。

    export trustStorePassword=MyPassword java -cp ~/dsdriver/jdbc_sqlj_driver/linuxamd64/db2jcc4.jar \ com.ibm.db2.jcc.DB2Jcc -url \ "jdbc:db2://ip_address:port/database_name:\ sslConnection=true;sslTrustStoreLocation=\ ~/truststore.jks;\ sslTrustStorePassword=${trustStorePassword};\ sslVersion=TLSv1.2;\ encryptionAlgorithm=2;\ securityMechanism=7;" \ -user master_username -password master_password
Node.js
若要使用連線至 Db2 資料庫伺服器 Node.js
  1. 安裝node-ibm_db驅動程式。如需詳細資訊,請參閱說明文件中的在Linux和UNIX系統上安裝 node-ibm_db 驅動程式。IBM Db2

  2. 根據下列內容建立JavaScript檔案。將範例中的下列預留位置取代為您的 RDS for Db2 資料庫執行個體資訊。

    • ip_address — 資料庫執行個體端點的 IP 位址。

    • master 使用者名稱 — 資料庫執行個體的主使用者名稱。

    • 主密碼 — 資料庫執行個體的主要密碼。

    • 資料庫名稱 — 資料庫執行個體中資料庫的名稱。

    • 連接 — SSL 連線的連接埠號碼。這可以是除了用於非 SSL 連接埠的號碼以外的任何通訊埠號碼。

    var ibmdb = require("ibm_db"); const hostname = "ip_address"; const username = "master_username"; const password = "master_password"; const database = "database_name"; const port = "port"; const certPath = "/root/qa-bundle.pem"; ibmdb.open("DRIVER={DB2};DATABASE=" + database + ";HOSTNAME=" + hostname + ";UID=" + username + ";PWD=" + password + ";PORT=" + port + ";PROTOCOL=TCPIP;SECURITY=SSL;SSLServerCertificate=" + certPath + ";", function (err, conn){ if (err) return console.log(err); conn.close(function () { console.log('done'); }); });
  3. 若要執行JavaScript檔案,請執行下列命令。

    node ssl-test.js
Python
若要使用連線至 Db2 資料庫伺服器 Python
  1. 創建具有以下內容的Python文件。將範例中的下列預留位置取代為您的 RDS for Db2 資料庫執行個體資訊。

    • 連接 — SSL 連線的連接埠號碼。這可以是除了用於非 SSL 連接埠的號碼以外的任何通訊埠號碼。

    • master 使用者名稱 — 資料庫執行個體的主使用者名稱。

    • 主密碼 — 資料庫執行個體的主要密碼。

    • 資料庫名稱 — 資料庫執行個體中資料庫的名稱。

    • ip_address — 資料庫執行個體端點的 IP 位址。

    import click import ibm_db import sys port = port; master_user_id = "master_username" # Master id used to create your DB instance master_password = "master_password" # Master password used to create your DB instance db_name = "database_name" # If not given "db-name' vpc_customer_private_ip = "ip_address" # Hosts end points - Customer private IP Addressicert_path = "/root/ssl/global-bundle.pem" # cert path @click.command() @click.option("--path", help="certificate path") def db2_connect(path): try: conn = ibm_db.connect(f"DATABASE={db_name};HOSTNAME={vpc_customer_private_ip};PORT={port}; PROTOCOL=TCPIP;UID={master_user_id};PWD={master_password};SECURITY=ssl;SSLServerCertificate={path};", "", "") try: ibm_db.exec_immediate(conn, 'create table tablename (a int);') print("Query executed successfully") except Exception as e: print(e) finally: ibm_db.close(conn) sys.exit(1) except Exception as ex: print("Trying to connect...") if __name__ == "__main__": db2_connect()
  2. 創建以下 shell 腳本,該腳本運行您創建的Python文件。替換為python_file_name.pyPython腳本文件的名稱。

    #!/bin/bash PEM_FILE=$1 # number of certs in the PEM file CERTS=$(grep 'END CERTIFICATE' $PEM_FILE| wc -l) for N in $(seq 0 $(($CERTS - 1))); do ALIAS="${PEM_FILE%.*}-$N" cert=`cat $PEM_FILE | awk "n==$N { print }; /END CERTIFICATE/ { n++ }"` cat $PEM_FILE | awk "n==$N { print }; /END CERTIFICATE/ { n++ }" > $ALIAS.pem python3 <python_file_name.py> --path $ALIAS.pem output=`echo $?` if [ $output == 1 ]; then break fi done
  3. 若要使用憑證服務包匯入PEM檔案並執行 shell 指令碼,請執行下列命令。將 shell_file_name.sh 取代為您的殼層指令碼檔案的名稱。

    ./shell_file_name.sh global-bundle.pem