建立 HTTPS 伺服器

生成證書

要執行 HTTPS 伺服器,必須提供證書。使用 openssl 生成自簽名證書是通過執行以下命令完成的:

openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyout key.pem -out cert.pem -subj "/CN=example.com" -days 3650`

引數是:

  • req 使用證書申請工具
  • x509 建立自簽名證書
  • newkey rsa:4096 使用帶有 4096 位金鑰長度的 RSA 演算法建立新金鑰和證書
  • sha256 強制主要瀏覽器認為安全的 SHA256 雜湊演算法(2017 年)
  • nodes 禁用私鑰的密碼保護。如果沒有此引數,你的伺服器每次啟動時都必須要求你輸入密碼。
  • keyout 命名檔案的寫入位置
  • out 將檔案命名為寫入證書的位置
  • subj 定義此證書有效的域名
  • days 這個證書應該有多少天有效? 3650 約。10 年。

注意:自簽名證書可用於內部專案,除錯,測試等。任何瀏覽器都會提到,此證書不安全。為了避免這種情況,證書必須由證書頒發機構簽名。大多數情況下,這是免費的。一個例外是“Let’s Encrypt”運動: https//letsencrypt.org

必要的 Go 程式碼

你可以使用以下程式碼處理伺服器的配置 TLS。cert.pemkey.pem 是你的 SSL 證書和金鑰,使用上述命令生成。

package main

import (
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("Hello, world!"))
    })

    log.Fatal(http.ListenAndServeTLS(":443","cert.pem","key.pem", nil))
}