需要帮助自动处理Go中的TLS证书吗

需要帮助自动处理Go中的TLS证书吗,go,ssl,certificate,webserver,Go,Ssl,Certificate,Webserver,我有一个简单的Go Web服务器,我希望它使用TLS证书。我知道certbot,python应用程序,并且到目前为止经常使用它,但是我想几乎自动化一切。那是我偶然发现的,非常棒。但是,我似乎无法将它与自定义服务器结构结合使用 srv := http.Server{ ReadTimeout: 1 * time.Second, WriteTimeout: 2 * time.Second, IdleTimeout: 10 * time.Second, ReadHeade

我有一个简单的Go Web服务器,我希望它使用TLS证书。我知道certbot,python应用程序,并且到目前为止经常使用它,但是我想几乎自动化一切。那是我偶然发现的,非常棒。但是,我似乎无法将它与自定义服务器结构结合使用

srv := http.Server{
    ReadTimeout: 1 * time.Second,
    WriteTimeout: 2 * time.Second,
    IdleTimeout: 10 * time.Second,
    ReadHeaderTimeout: 2 * time.Second,
    Handler: router,
    Addr: serverAddr,
}

if fileExists(serverCertFile) && fileExists(serverKeyFile) {
    if err := srv.ListenAndServeTLS(serverCertFile, serverKeyFile); err != nil && err != http.ErrServerClosed {
        panic("Couldn't start server with TLS")
    }
} else {
    if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
        panic("Couldn't start server")
    }
}
到目前为止,我只是使用手动请求的证书来解决这个问题。有什么建议吗?

文档建议使用
Listen()
而不是
HTTPS()
来使用您自己的
http.Server

listener, err := certmagic.Listen([]string{"yourdomain.com"})

srv := http.Server{
    ReadTimeout: 1 * time.Second,
    WriteTimeout: 2 * time.Second,
    IdleTimeout: 10 * time.Second,
    ReadHeaderTimeout: 2 * time.Second,
    Handler: router,
    Addr: serverAddr,
}

srv.Serve(listener)
Listent()的文档

Listen管理domainName的证书并返回TLS侦听器。它使用默认配置。 因为这个便利函数只返回一个启用了TLS的侦听器,并且不假定HTTP也被服务,所以HTTP质询将被禁用。修改包变量Default,以便禁用HTTP质询。 调用此功能表示您接受CA的用户协议和/或服务条款


啊,我看到的是Listen是一个低级TCP侦听器,而不是一个真正的HTTP侦听器。我会试试的。我不知道srv.Serve()函数。你知道使用任意端口而不是443的方法吗?看起来我们无法根据此链接更改端口