生成LoadX509KeyPair 需要的证书
生成 LoadX509KeyPair
所需的证书和私钥
要使用 Go 的 tls.LoadX509KeyPair()
函数,你需要准备以下文件:
-
服务器证书(PEM 格式,通常为
.crt
或.pem
文件) -
私钥文件(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应该相同
注意事项
-
自签名证书浏览器会显示警告,仅适用于开发和测试环境
-
生产环境应使用受信任的CA签发的证书
-
私钥文件必须严格保护,不要提交到版本控制系统
-
证书有效期通常设置为1年,需要定期更新
-
对于微服务架构,可以考虑使用服务网格(如Istio)管理证书
这些生成的证书文件可以直接用于Go的LoadX509KeyPair
函数来配置TLS服务器或客户端。