带有多个证书的http.ListenAndServeTLS

Mat*_*ner 4 ssl https go

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

Jim*_*imB 10

http.ListenAndServeTLS意味着提供一个简单的最小配置.如果要添加其他选项,可以http.Server使用自定义创建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("", "")
Run Code Online (Sandbox Code Playgroud)