https 实践篇
基于https原理篇,这篇文章将会用openssl 工具以及golang程序来演示下https加解密过程。 依据前文已经知道 声明一个https服务需要为其颁发证书已经它的私钥。
生成服务器私钥
openssl genrsa -out server.key 2048
生成x509证书
openssl req -new -x509 -key server.key -out server.crt -days 3650
server.crt 就是我们的自签名证书了,然后启动go https服务
启动go https服务
package main
import (
"log"
// "fmt"
// "io"
"net/http"
)
func HelloServer(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/plain")
w.Write([]byte("This is an example server.\n"))
// fmt.Fprintf(w, "This is an example server.\n")
// io.WriteString(w, "This is an example server.\n")
}
func main() {
http.HandleFunc("/hello", HelloServer)
err := http.ListenAndServeTLS(":443", "server.crt", "server.key", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
先测试下访问
(base) ➜ ~ curl https://proxy.example.com:443/hello
curl: (60) SSL certificate problem: self signed certificate
More details here: https://curl.se/docs/sslcerts.html
curl 提示是自签名证书,因为我们使用的openssl 按x509标准生成的证书,不是ca颁发的,所以curl有这个错误。
让系统信任该证书
不同操作系统添加信任的方式不同,我使用的是mac os,在钥匙串应用里将证书添加进来并设置为信任。 注意这里我设置了证书的域名是proxy.example.com ,所以我还需要设置下这个域名对应的ip
设置域名
vim /etc/hosts
255.255.255.255 broadcasthost
127.0.0.1 localhost
::1 localhost
## 添加上这行
127.0.0.1 proxy.example.com
再次访问
(base) ➜ ~ curl https://proxy.example.com:443/hello
This is an example server.
完美收工。。。