2 回答
TA贡献1796条经验 获得超7个赞
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("", "")
TA贡献1876条经验 获得超7个赞
我自己不是 Go 用户,但是如果您想在同一个 TLS 侦听器上使用多个证书,您必须有某种方法来决定在客户端连接后应使用哪个证书,因为在 TLS 握手中只能发送一个证书 + 链.
其主要用例是服务器名称指示 (SNI)。使用 SNI,您有多个证书,您希望根据客户端在 TLS 握手中要求的名称选择合适的证书。
在2013年的这篇文章中搜索go sni 服务器结果。这篇文章表明,在 ListenAndServeTLS 中使用多个证书是不可能的(或者是在 2013 年),但它也展示了如何实现必要的功能。
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报