本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
搭配 Amazon RDS for Db2 資料庫執行個體使用 SSL/TLS
SSL 是一種產業標準通訊協定,用於保護用戶端和伺服器之間的網路連線。在 SSL 3.0 版之後,名稱已變更為 TLS,但我們仍然經常將通訊協定稱為 SSL。Amazon RDS 支援 Amazon RDS for Db2 資料庫執行個體的 SSL 加密。使用 SSL/TLS,您可以加密應用程式用戶端與 RDS for Db2 資料庫執行個體之間的連線。所有 AWS 區域 RDS for Db2 都支援 SSL/TLS。
若要啟用 RDS for Db2 資料庫執行個體的 SSL/TLS 加密,請將 Db2 SSL 選項新增至與資料庫執行個體相關聯的參數群組。Amazon RDS 會根據 Db2 的要求,使用第二個連接埠進行 SSL/TLS 連線。這樣做可讓純文字和 SSL 加密通訊同時發生在資料庫執行個體和 Db2 用戶端之間。例如,您可以使用連接埠搭配純文字通訊與 VPC 內的其他資源通訊,同時使用連接埠搭配 SSL 加密的通訊與 VPC 外部的資源通訊。
建立 SSL/TLS 連線
若要建立 SSL/TLS 連線,請選擇憑證授權單位 (CA)、下載所有 的憑證套件 AWS 區域,並將參數新增至自訂參數群組。
步驟 1:選擇 CA 並下載憑證
選擇憑證授權單位 (CA),並下載所有 的憑證套件 AWS 區域。如需詳細資訊,請參閱使用 SSL/TLS 加密與資料庫執行個體或叢集的連線。
步驟 2:更新自訂參數群組中的參數
如果您使用 RDS for Db2 的自攜授權 (BYOL) 模型,請修改您為 IBM Customer ID和 建立的自訂參數群組IBM Site ID。如果您使用不同的 RDS for Db2 授權模型,則請依照程序將參數新增至自訂參數群組。如需詳細資訊,請參閱Amazon RDS for Db2 授權選項。
您無法修改 RDS for Db2 資料庫執行個體的預設參數群組。因此,您必須建立自訂參數群組、加以修改,然後將其連接至 RDS for Db2 資料庫執行個體。如需參數群組的詳細資訊,請參閱 RDSAmazon資料庫執行個體的資料庫參數群。
使用下表中的參數設定。
參數 |
Value |
DB2COMM |
TCPIP,SSL 或 SSL |
SSL_SVCENAME |
<any port number except the number used for the non-SSL
port> |
連線至您的 Db2 資料庫伺服器
連線至 Db2 資料庫伺服器的指示為特定語言。
- Java
-
使用 連線至 Db2 資料庫伺服器 Java
-
下載 JDBC 驅動程式。如需詳細資訊,請參閱IBM支援文件中的 DB2 JDBC 驅動程式版本和下載。
-
使用下列內容建立 shell 指令碼檔案。此指令碼會將套件中的所有憑證新增至 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
-
若要執行 shell 指令碼,並使用憑證套件將PEM檔案匯入 Java KeyStore,請執行下列命令。將 shell_file_name.sh
取代為 shell 指令碼檔案的名稱,並將密碼
取代為 的密碼Java KeyStore。
./shell_file_name.sh
global-bundle.pem password
truststore.jks
-
若要連線至 Db2 伺服器,請執行下列命令。將範例中的下列預留位置取代為您的 RDS for Db2 資料庫執行個體資訊。
-
ip_address
– 資料庫執行個體端點的 IP 地址。
-
連接埠
– SSL 連線的連接埠號碼。這可以是任何連接埠號碼,但用於非 SSL 連接埠的號碼除外。
-
database_name
– 資料庫執行個體中的資料庫名稱。
-
master_username
– 資料庫執行個體的主使用者名稱。
-
master_password
– 資料庫執行個體的主密碼。
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
-
安裝 node-ibm_db驅動程式。如需詳細資訊,請參閱 IBM Db2 文件中的在 Linux和UNIX系統上安裝 node-ibm_db 驅動程式。
-
根據下列內容建立JavaScript檔案。將範例中的下列預留位置取代為您的 RDS for Db2 資料庫執行個體資訊。
-
ip_address
– 資料庫執行個體端點的 IP 地址。
-
master_username
– 資料庫執行個體的主使用者名稱。
-
master_password
– 資料庫執行個體的主密碼。
-
database_name
– 資料庫執行個體中的資料庫名稱。
-
連接埠
– 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');
});
});
-
若要執行 JavaScript 檔案,請執行下列命令。
node ssl-test.js
- Python
-
使用 連線至 Db2 資料庫伺服器 Python
-
建立具有下列內容Python的檔案。將範例中的下列預留位置取代為您的 RDS for Db2 資料庫執行個體資訊。
-
連接埠
– SSL 連線的連接埠號碼。這可以是任何連接埠號碼,但用於非 SSL 連接埠的號碼除外。
-
master_username
– 資料庫執行個體的主使用者名稱。
-
master_password
– 資料庫執行個體的主密碼。
-
database_name
– 資料庫執行個體中的資料庫名稱。
-
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()
-
建立下列 shell 指令碼,以執行您建立Python的檔案。python_file_name.py
以Python指令碼檔案名稱取代 。
#!/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
-
若要使用憑證套件匯入 PEM 檔案並執行 shell 指令碼,請執行下列命令。將 shell_file_name.sh
取代為您的 shell 指令碼檔案名稱。
./shell_file_name.sh
global-bundle.pem
- Db2 CLP
-
使用 連線至 Db2 資料庫伺服器 Db2 CLP
-
若要使用 連線至 Db2 執行個體Db2 CLP,您需要可在 IBM Fix Central 下載的GSKit」。若要使用 Db2 CLP,您還需要 IBM Db2用戶端,您可以從 IBM Support 中的下載初始版本 11.5 用戶端和驅動程式下載。
-
建立金鑰存放區。
gsk8capicmd_64 -keydb -create -db "directory
/keystore-filename
" -pw "changeThisPassword
" -type pkcs12 -stash
-
將憑證套件匯入金鑰存放區。
gsk8capicmd_64 -cert -import -file global-bundle.pem
-target directory
/keystore-filename
> -target_stashed
-
更新 Db2 執行個體組態。
db2 update dbm cfg using SSL_CLNT_KEYDB keystore-filename
SSL_CLNT_STASH keystore stash file
immediate
-
為節點和資料庫編製目錄。
db2 catalog tcpip node ssluse1
REMOTE endpoint
SERVER ssl_svcename
security ssl
db2 catalog database testdb
as ssltest
at node ssluse1
-
連線至資料庫。
db2 connect to ssltest
user username
using password