我正在阅读https://www.kaihag.com/https-and-go/并从Comodo购买了SSL证书,他们通过电子邮件向我发送了.zip
个文件。到目前为止,我所有的文件都是这样的
csr.pem
private-key.pem
website.com.crt
website.com.ca-bundle
website.com.zip
上面的网站要我连接我没有的3 .pem
个文件。顺便提一下,.pem
文件需要连接的原因是什么?使用上面尚未修改的文件,如何在golang网络服务器上设置https?
答案 0 :(得分:8)
使用https://golang.org/pkg/net/http/#ListenAndServeTLS
http.HandleFunc("/", handler)
log.Printf("About to listen on 10443. Go to https://127.0.0.1:10443/")
err := http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
log.Fatal(err)
这不是一个真正的问题,但中间证书是必需的,因为计算机只存储根证书。通过连接它们,您将它们全部放在一个文件中,以便浏览器获得所有证书 - 这是必需的步骤,否则您的服务器将在某些设备上失败。您的证书提供商将提供执行此操作的说明。对于go,您需要一个证书文件和一个私钥文件。
https://kb.wisc.edu/page.php?id=18923
以下是comodo组合证书的一些说明(与使用哪个服务器无关,流程相同):
答案 1 :(得分:1)
您需要http.ListenAndServeTLS
package main
import (
// "fmt"
// "io"
"net/http"
"log"
)
func HelloServer(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Content-Type", "text/plain")
w.Write([]byte("This is an example server.\n"))
// fmt.Fprintf(w, "This is an example server.\n")
// io.WriteString(w, "This is an example server.\n")
}
func main() {
http.HandleFunc("/hello", HelloServer)
err := http.ListenAndServeTLS(":443", "server.crt", "server.key", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
答案 2 :(得分:0)
库https://github.com/adrianosela/sslmgr抽象了密钥和证书的整个概念。您所需要做的就是使主机名可以访问服务器(即您的DNS必须将yourdomain.com指向your-public-ip)。您甚至可以为本地开发禁用SSL,如下所示:
ss, err := sslmgr.NewServer(sslmgr.ServerConfig{
Hostnames: []string{os.Getenv("yourdomain.com")},
Handler: h,
ServeSSLFunc: func() bool {
return strings.ToLower(os.Getenv("PROD")) == "true"
},
})
if err != nil {
log.Fatal(err)
}
ss.ListenAndServe()
答案 3 :(得分:0)
这是我的发现,我想分享一下,因为我花了几个小时,因为所有可用的安装指南都是针对Nginx和Apache HTTP配置的,而不是针对Golang Web服务器的。
环境:
问题:
解决方案:
解决方案是使用文本编辑器连接以下证书,并根据需要命名。我将其保存为“ my_domain.txt”。
然后像这样运行它,
router.RunTLS(":"+os.Getenv("PORT"), "../my_domain.txt", "../my_private_key.txt")
希望它有所帮助!