Beego启用HTTPS需同时设置EnableHTTPS=true和EnableHttpTLS=true,缺一不可;证书须为无密码PEM格式,私钥以BEGIN RSA PRIVATE KEY开头,路径相对于可执行文件。

Beego的HTTPS配置项必须显式启用
Beego默认不启用HTTPS,EnableHTTPS 和 EnableHttpTLS 两个开关必须同时设为 true,否则即使证书路径正确,服务仍只监听HTTP端口。很多用户只改了证书路径,漏掉其中一个开关,结果curl -I https://localhost:443 返回 connection refused。
常见配置写法:
EnableHTTPS = true EnableHttpTLS = true HttpsPort = 443 HTTPSCertFile = "server.crt" HTTPSKeyFile = "server.key"
注意:HttpsPort 值不能带引号;证书路径是相对于可执行文件所在目录的相对路径,不是相对于 app.conf 文件位置。
证书文件必须是PEM格式且不含密码
Beego的 http.ListenAndServeTLS 底层调用Go标准库,只接受无密码保护的PEM格式私钥。如果你从阿里云、腾讯云下载的证书包里拿到的是 .pfx 或 .p12 文件,必须先用OpenSSL解包并移除密码:
openssl pkcs12 -in cert.pfx -nocerts -nodes -out server.keyopenssl pkcs12 -in cert.pfx -clcerts -nokeys -out server.crt- 检查
server.key开头是否为-----BEGIN RSA PRIVATE KEY-----或-----BEGIN EC PRIVATE KEY-----,不能是-----BEGIN ENCRYPTED PRIVATE KEY-----
若私钥被加密,启动时会报错:tls: failed to find any PEM data in key input。
Nginx反向代理时Beego应禁用HTTPS
如果Beego项目实际部署在Nginx后方(即Nginx做SSL终止),Beego自身不应再启用HTTPS。此时需关掉 EnableHTTPS,只保留HTTP监听(如 HttpPort = 8080),由Nginx处理443端口和证书验证。
否则会出现双重TLS或协议错配:Nginx把HTTPS请求解密后转发给Beego的HTTP端口,而Beego又试图对已解密的明文再套一层TLS,导致连接直接中断。
典型错误现象:curl -k https://example.com 返回空响应或 502 Bad Gateway,但Nginx error.log 显示 upstream prematurely closed connection。
自签名证书在开发中要绕过客户端校验
本地用 GenerateSelfSignedCert 生成的证书,浏览器或curl访问会提示证书不可信。Beego本身不校验自己证书,但调用方(如前端fetch、Postman、curl)会拒绝连接。
开发调试时可临时绕过:
- curl 加
-k参数 - 前端 fetch 设置
mode: 'no-cors'(仅限简单请求)或改用代理避免跨域+证书问题 - Go客户端代码中设置
&http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}
切记:这些跳过方式绝不能出现在生产配置里。自签名证书只用于开发验证流程是否通,不代表传输安全已达标。


















