猿问

具有多个证书的 http.ListenAndServeTLS

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


万千封印
浏览 159回答 2
2回答

芜湖不芜

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.Certificatescfg.BuildNameToCertificate()server := http.Server{    Addr:      "127.0.0.1:443",    Handler:   myHandler,    TLSConfig: cfg,}server.ListenAndServeTLS("", "")

幕布斯6054654

我自己不是 Go 用户,但是如果您想在同一个 TLS 侦听器上使用多个证书,您必须有某种方法来决定在客户端连接后应使用哪个证书,因为在 TLS 握手中只能发送一个证书 + 链.其主要用例是服务器名称指示 (SNI)。使用 SNI,您有多个证书,您希望根据客户端在 TLS 握手中要求的名称选择合适的证书。在2013年的这篇文章中搜索go sni 服务器结果。这篇文章表明,在 ListenAndServeTLS 中使用多个证书是不可能的(或者是在 2013 年),但它也展示了如何实现必要的功能。
随时随地看视频慕课网APP

相关分类

Go
我要回答