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

如何在Vapor 4应用中安装SSL证书连接Digital Ocean托管PostgreSQL

步骤1:放置CA证书文件
  • 把Digital Ocean提供的ca-certificate.crt文件放到Vapor项目的Resources目录下,确保项目打包部署时该文件会被一同打包到运行环境中。
  • 若使用Docker部署Vapor项目,需要在Dockerfile中添加对应指令将证书文件拷贝到容器的可访问路径,示例指令:COPY Resources/ca-certificate.crt /app/Resources/ca-certificate.crt
  • 生产环境也可以将证书放到服务器的/etc/ssl/certs系统证书目录下,权限设置为644即可。

安全提示:不要将证书文件提交到公共代码仓库,生产环境建议使用云服务商的密钥管理服务存储证书内容,运行时直接读取内存加载,避免证书泄露。

步骤2:修改数据库连接配置添加TLS规则

首先导入必要依赖,加载证书生成自定义TLS配置,替换你现有的数据库连接代码即可:

import NIOSSL
import FluentPostgresDriver

// 先定位CA证书路径
let certPath = DirectoryConfiguration.detect().resourcesDirectory + "ca-certificate.crt"
do {
    // 读取证书内容
    let certBytes = try Data(contentsOf: URL(fileURLWithPath: certPath))
    let certificate = try NIOSSLCertificate(bytes: [UInt8](certBytes), format: .pem)
    
    // 生成自定义TLS配置,信任DO提供的CA证书
    var tlsConfig = TLSConfiguration.makeClientConfiguration()
    tlsConfig.trustRoots = .certificates([certificate])
    
    // 数据库注册代码
    app.databases.use(.postgres(
        hostname: "你的DO数据库主机地址",
        port: 25060,
        username: "example",
        password: "example",
        database: "exampledb",
        tlsConfiguration: tlsConfig
    ), as: .psql)
} catch {
    app.logger.error("加载CA证书失败: \(error)")
    // 开发环境可以直接触发fatalError排查问题,生产环境可根据业务逻辑处理异常
    fatalError("证书加载失败")
}

如果你的DO数据库配置了强制SSL,不需要额外添加禁用TLS的参数,以上配置即可满足连接要求。

步骤3:验证SSL连接有效性
  • 启动项目后如果没有抛出数据库连接错误,代表基础配置正常。
  • 可以在数据库连接成功后执行以下SQL查询验证SSL状态:
    // 示例查询代码,可写在测试路由或者启动回调中
    app.get("test-ssl") { req in
        try await req.db.raw("SELECT ssl FROM pg_stat_ssl WHERE pid = pg_backend_pid()")
            .first(decoding: SSLStatus.self)?.ssl ?? false
    }
    
    struct SSLStatus: Content {
        let ssl: Bool
    }
    
    访问对应接口返回true即代表SSL连接正常生效。
  • 也可以直接在Digital Ocean的PostgreSQL托管面板的连接日志中,查看当前连接的SSL状态为启用即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:06:02