如何在golang Web服务器上设置HTTPS?

irr*_*lar 4 https go

我正在阅读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
Run Code Online (Sandbox Code Playgroud)

上面的网站要我连接3个.pem我没有的文件.顺便说一下,.pem文件需要连接的原因是什么?使用上面尚未修改的文件,如何在golang网络服务器上设置https?

Ken*_*ant 11

使用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)
Run Code Online (Sandbox Code Playgroud)

这不是一个真正的问题,但中间证书是必需的,因为计算机只存储根证书.通过连接它们,您将它们全部放在一个文件中,以便浏览器获得所有证书 - 这是必需的步骤,否则您的服务器将在某些设备上失败.您的证书提供商将提供执行此操作的说明.对于go,您需要一个证书文件和一个私钥文件.

https://kb.wisc.edu/page.php?id=18923

以下是comodo组合证书的一些说明(与使用哪个服务器无关,流程相同):

https://support.comodo.com/index.php?/Knowledgebase/Article/View/1091/37/certificate-installation--nginx


Eug*_*sky 6

你需要http.ListenAndServeTLS

\n\n
package main\n\nimport (\n    // "fmt"\n    // "io"\n    "net/http"\n    "log"\n)\n\nfunc HelloServer(w http.ResponseWriter, req *http.Request) {\n    w.Header().Set("Content-Type", "text/plain")\n    w.Write([]byte("This is an example server.\\n"))\n    // fmt.Fprintf(w, "This is an example server.\\n")\n    // io.WriteString(w, "This is an example server.\\n")\n}\n\nfunc main() {\nhttp.HandleFunc("/hello", HelloServer)\n    err := http.ListenAndServeTLS(":443", "server.crt", "server.key", nil)\n    if err != nil {\n        log.Fatal("ListenAndServe: ", err)\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

Here\xe2\x80\x99s 是一个片段:https://gist.github.com/denji/12b3a568f092ab951456

\n