当前位置: 首页 > news >正文

生成LoadX509KeyPair 需要的证书

生成 LoadX509KeyPair 所需的证书和私钥

要使用 Go 的 tls.LoadX509KeyPair() 函数,你需要准备以下文件:

  1. 服务器证书(PEM 格式,通常为 .crt 或 .pem 文件)

  2. 私钥文件(PEM 格式,通常为 .key 文件)

以下是几种生成这些文件的方法:

方法1:生成自签名证书(测试用途)

# 1. 生成私钥(RSA 2048位)
openssl genrsa -out server.key 2048

# 2. 生成自签名证书(有效期365天)
openssl req -new -x509 -sha256 -key server.key -out server.crt -days 365 -subj "/CN=localhost"
 

方法2:生成带有SAN(Subject Alternative Name)的自签名证书

创建 san.cnf 配置文件:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = localhost

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
IP.1 = 127.0.0.1
 

然后生成证书:

openssl req -x509 -newkey rsa:2048 -keyout server.key -out server.crt -days 365 -config san.cnf -extensions 'v3_req' -nodes
 

方法3:生成证书签名请求(CSR)并让CA签名

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

# 2. 生成CSR
openssl req -new -key server.key -out server.csr -subj "/CN=yourdomain.com"

# 3. 将CSR提交给CA签名,或使用自己的CA签名
 

在Go中使用生成的证书

package main

import (
	"crypto/tls"
	"log"
	"net/http"
)

func main() {
	// 加载证书和私钥
	cert, err := tls.LoadX509KeyPair("server.crt", "server.key")
	if err != nil {
		log.Fatalf("无法加载证书: %v", err)
	}

	// 配置TLS
	config := &tls.Config{
		Certificates: []tls.Certificate{cert},
	}

	// 创建HTTP服务器
	server := &http.Server{
		Addr:      ":443",
		TLSConfig: config,
	}

	// 启动HTTPS服务器
	log.Println("服务器启动,监听 :443...")
	log.Fatal(server.ListenAndServeTLS("", ""))
}
 

验证证书和私钥

# 验证私钥
openssl rsa -in server.key -check

# 查看证书内容
openssl x509 -in server.crt -text -noout

# 验证证书和私钥是否匹配
openssl x509 -noout -modulus -in server.crt | openssl md5
openssl rsa -noout -modulus -in server.key | openssl md5
# 两个输出的MD5应该相同
 

注意事项

  1. 自签名证书浏览器会显示警告,仅适用于开发和测试环境

  2. 生产环境应使用受信任的CA签发的证书

  3. 私钥文件必须严格保护,不要提交到版本控制系统

  4. 证书有效期通常设置为1年,需要定期更新

  5. 对于微服务架构,可以考虑使用服务网格(如Istio)管理证书

这些生成的证书文件可以直接用于Go的LoadX509KeyPair函数来配置TLS服务器或客户端。

相关文章:

  • <tauri><rust><GUI>基于rust和tauri,实现一个svg转png的工具
  • kettle从入门到精通 第九十四课 ETL之kettle MySQL Bulk Loader大批量高性能数据写入
  • FlutterWeb实战:02-加载体验优化
  • DPM(Defects Per Million,每百万缺陷数)和PPM(Parts Per Million,百万分之一)
  • php8属性注解使用教程
  • 前端:开源软件镜像站 / 清华大学开源软件镜像站 / 阿里云 / 网易 / 搜狐
  • leetcode22.括号生成
  • 基于yolov11的汽车损伤检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • MySql之binlog与数据恢复(Binlog and Data Recovery in MySQL)
  • STP --- 生成树协议
  • 动态规划——回文串问题
  • 第32周Java微服务入门 微服务基础
  • 【Nova UI】三、探秘 BEM:解锁前端 CSS 命名的高效密码
  • 不带头结点的单链表插入方法(头插法与尾插法)
  • 嵌入式学习笔记-FLASH,CPU,MPU,MCU,SOC,SOPC,架构,流水线,RAM和ROM,交叉编译
  • 数据治理的专题库
  • uni-app-监控网络请求 插件 - uninetconsoledayer
  • 第十章 文件和异常
  • XPath语法完全指南(实战详解版)
  • Rust闭包详解
  • 用ps做网站首页顶部图片/seo黑帽技术
  • 广州网站制作系统/58精准推广点击器
  • 网站上传的图片怎么做的清晰度/软文广告平台
  • 宜春做网站的公司哪家好/专业网站优化培训
  • 企业网站模板建设/百度搜索推广官网
  • 服务型网站建设/潮州seo