一尘不染

如何为Go服务器应用程序设置Let's Encrypt

go

我有自己的域名,使用Go编写了Web服务。我正在使用内置的Go Web服务器,前面没有Nginx或Apache。

我想开始通过HTTPS服务,我意识到让我们加密即将成为实现此目的的途径。

任何人都可以共享配置在Linux服务器上运行的Go应用程序的整个设置过程吗?


阅读 207

收藏
2020-07-02

共1个答案

一尘不染

这是使用我发现的Go and Let’s Encrypt证书对HTTPS服务器进行的最小自动设置:

package main

import (
    "crypto/tls"
    "log"
    "net/http"

    "golang.org/x/crypto/acme/autocert"
)

func main() {
    certManager := autocert.Manager{
        Prompt:     autocert.AcceptTOS,
        HostPolicy: autocert.HostWhitelist("example.com"), //Your domain here
        Cache:      autocert.DirCache("certs"),            //Folder for storing certificates
    }

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

    server := &http.Server{
        Addr: ":https",
        TLSConfig: &tls.Config{
            GetCertificate: certManager.GetCertificate,
        },
    }

    go http.ListenAndServe(":http", certManager.HTTPHandler(nil))

    log.Fatal(server.ListenAndServeTLS("", "")) //Key and cert are coming from Let's Encrypt
}

有关autocert软件包的更多信息:链接

编辑:由于letencrypt安全性问题,需要使http可用,在此处了解更多信息。作为此修复程序的奖励,我们现在具有http->
https重定向。如果您已收到旧示例的证书,则旧示例将继续工作,但是对于新站点,它将中断。

2020-07-02