ENABLE_ENCRYPT 是达梦数据库 dm.ini 中的静态参数,用于控制服务端与客户端之间通信链路的 SSL/TLS 加密与身份认证行为。修改该参数后必须重启数据库服务才能生效。
dm.ini 中的 ENABLE_ENCRYPT 控制 SSL 加密与认证行为,取值含义如下:
| 取值 | 加密 | 认证 | 说明 |
|---|---|---|---|
| 0 | ✗ | ✗ | 不加密、不认证(默认) |
| 1 | ✓ | ✓ | 加密+双向认证(标准安全模式) |
| 2 | ✗ | ✓ | 仅认证,不加密 |
| 4 | ✓ | ✗ | 仅加密,不认证) |
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
public class DamengEncryptCompleteTest {
static String host = "192.168.3.251";
static String port = "5236";
static String user = "SYSDBA";
static String pwd = "Test@xxx123";
static String sslPath = "/opt/CA/client_ssl/SYSDBA";
static String sslPwd = "dameng";
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("用法: java DamengEncryptCompleteTest true (携带证书)");
System.out.println(" java DamengEncryptCompleteTest false (不携带证书)");
return;
}
boolean useCert = Boolean.parseBoolean(args[0]);
test(useCert);
}
static void test(boolean useCert) {
String url = "jdbc:dm://" + host + ":" + port;
if (useCert) {
url += "?sslFilesPath=" + sslPath + "&sslKeystorePass=" + sslPwd;
}
try (Connection conn = DriverManager.getConnection(url, user, pwd);
Statement stmt = conn.createStatement()) {
try (ResultSet rs = stmt.executeQuery("SELECT 1 FROM V$VERSION;")) {
System.out.println("连接成功");
}
} catch (Exception e) {
System.out.println("连接失败:" + e.getMessage());
}
}
}
1.1测试步骤与结果
1.不携带客户端证书
java -Djavax.net.debug=ssl:handshake:verbose -cp .:$DM_JDBC DamengEncryptCompleteTest false
2.携带客户端证书
java -Djavax.net.debug=ssl:handshake:verbose -cp .:$DM_JDBC DamengEncryptCompleteTest true
3.抓包验证
tcpdump -i ens33 port 5236 -A
1.2 结论
取值为 0 时,无论客户端是否提供 SSL 参数,所有通信均为明文,不进行任何加密或身份认证。
2.1 测试步骤与结果
1.不携带客户端证书
java -Djavax.net.debug=ssl:handshake:verbose -cp .:$DM_JDBC DamengEncryptCompleteTest false
2.携带客户端证书
java -Djavax.net.debug=ssl:handshake:verbose -cp .:$DM_JDBC DamengEncryptCompleteTest true
3.抓包验证
tcpdump -i ens33 port 5236 -A
2.2 结论
取值为 1 时,强制要求 SSL 加密和双向证书认证。客户端必须提供有效证书,服务端证书也必须完整部署,否则连接被拒绝。
3.1 测试步骤与结果
1.不携带客户端证书
java -Djavax.net.debug=ssl:handshake:verbose -cp .:$DM_JDBC DamengEncryptCompleteTest false
2.携带客户端证书
java -Djavax.net.debug=ssl:handshake:verbose -cp .:$DM_JDBC DamengEncryptCompleteTest true
3.抓包验证
tcpdump -i ens33 port 5236 -A
3.3 结论
取值为 2 时,仅进行双向证书认证,不加密传输数据。客户端必须提供证书,但通信内容在抓包中可见。
4.1 测试步骤与结果
1.不携带客户端证书
java -Djavax.net.debug=ssl:handshake:verbose -cp .:$DM_JDBC DamengEncryptCompleteTest false
2.携带客户端证书
java -Djavax.net.debug=ssl:handshake:verbose -cp .:$DM_JDBC DamengEncryptCompleteTest true
3.抓包验证
tcpdump -i ens33 port 5236 -A
4.2 结论
取值为 4 时,仅对通信数据加密,客户端可以不带证书,不进行身份认证。
文章
阅读量
获赞
