2023年12月7日发(作者:)
Golang代码实现HTTPs(HTTPS证书生成和部署)
在win7下试试:
1.实现一个最简单的HTTPS Web Server
// gohttps/2-https/
package main
import (
"fmt"
"net/http"
)
func handler(w seWriter, r *t) {
f(w,
"Hi, This is an example of https service in golang!")
}
func main() {
Func("/", handler)
AndServeTLS(":8081", "",
"", nil)
}
上述代码无法正常运行,因为没有和
2、安装openssl
注:我是直接下载安装了,略过了下面的2.2和2.3
解压,找到openssl-1.0.1japps目录,拷贝demoCA目录和文件到Openssl的安装目录下的bin目录下(即
D:OpenSSL-Win64bin)。
2.3、在D:OpenSSL-Win64bin目录下,创建ca、jks、server、client四个目录。
3、生成 和
3.1 生成
openssl genrsa -out 2048
注:因为懒得加环境变量,我是在D:OpenSSL-Win64bin目录下执行的openssl
3.2生成
openssl req -new -x509 -key -out -days 3650
按照给出的提示依次输入:CN BJ 等,如下:
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:BJ
Locality Name (eg, city) []:BJ
Organization Name (eg, company) [Internet Widgits PtyLtd]:ple
Organizational Unit Name (eg, section) []:live
Common Name (eg, YOUR name) []:root
Email Address []:
---------------------
4.将生成的和剪切复制到第一步的go程序所在目录,运行go程序
5.打开chrome浏览器访问 localhost:8081
什么?竟然提示该网页无法正常运作!
又提示“您的连接不是私密连接”,忽略,终于显示Hi, This is an example of https service in golang!
也算是基本打通了https。然而,浏览器地址栏上大大的红色“不安全”字样看着不舒服。怎么办?
办法1:花钱申请证书或免费证书
办法2:自签证书,在客户端,将证书导入到“受信任的根证书颁发机构”存储区中
另外,还可以双向验证。
补充:
6.符合Chrome58+的证书制作(费了不少劲)
6.1将 C: 复制到 F:SSLTest, 并在F:SSLTest执行以下命令
mkdir demoCAprivate demoCAnewcerts
type nul >
echo 01 > demoCAserial
6.2生成CA自签名证书
openssl req -new -x509 -newkey rsa:2048 -days 3650 -keyout -out -passout pass:123456 -config
依次输入 CN bj0 bj1 bj2 MyRootCA 空(回车)
6.3生成用户的 RSA 密钥对
openssl genrsa -des3 -out ._has_ -passout pass:123456
6.4 删除私钥中的密码(否则golang程序无法启动)
openssl rsa -in ._has_ -out
6.5生成用户证书请求
openssl req -new -days 1825 -key -out -config
依次输入 123456 CN bj0 bj1 bj2 bjbj 空(回车) 空(回车) 空(回车)(注意与6.2的相关输入内容保持一样)
6.6使用 CA 签发用户证书
openssl ca -in -out -cert -keyfile -extensions v3_req -config
依次输入 123456 y y
6.7验证
在C:WindowsSystem32driversetchosts中新增一行
127.0.0.1
然后将 安装到 受信任的根证书颁发机构
将和放到golang源代码目录下
补充:有的源码不是用.crt 和.key格式的证书和私钥,而都是用.pem后缀的。有的说法是.crt后缀可直接改为.pem,而.key可以转换格式,
如:openssl rsa -in id_rsa -text > 。
但我没有测试。
重点来了
自签名不推荐,自己是自己拥有域名的话,直接去腾讯云签一个时长一年的专业CA机构签发的dv类型证
书就完事了
最后,听说go https 在速度上不如Nginx + go http 方式


发布评论