一尘不染

具有多个证书的http.ListenAndServeTLS

go

如何使用多个域的ListenAndServeTLS?我看到该函数接受证书和密钥文件,但是我相信密钥文件可能只包含一个私钥。我有一些私钥,用于不同的证书链。


阅读 324

收藏
2020-07-02

共1个答案

一尘不染

http.ListenAndServeTLS旨在提供一种基本的最小配置。如果您想添加其他选项,则可以http.Server使用custom
创建一个tls.Config。然后,您可以在中手动映射名称tls.Config.NameToCertificate,也可以调用BuildNameToCertificate()以编程方式构建地图。

Server.ListenAndServeTLS但是,您仍然可以使用,因为它将加载配置文件中的证书以及通过args方法传入的证书。

cfg := &tls.Config{}

cert, err := tls.LoadX509KeyPair("cert_one.pem", "key_one.pem")
if err != nil {
    log.Fatal(err)
}

cfg.Certificates = append(cfg.Certificates, cert)
// keep adding remaining certs to cfg.Certificates

cfg.BuildNameToCertificate()

server := http.Server{
    Addr:      "127.0.0.1:443",
    Handler:   myHandler,
    TLSConfig: cfg,
}

server.ListenAndServeTLS("", "")
2020-07-02