一、Docker运行DM8服务
a.获取镜像并加载
dm8-20250206-x86-rh6-rq-single.tar
bash
docker load -i dm8_20250206_x86_rh6_rq_single.tar
b.创建数据目录
bash
mkdir -p /opt/docker/dm8_ssl/data
chmod 777 /opt/docker -R
c.运行(数据库密码根据实际情况修改)
bash
docker run -d \
--name dm8_ssl \
--privileged=true \
--restart=always \
-p 15236:5236 \
-e LD_LIBRARY_PATH=/opt/dmdbms/bin \
-e PAGE_SIZE=16 \
-e EXTENT_SIZE=32 \
-e LOG_SIZE=1024 \
-e UNICODE_FLAG=1 \
-e INSTANCE_NAME=dm8_ssl \
-e SYSDBA_PWD={{自定义密码}} \
-v /opt/docker/dm8_ssl/data:/opt/dmdbms/data \
dm8:dm8_20250206_rev257733_x86_rh6_64
d.查看日志
bash
docker logs -f dm8_ssl
e.客户端连接测试
连接信息如下:
hostname: localhost
port: 15236
username1: SYSDBA
password1: {{自定义密码}}
二、配置SSL
a.容器内已经存在证书文件
bash
# 客户端证书
/opt/dmdbms/bin/client_ssl
# 服务端证书
/opt/dmdbms/bin/server_ssl
b.将容器内证书复制到服务器上
bash
docker cp dm8_ssl:/opt/dmdbms/bin/client_ssl/SYSDBA /root/ssl_file/dm8_ssl
c.进入证书目录
bash
cd /root/ssl_file/dm8_ssl/SYSDBA
d.编写脚本(rebuild_keystore.sh)
bash
#!/bin/bash
#cd /opt/dmdbms/bin/client_ssl/SYSDBA
echo "=== 重新生成 .keystore 文件 ==="
# 输入新密码
read -sp "请输入新的密钥库密码: " NEW_PASS
echo ""
# 备份旧文件
[ -f .keystore ] && mv .keystore .keystore.bak
# 生成 PKCS12
openssl pkcs12 -export -inkey client-key.pem -in client-cert.pem -out client.p12 -password pass:$NEW_PASS
# 转换为 keystore
keytool -importkeystore -srckeystore client.p12 -srcstoretype PKCS12 -srcstorepass $NEW_PASS -destkeystore .keystore -deststorepass $NEW_PASS -noprompt
# 导入 CA 证书
keytool -import -alias ca -trustcacerts -file ca-cert.pem -keystore .keystore -storepass $NEW_PASS -noprompt
# 清理临时文件
rm -f client.p12
# 验证
echo "=== 验证 keystore ==="
keytool -list -keystore .keystore -storepass $NEW_PASS
echo "✅ 完成!新密码已设置为: $NEW_PASS"
e.执行脚本(记住设置的密码,客户端连接时需要用到)
bash
./rebuild_keystore.sh
f.修改服务端配置
bash
# 将ENABLE_ENCRYPT设置为1
vim /opt/docker/dm8_ssl/data/DAMENG/dm.ini

g.重启服务
bash
# 方式一
docker restart dm8_ssl
# 方式二
docker exec -it dm8_ssl /bin/bash
/opt/dmdbms/bin/DmService restart
三、验证SSL
a.dbeaver验证
bash
# JdbcURL如下:
jdbc:dm://ip:15236?sslFilesPath=E:\\client_ssl\\dm8&sslKeystorePass=keystore文件密码
sslFilesPath: 指定 .keystore 文件目录,注意是所在目录
sslKeystorePass: 生成 .keystore 文件时设置的密码
