Go 创建一个HTTPS服务器

示例

生成证书

为了运行HTTPS服务器,需要证书。openssl通过执行以下命令来生成带有的自签名证书:

openssl req -x509 -newkey rsa:4096 -sha256 -nodes -keyoutkey.pem-outcert.pem-subj "/CN=example.com" -days 3650`

参数为:

  • req 使用证书申请工具

  • x509 创建一个自签名证书

  • newkey rsa:4096通过使用具有4096位密钥长度的RSA算法来创建新密钥和证书

  • sha256 强制使用主要浏览器认为安全的SHA256哈希算法(截至2017年)

  • nodes禁用私钥的密码保护。如果没有此参数,则服务器每次启动时都必须询问您密码。

  • keyout 将该文件命名为写入密钥的位置

  • out 将该文件命名为写入证书的位置

  • subj 定义该证书对其有效的域名

  • days该证书应有效期为几天?3650大约。10年。

注意:可以将自签名证书用于内部项目,调试,测试等。任何在那里使用的浏览器都会提到此证书不安全。为了避免这种情况,证书必须由证书颁发机构签名。通常,这不是免费提供的。一个例外是“让我们加密”运动:https://letsencrypt.org

必要的Go代码

您可以使用以下代码来处理服务器的配置TLS。cert.pem和key.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))
}