0

0

如何使用Golang实现HTTPS服务_配置TLS证书和安全通信

P粉602998670

P粉602998670

发布时间:2025-12-25 13:35:02

|

298人浏览过

|

来源于php中文网

原创

Go 语言通过 net/http 包原生支持 HTTPS 和 HTTP/2,只需提供合法 TLS 证书与私钥,调用 http.ListenAndServeTLS 即可启动安全服务;开发可用自签名证书,生产推荐 Let’s Encrypt;需注意证书格式、路径权限、端口配置及重定向设置。

如何使用golang实现https服务_配置tls证书和安全通信

Go 语言内置的 net/http 包原生支持 HTTPS,只需提供合法的 TLS 证书和私钥文件,就能快速启动安全的 HTTP/2 服务。关键在于证书加载正确、端口使用 443(或开发时用 8443)、并避免明文 HTTP 混合暴露。

准备有效的 TLS 证书和私钥

HTTPS 必须有 X.509 格式的证书(.crt.pem)与对应私钥(.key)。生产环境建议使用 Let’s Encrypt 签发的免费证书;本地开发可自签名:

  • 生成自签名证书(终端执行):
    openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes -subj "/CN=localhost"
  • 确保 cert.pem 包含完整证书链(如含中间证书,需合并到同一文件)
  • 私钥文件必须是 PEM 格式且无密码保护(Go 不支持带密码的私钥自动解密)

启动 HTTPS 服务:使用 http.ListenAndServeTLS

调用 http.ListenAndServeTLS,传入监听地址、证书路径和私钥路径:

package main

import ( "log" "net/http" )

func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("Hello over HTTPS!")) })

log.Println("HTTPS server starting on :8443")
log.Fatal(http.ListenAndServeTLS(":8443", "cert.pem", "key.pem", nil))

}

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

NanoAI
NanoAI

AI绘画与智能图片编辑平台

下载

注意:
- 地址不能省略端口(如 ":8443"),否则默认为 443,需 root 权限;
- 若证书不匹配域名或格式错误,启动会直接 panic 并报错;
- 第四个参数为 http.Handler,传 nil 表示使用默认的 http.DefaultServeMux

启用 HTTP/2 和强制 HTTPS 重定向

Go 1.8+ 默认启用 HTTP/2(只要证书有效、客户端支持),无需额外配置。但常见需求是将 HTTP 请求自动跳转到 HTTPS:

  • 另启一个 HTTP 服务监听 80 端口,返回 301 重定向:
go func() {
    log.Println("HTTP redirect server starting on :80")
    log.Fatal(http.ListenAndServe(":80", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        target := "https://" + r.Host + r.URL.Path
        if len(r.URL.RawQuery) > 0 {
            target += "?" + r.URL.RawQuery
        }
        http.Redirect(w, r, target, http.StatusMovedPermanently)
    })))
}()
  • 生产部署时,也可用反向代理(如 Nginx)统一处理 TLS 终止和重定向,Go 后端跑纯 HTTP

进阶:自定义 TLS 配置(如限制协议版本或加密套件)

若需精细控制 TLS 行为(例如禁用 TLS 1.0、指定加密算法),应使用 http.Server 结合 tls.Config

srv := &http.Server{
    Addr: ":8443",
    Handler: http.DefaultServeMux,
    TLSConfig: &tls.Config{
        MinVersion: tls.VersionTLS12,
        CurvePreferences: []tls.CurveID{tls.CurveP256, tls.X25519},
        // 可选:设置 SessionTicketsDisabled 或 ClientAuth
    },
}

log.Println("HTTPS server with custom TLS config starting...") log.Fatal(srv.ListenAndServeTLS("cert.pem", "key.pem"))

注意:
- TLSConfig 中的 Certificates 字段通常不用手动设置(ListenAndServeTLS 内部已加载);
- 修改 MinVersionCipherSuites 前,建议用 SSL Labs 测试工具 验证兼容性。

不复杂但容易忽略:证书路径必须是运行时可读的绝对或相对路径;开发中常因文件权限、路径拼写或证书过期导致启动失败。建议首次运行前用 openssl x509 -in cert.pem -text -noout 检查证书有效性。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

173

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

224

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

334

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

204

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

387

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

193

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

184

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

191

2025.06.17

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

10

2025.12.24

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
HTML5/CSS3/JavaScript/ES6入门课程
HTML5/CSS3/JavaScript/ES6入门课程

共102课时 | 6.5万人学习

前端基础到实战(HTML5+CSS3+ES6+NPM)
前端基础到实战(HTML5+CSS3+ES6+NPM)

共162课时 | 18.4万人学习

第二十二期_前端开发
第二十二期_前端开发

共119课时 | 12.1万人学习

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

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