Skip to content

HTTPS 支持

Cosy 框架提供了内置的 HTTPS 支持,允许您的应用程序通过安全的 HTTPS 协议提供服务。这在处理敏感数据时尤为重要,例如用户凭证、支付信息等。

配置项

app.ini 配置文件的 [server] 部分,您可以设置以下与 HTTPS 相关的配置选项:

ini
[server]
Host        = 127.0.0.1
Port        = 9443
RunMode     = debug
BaseUrl     = https://api.example.com
EnableHTTPS = true
SSLCert     = /path/to/certificate.pem
SSLKey      = /path/to/key.pem
配置项类型描述
EnableHTTPSbool是否启用 HTTPS 服务
SSLCertstringSSL 证书文件的绝对路径
SSLKeystringSSL 私钥文件的绝对路径

工作原理

EnableHTTPS 设置为 true 时,Cosy 将使用 TLS 配置启动一个 HTTPS 服务器。否则,将使用 http.Server.Serve() 方法启动一个标准的 HTTP 服务器。

Cosy 现在支持证书热重载,这意味着您可以更新证书文件而不需要重启服务器。系统会使用缓存机制来存储证书,以优化性能。

go
// 证书热重载机制摘要
tlsConfig := &tls.Config{
    GetCertificate: func(info *tls.ClientHelloInfo) (*tls.Certificate, error) {
        certVal, ok := tlsCertCache.Load().(tls.Certificate)
        if !ok {
            return nil, errors.New("no valid certificate available")
        }
        return &certVal, nil
    },
}

证书热重载

当您更新了证书文件后,可以通过调用 ReloadTLSCertificate() 函数来重新加载证书:

go
// 手动重载证书示例
if err := cosy.ReloadTLSCertificate(); err != nil {
    logger.Error("无法重新加载证书:", err)
}

获取 SSL 证书

开发环境

对于开发环境,您可以生成自签名证书:

bash
# 生成私钥
openssl genrsa -out server.key 2048

# 生成自签名证书
openssl req -new -x509 -key server.key -out server.crt -days 365

请注意,浏览器会警告自签名证书不受信任,但这对开发环境来说通常是可以接受的。

生产环境

对于生产环境,建议使用受信任的证书颁发机构(CA)颁发的证书,例如:

  • Let's Encrypt(免费)
  • Certbot(Let's Encrypt 的客户端)
  • 商业 CA(如 DigiCert、Comodo 等)