前言

这里使用自签CA,SSL证书

CA证书部分

生成CA的私钥

openssl genrsa -out ca.key 2048

生成CA证书

openssl req -x509 -new -nodes -key ca.key -subj "/CN=www.open1.com" -days 3660 -out ca.crt

服务器证书部分

创建服务器私钥

openssl genrsa -out server.key 2048

创建服务器证书签名请求

openssl req -new -key server.key -subj "/CN=www.open1.com" -out server.csr

使用CA颁发证书

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3660 -out server.crt 

# 当前目录下结构
xieruixiang@xieruixiangdeMacBook-Pro testData % ls
ca.crt		ca.key		ca.srl		server.crt	server.csr	server.key

go http service

package main

import (
	"log"
	"net/http"
	"time"
)

func main() {
	mux := http.NewServeMux()
	mux.HandleFunc("/", func(writer http.ResponseWriter, request *http.Request) {
		writer.Write([]byte("ssl/tls"))
	})
	server := &http.Server{
		Addr:         ":2001",
		Handler:      mux,
		WriteTimeout: time.Second * 3,
	}

	server.ListenAndServe()
	//传入ssl证书和服务器私钥
	//非https的使用 server.ListenAndServe() 启动
	log.Fatal(server.ListenAndServeTLS("/Users/xieruixiang/go/src/gateway/testData/server.crt","/Users/xieruixiang/go/src/gateway/testData/server.key"))
}

访问

由于我们证书主体是www.open1.com
需要修改本地host

vim /etc/hosts
# 增加
127.0.0.1 www.open1.com

由于我们的ca证书是不受信任的所以,访问网站会有提示。
火狐可以选择直接跳过,低版本的google浏览器也能选择跳过,高版本需要在提示页面键盘输入:thisisunsafe。当使用https后,发现协议版本也提升到http2了