如何在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的组合证书一些指令(没关系使用哪个服务器,该过程是相同的):

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

你需要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) 
    } 
} 

这里有一个片段:https://gist.github.com/denji/12b3a568f092ab951456

+0

是的,但IIRC不server.crt必须通过连接文件一起创建?我可能会记住错误 – irregular

+0

如果我得到了这些是发行人的证书。包括这些证书和创建捆绑包是好的,因为如果没有访问完整的链,浏览器(以前版本的Firefox)不接受您的正确证书。你可以从Chrome浏览器开始调试所有的东西。然后将所有证书加入到捆绑包中并进行部署 –