内网项目添加HTTPS支持
公司实施了一些部署在客户内网的项目,思来想去还是用 HTTPS 访问服务器比较好,既解决了很多数据安全的问题,又满足了很多浏览器功能的安全性要求。
实现路径大致如下:
- 创建和签名SSL/TLS证书
- 部署 HTTPS 服务
- 修改 DNS 或客户端 host,让客户端可将域名解析到服务器
- 客户端安装证书
创建和签名 SSL/TLS 证书
CA私钥和自签证书
openssl req -x509 -newkey rsa:4096 -days 25568 -keyout ca-key.pem -out ca-cert.pem -subj "/C=cn/ST=shenzhen/L=shenzhen/O=msj/OU=msj/CN=msj" Enter PEM pass phrase:******
服务器私钥和请求
openssl req -newkey rsa:4096 -nodes -keyout battery-cap-key.pem -out battery-cap-req.pem -subj "/C=cn/ST=shenzhen/L=shenzhen/O=msj/OU=msj/CN=battery-cap.msj" -reqexts SAN -config openssl.cnf
CA 签署服务器证书
openssl ca -in battery-cap-req.pem -md sha256 -days 25568 -keyfile ca-key.pem -cert ca-cert.pem -extensions SAN -config openssl.cnf -out battery-cap-cert.pem
部署 HTTPS 服务
可以先部署静态站点进行测试
battery-cap.msj {
encode zstd gzip
tls /home/caddy/herong/tls/battery-cap-cert.pem /home/caddy/herong/tls/battery-cap-key.pem
handle {
root * /home/caddy/herong/web/dist
file_server
}
}
手动修改host
C:\Windows\System32\drivers\etc\hosts
192.168.34.197 battery-cap.msj
客户端手动安装证书
自动修改host、安装证书
通过一个程序将修改 host 文件和安装证书两件事情放到一起,方便实施同事交付。
func main() {
domain := "battery-cap.msj"
address := "192.168.34.197"
cert := "msj-cert.pem"
// 日志
file, err := os.Create("证书安装.log")
if err != nil {
MessageBoxPlain("提示", "失败")
log.Fatal(err)
}
defer file.Close()
logger := log.New(file, "", log.LstdFlags)
// 参数回显
logger.Println("域名:" + domain)
logger.Println("地址:" + address)
logger.Println("证书:" + cert)
// 改host
logger.Println("修改 host 文件")
hostFile, err := os.OpenFile("C:/Windows/System32/drivers/etc/hosts", os.O_WRONLY|os.O_APPEND, 0600)
if err != nil {
MessageBoxPlain("提示", "失败")
logger.Fatal(err)
return
}
defer hostFile.Close()
hostFile.WriteString(address + " " + domain + "\n")
logger.Println("ok")
// 安装证书
logger.Println("安装证书")
cmd := exec.Command("cmd", "/C", "certmgr.exe /c /add "+cert+" /s root")
output, err := cmd.CombinedOutput()
if err != nil {
MessageBoxPlain("提示", "失败")
logger.Fatal(err)
}
logger.Println(output)
logger.Println("ok")
MessageBoxPlain("提示", "完成")
}
内网项目添加HTTPS支持
https://vitsumoc.github.io/内网项目添加HTTPS支持.html