0

0

Go语言如何启用HTTPS服务_TLS证书配置说明

P粉602998670

P粉602998670

发布时间:2026-01-21 09:23:37

|

339人浏览过

|

来源于php中文网

原创

Go 用 http.ListenAndServeTLS 启动 HTTPS 服务,需 PEM 格式证书(域名证+中间证)和未加密私钥;自签名证需含 SAN;生产推荐 certmagic 自动化 ACME;HTTP 重定向需单独 :80 server 并发运行。

go语言如何启用https服务_tls证书配置说明

Go 的 http.ListenAndServeTLS 是启用 HTTPS 的核心函数

Go 标准库不依赖外部 Web 服务器,直接用 http.ListenAndServeTLS 就能启动带 TLS 的 HTTP 服务。它要求传入两个参数:certFile(证书文件路径)和 keyFile(私钥文件路径),且必须是 PEM 格式。

常见错误是把证书链顺序搞错,比如把中间证书放在根证书前面,或漏掉中间证书——浏览器会报 x509: certificate signed by unknown authority

  • 证书文件(cert.pem)应按「域名证书 → 中间证书」顺序拼接,不能包含私钥
  • 私钥文件(key.pem)必须是未加密的 PEM 格式;若用 openssl genrsa -aes256 生成过带密码的私钥,需先用 openssl rsa -in key.pem.enc -out key.pem 去密
  • 确保文件路径可读,且 Go 进程有权限打开它们;本地测试时建议用绝对路径,避免工作目录影响

自签名证书用于开发环境快速验证

生产环境必须用 CA 签发的证书,但开发调试时可用 openssl req 生成自签名证书。关键点在于:Subject Alternative Name(SAN)必须包含你将访问的域名或 IP,否则现代浏览器(Chrome/Firefox)会拒绝连接,报 NET::ERR_CERT_INVALID

生成命令示例(支持 localhost127.0.0.1):

立即学习go语言免费学习笔记(深入)”;

MedPeer科研绘图
MedPeer科研绘图

生物医学领域的专业绘图解决方案,告别复杂绘图,专注科研创新

下载
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost" -addext "subjectAltName = DNS:localhost,IP:127.0.0.1"
  • Go 代码中仍调用 http.ListenAndServeTLS(":8443", "cert.pem", "key.pem", nil)
  • 浏览器首次访问会提示不安全,需手动点击“高级 → 继续访问”;curl 则加 -k 跳过校验
  • 不要把自签名私钥提交到 Git,尤其不能出现在生产构建镜像中

使用 Let's Encrypt 证书需配合 ACME 客户端(如 certmagic

Go 原生 http.ListenAndServeTLS 不支持自动申请/续期证书。若想零配置跑 HTTPS,推荐用 certmagic 库——它封装了 ACME 协议,能自动向 Let's Encrypt 申请、续订并热加载证书。

只需几行代码:

import "github.com/caddyserver/certmagic"

func main() {
	certmagic.DefaultACME.Agreed = true
	certmagic.DefaultACME.Email = "admin@example.com"
	certmagic.HTTPPort = 80
	certmagic.HTTPSPort = 443

	http.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		w.Write([]byte("Hello over HTTPS!"))
	}))

	log.Fatal(certmagic.HTTPS([]string{"example.com"}, nil))
}
  • 第一次运行会自动监听 :80 完成 HTTP-01 挑战,然后申请证书并监听 :443
  • 证书自动续期(默认提前 30 天),无需重启进程
  • 注意:生产环境必须开放公网 80/443 端口,且域名 DNS 解析指向该服务器

HTTP 重定向到 HTTPS 是常见但易错的配置点

只开 HTTPS 不够,用户可能仍从 http:// 访问。标准做法是在 HTTP 端口启动一个单独的 server,把所有请求 301 重定向到 HTTPS。

典型实现:

go func() {
	http.RedirectHandler("https://"+r.Host+r.RequestURI, http.StatusMovedPermanently)
}() 

http.ListenAndServe(":80", nil)
http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)
  • 两个 ListenAndServe* 必须并发启动(用 go func() {...}()goroutine)
  • 重定向目标中的 r.Host 要确保不含端口(如 example.com:80);生产中建议硬编码域名,避免 Host 头被篡改
  • 某些云厂商(如 AWS ALB)或反向代理已处理重定向,此时 Go 层无需再开 :80
证书路径权限、SAN 字段、ACME 自动化、HTTP→HTTPS 重定向——这四点任一出错都会导致 HTTPS 启动失败或浏览器报错,且错误信息往往藏在日志末尾或客户端控制台里,容易忽略。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

793

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

735

2023.11.06

curl_exec
curl_exec

curl_exec函数是PHP cURL函数列表中的一种,它的功能是执行一个cURL会话。给大家总结了一下php curl_exec函数的一些用法实例,这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。他的返回值成功时返回TRUE, 或者在失败时返回FALSE。

432

2023.06.14

linux常见下载安装工具
linux常见下载安装工具

linux常见下载安装工具有APT、YUM、DNF、Snapcraft、Flatpak、AppImage、Wget、Curl等。想了解更多linux常见下载安装工具相关内容,可以阅读本专题下面的文章。

175

2023.10.30

Go中Type关键字的用法
Go中Type关键字的用法

Go中Type关键字的用法有定义新的类型别名或者创建新的结构体类型。本专题为大家提供Go相关的文章、下载、课程内容,供大家免费下载体验。

234

2023.09.06

go怎么实现链表
go怎么实现链表

go通过定义一个节点结构体、定义一个链表结构体、定义一些方法来操作链表、实现一个方法来删除链表中的一个节点和实现一个方法来打印链表中的所有节点的方法实现链表。

446

2023.09.25

go语言编程软件有哪些
go语言编程软件有哪些

go语言编程软件有Go编译器、Go开发环境、Go包管理器、Go测试框架、Go文档生成器、Go代码质量工具和Go性能分析工具等。本专题为大家提供go语言相关的文章、下载、课程内容,供大家免费下载体验。

249

2023.10.13

0基础如何学go语言
0基础如何学go语言

0基础学习Go语言需要分阶段进行,从基础知识到实践项目,逐步深入。php中文网给大家带来了go语言相关的教程以及文章,欢迎大家前来学习。

698

2023.10.26

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Git 教程
Git 教程

共21课时 | 2.8万人学习

Git版本控制工具
Git版本控制工具

共8课时 | 1.5万人学习

Git中文开发手册
Git中文开发手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号