You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在DigitalOcean托管MySQL通过TLS加密连接时,ca-certificate.crt应放何处?

解决DigitalOcean托管MySQL的SSL/TLS证书配置问题

环境背景

在macOS Ventura系统的IntelliJ 2023.1中,使用Java 20 + JDBC 4.2+,通过com.mysql.cj.jdbc.MysqlDataSource构建Demo应用,连接DigitalOcean托管的MySQL实例。该实例要求启用SSL(实际为TLS),已下载官方提供的ca-certificate.crt证书文件,但不清楚如何配置到数据源中。

三种证书配置方案

方案1:直接指定证书文件路径(开发环境首选)

通过MysqlDataSource的setSslCa()方法直接传入证书文件的绝对路径,无需修改系统信任库,适合快速调试。

方案2:导入证书到Java信任库(生产环境推荐)

将证书导入JRE的全局信任库,让Java默认信任该证书:

  1. 打开终端,执行命令(替换路径为你的实际文件路径):
keytool -importcert -file /path/to/ca-certificate.crt -alias digitalocean-mysql -keystore /Library/Java/JavaVirtualMachines/jdk-20.jdk/Contents/Home/lib/security/cacerts
  1. 信任库默认密码为changeit,输入密码完成导入。
  2. 配置数据源时无需额外指定证书路径,Java会自动从信任库读取。

方案3:通过JDBC URL参数配置

在JDBC URL中添加sslCa参数直接指定证书路径:

ds.setURL("jdbc:mysql://db-mysql-nyc1-whatever.db.ondigitalocean.com:25000/defaultdb?sslCa=/path/to/ca-certificate.crt");

修改后的完整数据源配置代码

以方案1为例,代码如下:

private DataSource fetchDataSource() {
    MysqlDataSource ds = null;
    try {
        ds = new MysqlDataSource();

        // Server配置
        ds.setURL("jdbc:mysql://db-mysql-nyc1-whatever.db.ondigitalocean.com:25000/defaultdb");
        ds.setRequireSSL(true);
        // 指定CA证书文件路径(替换为你的实际路径)
        ds.setSslCa("/Users/yourname/Downloads/ca-certificate.crt");

        // 用户认证
        ds.setUser("doadmin");
        ds.setPassword("tiger");

        return ds;
    } catch (SQLException e) {
        e.printStackTrace();
    }
    throw new IllegalStateException("Failed to establish a JDBC DataSource. Msg # 3dfbbc6a-41d4-455d-9b6c-addf433522e5.");
}

注意事项

  • 确保证书文件路径正确且具备可读权限
  • 若使用方案2,导入证书后需重启IntelliJ或应用,确保JVM加载更新后的信任库
  • MySQL Connector/J 8.0+默认启用TLS 1.2+,无需额外配置协议版本

内容的提问来源于stack exchange,提问作者Basil Bourque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:07:26