Uso de SSL con una instancia de base de datos de Amazon RDS para Db2
SSL es un protocolo estándar del sector que se utiliza para proteger las conexiones de red entre el cliente y el servidor. Después de la versión 3.0 de SSL, el nombre se cambió a TLS, pero a menudo nos referimos al protocolo como SSL. Amazon RDS admite el cifrado SSL para las instancias de bases de datos de Amazon RDS para Db2. Con SSL/TLS puede cifrar una conexión entre el cliente de la aplicación y la instancia de base de datos de RDS para Db2. La compatibilidad con SSL/TLS está disponible en todas las Regiones de AWS para RDS para Db2.
A fin de habilitar el cifrado SSL/TLS para una instancia de base de datos de RDS para Db2, agregue la opción Db2 SSL al grupo de parámetros asociado a la instancia de base de datos. Amazon RDS utiliza un segundo puerto, según lo requiera Db2, para las conexiones SSL/TLS. Esto permite que se produzca la comunicación cifrada de SSL y de texto sin cifrar al mismo tiempo entre una instancia de base de datos y un cliente Db2. Por ejemplo, es posible utilizar el puerto con la comunicación de texto sin cifrar para ponerse en contacto con otros recursos dentro de una VPC mientras se utiliza el puerto con comunicación cifrada SSL para ponerse en contacto con recursos situados fuera de la VPC.
Crear una conexión SSL/TLS
Para crear una conexión SSL/TLS, elija una autoridad de certificación (CA), descargue un paquete de certificados para todas las Regiones de AWS y agregue parámetros a un grupo de parámetros personalizado.
Paso 1: elegir una CA y descargar un certificado
Elija una autoridad de certificación (CA) y descargue un paquete de certificados para todas las Regiones de AWS. Para obtener más información, consulte Uso de SSL/TLS para cifrar una conexión a una instancia o clúster de base de datos.
Paso 2: actualizar los parámetros de un grupo de parámetros personalizado
Si utiliza el modelo traiga su propia licencia (BYOL) para RDS para Db2, modifique el grupo de parámetros personalizado que creó para su IBM Customer ID y su IBM Site ID. Si utiliza un modelo de licencia diferente para RDS para Db2, siga el procedimiento para agregar parámetros a un grupo de parámetros personalizado. Para obtener más información, consulte Opciones de licencias de Amazon RDS para Db2.
No puede modificar los grupos de parámetros predeterminados de las instancias de base de datos de RDS para Db2. Por lo tanto, debe crear un grupo de parámetros personalizado, modificarlo y asociarlo a las instancias de base de datos de RDS para Db2. Para obtener información acerca de los grupos de parámetros, consulte Grupos de parámetros de base de datos para instancias de Amazon RDS.
Utilice la configuración de parámetros en la tabla siguiente.
Parámetro |
Valor |
DB2COMM |
TCPIP,SSL o SSL |
SSL_SVCENAME |
<any port number except the number used for the non-SSL
port> |
Conexión a su servidor de bases de datos Db2
Las instrucciones para conectarse al servidor de bases de datos Db2 son específicas del lenguaje.
- Java
-
Para conectarse a su servidor de bases de datos Db2 mediante Java
-
Descargue el controlador JDBC. Para obtener más información, consulte DB2 JDBC Driver Versions and Downloads en el servicio de asistencia de IBM.
-
Cree un archivo de script de shell con el siguiente contenido. Este script agrega todos los certificados del paquete a un Java
KeyStore.
Compruebe que keytool
exista en la ruta del script para que el script pueda localizarlo. Si utiliza un cliente de Db2, puede localizar el keytool
en ~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
-
Para ejecutar el script de shell e importar el archivo PEM con el paquete de certificados en un Java KeyStore, ejecute el siguiente comando. Sustituya shell_file_name.sh
por el nombre del archivo de script de shell y password
por la contraseña de su Java KeyStore.
./shell_file_name.sh
global-bundle.pem password
truststore.jks
-
Para comprobar la conexión a su servidor Db2, ejecute el siguiente comando. Sustituya los siguientes marcadores de posición del ejemplo por la información de la instancia de base de datos de RDS para Db2.
-
ip_address
: la dirección IP del punto de conexión de la instancia de base de datos.
-
port
: número de puerto de la conexión SSL. Puede ser cualquier número de puerto, excepto el número que se utiliza para el puerto que no es SSL.
-
database_name
: el nombre de la base de datos en su instancia de base de datos.
-
master_username
: el nombre de usuario maestro para la instancia de base de datos.
-
master_password
: la contraseña maestra de la instancia de base de datos.
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
-
Para conectarse a su servidor de bases de datos Db2 mediante Node.js
-
Instale el controlador node-ibm_db. Para obtener más información, consulte Installing the node-ibm_db driver on Linux and UNIX systems en la documentación de IBM Db2.
-
Cree un archivo JavaScript basado en el siguiente contenido. Sustituya los siguientes marcadores de posición del ejemplo por la información de la instancia de base de datos de RDS para Db2.
-
ip_address
: la dirección IP del punto de conexión de la instancia de base de datos.
-
master_username
: el nombre de usuario maestro para la instancia de base de datos.
-
master_password
: la contraseña maestra de la instancia de base de datos.
-
database_name
: el nombre de la base de datos en su instancia de base de datos.
-
port
: número de puerto de la conexión SSL. Puede ser cualquier número de puerto, excepto el número que se utiliza para el puerto que no es 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');
});
});
-
Para ejecutar el archivo JavaScript ejecute el siguiente comando:
node ssl-test.js
- Python
-
Para conectarse a su servidor de bases de datos Db2 mediante Python
-
Cree un archivo Python con el siguiente contenido. Sustituya los siguientes marcadores de posición del ejemplo por la información de la instancia de base de datos de RDS para Db2.
-
port
: número de puerto de la conexión SSL. Puede ser cualquier número de puerto, excepto el número que se utiliza para el puerto que no es SSL.
-
master_username
: el nombre de usuario maestro para la instancia de base de datos.
-
master_password
: la contraseña maestra de la instancia de base de datos.
-
database_name
: el nombre de la base de datos en su instancia de base de datos.
-
ip_address
: la dirección IP del punto de conexión de la instancia de base de datos.
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()
-
Cree el siguiente script de shell, que ejecuta el archivo Python que ha creado. Reemplace python_file_name.py
por el nombre de su archivo de script 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
-
Para importar el archivo PEM con el paquete de certificados y ejecutar el script de shell, ejecute el siguiente comando. Sustituya shell_file_name.sh
por el nombre de su archivo de script de shell.
./shell_file_name.sh
global-bundle.pem
- Db2 CLP
-
Para conectarse a su servidor de bases de datos Db2 mediante Db2 CLP
-
Para conectarse a la instancia de Db2 mediante Db2 CLP, necesita GSKit, que puede descargar en IBM Fix Central. Para usar Db2 CLP, también necesita el cliente de IBM Db2, que puede descargar desde Descargar clientes y controladores iniciales de la versión 11.5 en IBM Support.
-
Cree un almacén de claves.
gsk8capicmd_64 -keydb -create -db "directory
/keystore-filename
" -pw "changeThisPassword
" -type pkcs12 -stash
-
Importe las agrupaciones de certificados al almacén de claves.
gsk8capicmd_64 -cert -import -file global-bundle.pem
-target directory
/keystore-filename
> -target_stashed
-
Actualice la configuración de la instancia de Db2.
db2 update dbm cfg using SSL_CLNT_KEYDB keystore-filename
SSL_CLNT_STASH keystore stash file
immediate
-
Catalogue el nodo y la base de datos.
db2 catalog tcpip node ssluse1
REMOTE endpoint
SERVER ssl_svcename
security ssl
db2 catalog database testdb
as ssltest
at node ssluse1
-
Conéctese a la base de datos .
db2 connect to ssltest
user username
using password