golang gin 框架的 https 配置


目錄

  1. 概述
  2. https 證書的生成
    1. 第一步:下載證書生成軟件
    2. 第二步:創建測試證書
    3. 第三步:導出證書
    4. 總結
  3. https 證書在 gin 框架中的部署
    1. 構建簡單的 web 服務
    2. 證書轉換
    3. 改成 https 服務

概述

目前, https 幾乎已經是 web 站點的標配了, http 的站點和服務少之又少.
所以, 現在發布站點或者服務, https 是繞不開的一個點.

其實, 發布 https 還是 http, 對代碼來說, 基本沒有變化.
https 難度的更多的是在如何創建和部署 SSL 證書上.

下面, 通過簡單的例子來演示如何將一個簡單 golang gin 服務部署成 https 服務.

https 證書的生成

證書的生成和具體的代碼沒有任何關系.

第一步:下載證書生成軟件

通過 keymanager 來生成證書.

下載安裝 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
http 服務

證書轉換

導出的 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 服務
}

https 服務

注意,這里瀏覽器上顯示【不安全】是因為此 SSL 證書是測試證書,實際項目中使用正式的證書就不會有【不安全】的提示了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM