如何在golang web服务器上设置HTTPS?
问题描述:
我在阅读https://www.kaihag.com/https-and-go/并从Comodo购买了SSL证书,他们通过电子邮件发送给我一个.zip
文件。所有的文件我迄今这个样子如何在golang web服务器上设置HTTPS?
csr.pem
private-key.pem
website.com.crt
website.com.ca-bundle
website.com.zip
以上网站要我来连接3个.pem
文件,我没有。顺便提一下,.pem
文件需要连接的原因是什么?使用上述未被修改的文件,https如何在golang web服务器上设置?
答
使用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)
这是不是一个真正的去的问题,但是中间证书是必需的,因为电脑只存储根证书。通过连接它们,您可以将它们全部放入一个文件中,以便浏览器获得所有证书 - 这是必需的步骤,否则您的服务器将在某些设备上失败。您的证书提供商将为此提供说明。为了去你需要一个证书文件和一个私钥文件。
https://kb.wisc.edu/page.php?id=18923
下面是COMODO的组合证书一些指令(没关系使用哪个服务器,该过程是相同的):
答
你需要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)
}
}
是的,但IIRC不server.crt必须通过连接文件一起创建?我可能会记住错误 – irregular
如果我得到了这些是发行人的证书。包括这些证书和创建捆绑包是好的,因为如果没有访问完整的链,浏览器(以前版本的Firefox)不接受您的正确证书。你可以从Chrome浏览器开始调试所有的东西。然后将所有证书加入到捆绑包中并进行部署 –