目錄
- 概述
- https 證書的生成
- 第一步:下載證書生成軟體
- 第二步:創建測驗證書
- 第三步:匯出證書
- 總結
- https 證書在 gin 框架中的部署
- 構建簡單的 web 服務
- 證書轉換
- 改成 https 服務
概述
目前, https 幾乎已經是 web 站點的標配了, http 的站點和服務少之又少.
所以, 現在發布站點或者服務, https 是繞不開的一個點.
其實, 發布 https 還是 http, 對代碼來說, 基本沒有變化.
https 難度的更多的是在如何創建和部署 SSL 證書上.
下面, 通過簡單的例子來演示如何將一個簡單 golang gin 服務部署成 https 服務.
https 證書的生成
證書的生成和具體的代碼沒有任何關系.
第一步:下載證書生成軟體
通過 keymanager 來生成證書.
下載安裝 keymanager 之后, 打開界面如下:

這里面有 1 個證書, 是我之前創建的, 新安裝之后應該是空的.
這時, 你可以點擊 【創建測驗證書】 創建一個測驗證書來實驗發布 https 服務,
也可以點擊 【證書申請】,申請一個真正的 https 證書(需要 freeSSL 帳號,也是免費的)
第二步:創建測驗證書
本文主要演示 https 服務的發布程序,避免多余的步驟,所以使用測驗證書,用真實證書的也一樣,只是申請的程序有區別,
點擊 【創建測驗證書】之后,只要輸入域名,然后點擊下面的【創建證書】按鈕即可,


第三步:匯出證書
在證書串列頁面點擊【更多】,選擇【匯出證書】

選擇 IIS 格式,并且輸入密鑰,作為測驗我輸入的是【12345678】

總結
借助 keymanager 工具,證書的制作非常簡單,到這里為止,證書就算制作完成并匯出了,
https 證書在 gin 框架中的部署
構建簡單的 web 服務
為了驗證證書是否可用,創建一個簡單的基于 gin 框架的 web 服務,
package main
import (
"strconv"
"github.com/gin-gonic/gin"
"github.com/unrolled/secure"
)
func main() {
GinHttps(false) // 這里false 表示 http 服務,非 https
}
func GinHttps(isHttps bool) error {
r := gin.Default()
r.GET("/test", func(c *gin.Context) {
c.String(200, "test for 【%s】", "https")
})
if isHttps {
r.Use(TlsHandler(8000))
return r.RunTLS(":"+strconv.Itoa(8000), "/path/to/test.pem", "/path/to/test.key")
}
return r.Run(":" + strconv.Itoa(8000))
}
func TlsHandler(port int) gin.HandlerFunc {
return func(c *gin.Context) {
secureMiddleware := secure.New(secure.Options{
SSLRedirect: true,
SSLHost: ":" + strconv.Itoa(port),
})
err := secureMiddleware.Process(c.Writer, c.Request)
// If there was an error, do not continue.
if err != nil {
return
}
c.Next()
}
}
剛開始,以 http 的方式運行,啟動后再瀏覽器輸入 http://localhost:8000/test

證書轉換
匯出的 IIS 格式的證書無法直接使用,使用以下命令轉換出相應的 pem 和 key 檔案即可,
openssl pkcs12 -in test.pfx -nocerts -out key.pem -nodes
openssl pkcs12 -in test.pfx -nokeys -out test.pem
openssl rsa -in key.pem -out test.key
test.pfx 是我們匯出的證書,如果不是這個名字,替換成你匯出的證書名字即可,
使用的命令需要安裝 openssl 工具,
改成 https 服務
只需將 main 函式中的呼叫引數改成 true 即可,其他不用變,
注意上面步驟轉換出的 pem 和 key 檔案的路徑要放對,
func main() {
GinHttps(true) // 這里true 表示 https 服務
}

注意,這里瀏覽器上顯示【不安全】是因為此 SSL 證書是測驗證書,實際專案中使用正式的證書就不會有【不安全】的提示了,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/271822.html
標籤:Go
上一篇:“竟想替代 C 語言?編程語言Go、Rust、C++ 和 Zig 生產力對比!
下一篇:一文簡述Java IO
