创建 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))
}