协议版本 | 是否支持 |
TLS 1.2 | 支持(推荐) |
TLS 1.3 | 支持(推荐) |
TLS 1.0 / TLS 1.1 | 已不再推荐,是否可用取决于运行环境的 OpenSSL 安全策略。 |

TencentDB-TDSQL-B-SSL-CA.zip),包含如下三个文件:ca.p7b 文件:用于 Windows 系统中导入 CA 证书。ca.jks 文件:Java 的 truststore 和 keystore 存储文件,密码统一为 tencentdb,用于 Java 程序中导入 CA 证书链。ca.pem 文件:用于其他系统或应用中导入 CA 证书。

connection is being used 报错,通常是已有会话未断开,关闭 Navicat 后重试即可。
--ssl-mode=REQUIRED)的客户端将无法连接。请确认对业务无影响后再执行此操作。mysql -h <IP 地址> --ssl-ca=<ca证书> --ssl-mode=REQUIRED -P <端口号> -u <用户名> -p
VERIFY_CA 或 VERIFY_IDENTITY,则需要通过如下命令连接实例。mysql -h <IP 地址> --ssl-ca=<ca证书> --ssl-mode=VERIFY_CA -P <端口号> -u <用户名> -p
--ssl-mode 参数表示 SSL 模式,通常情况下,推荐使用 REQUIRED 和 VERIFY_CA 模式,表示要求 MySQL 客户端使用 SSL/TLS 协议连接 MySQL 服务器,并要求验证 MySQL 服务器的 SSL/TLS 证书;而 VERIFY_IDENTITY 模式除了要求验证 MySQL 服务器的 SSL/TLS 证书,还要求客户端使用的主机名与服务器证书中的标识相匹配,否则 MySQL 客户端会拒绝连接 MySQL 服务器。$conn = mysqli_init();mysqli_ssl_set($conn,NULL,NULL, "<下载的证书路径>", NULL, NULL);mysqli_real_connect($conn, '<数据库访问地址>', '<数据库访问用户名>', '<数据库访问密码>', '<指定访问数据库>', <访问端口>, MYSQLI_CLIENT_SSL | MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT);if (mysqli_connect_errno($conn)) {die('Failed to connect to MySQL: '.mysqli_connect_error());}
$options = array(PDO::MYSQL_ATTR_SSL_CA => '<下载的证书路径>');$db = new PDO('mysql:host=<数据库访问地址>;port=<访问端口>;dbname=<指定访问数据库>', '<数据库访问用户名>', '<数据库访问密码>', $options);
# generate truststore and keystore in codeString importCert = " -import "+" -alias mysqlServerCACert "+" -file " + ssl_ca +" -keystore truststore "+" -trustcacerts " +" -storepass password -noprompt ";String genKey = " -genkey -keyalg rsa " +" -alias mysqlClientCertificate -keystore keystore " +" -storepass password123 -keypass password " +" -dname CN=MS ";sun.security.tools.keytool.Main.main(importCert.trim().split("\\\\s+"));sun.security.tools.keytool.Main.main(genKey.trim().split("\\\\s+"));# use the generated keystore and truststoreSystem.setProperty("javax.net.ssl.keyStore","<下载的证书路径>");System.setProperty("javax.net.ssl.keyStorePassword","tencentdb");System.setProperty("javax.net.ssl.trustStore","<下载的证书路径>");System.setProperty("javax.net.ssl.trustStorePassword","tencentdb");url = String.format("jdbc:mysql://%s/%s?serverTimezone=UTC&useSSL=true", '<数据库访问地址>', '<指定访问数据库>');properties.setProperty("user", '<数据库访问用户名>');properties.setProperty("password", '<数据库访问密码>');conn = DriverManager.getConnection(url, properties);
var builder = new MySqlConnectionStringBuilder{Server = "<数据库访问地址>",UserID = "<数据库访问用户名>",Password = "<数据库访问密码>",Database = "<指定访问数据库>",SslMode = MySqlSslMode.VerifyCA,SslCa = "<下载的证书>",};using (var connection = new MySqlConnection(builder.ConnectionString)){connection.Open();}
try:conn = mysql.connector.connect(user='<数据库访问用户名>',password='<数据库访问密码>',database='<指定访问数据库>',host='<数据库访问地址>',ssl_ca='<下载的证书路径>')except mysql.connector.Error as err:print(err)
conn = pymysql.connect(user='<数据库访问用户名>',password='<数据库访问密码>',database='<指定访问数据库>',host='<数据库访问地址>',ssl={'ca': '<下载的证书路径>'})
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': '<指定访问数据库>','USER': '<数据库访问用户名>','PASSWORD': '<数据库访问密码>','HOST': '<数据库访问地址>','PORT': '<访问端口>','OPTIONS': {'ssl': {'ca': '<下载的证书路径>'}}}}
var fs = require('fs');var mysql = require('mysql');const serverCa = [fs.readFileSync("<下载的证书路径>", "utf8")];var conn=mysql.createConnection({host:"<数据库访问地址>",user:"<数据库访问用户名>",password:"<数据库访问密码>",database:"<指定访问数据库>",port:<访问端口>,ssl: {rejectUnauthorized: true,ca: serverCa}});conn.connect(function(err) {if (err) throw err;});
rootCertPool := x509.NewCertPool()pem, _ := ioutil.ReadFile("<下载的证书路径>")if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {log.Fatal("Failed to append PEM.")}mysql.RegisterTLSConfig("custom", &tls.Config{RootCAs: rootCertPool})var connectionString stringconnectionString = fmt.Sprintf("%s:%s@tcp(%s:<访问端口>)/%s?allowNativePasswords=true&tls=custom","<数据库访问用户名>" , "<数据库访问密码>", "<数据库访问地址>", '<指定访问数据库>')db, _ := sql.Open("mysql", connectionString)
client = Mysql2::Client.new(:host => '<数据库访问地址>',:username => '<数据库访问用户名>',:password => '<数据库访问密码>',:database => '<指定访问数据库>',:sslca => '<下载的证书路径>')
文档反馈