如何在 ListenAndServeTLS 之前路由 https 请求

在我知道要使用哪些证书文件之前,我需要检查请求主机,该怎么做?

我不能打电话

http.ListenAndServeTLS(":443", "cerfile", "certkey", mux)

因为要使用的证书文件和“mux”取决于请求主机地址,该地址仅在处理程序中可用!

当然我应该只使用 443 端口!

这可以单独使用 http 包来完成吗?


喵喔喔
浏览 125回答 1
1回答

白猪掌柜的

正如 Burak Serdar 评论的那样,您可以自定义GetCertificate返回tls.Config不同主机的特定证书。示例代码mux := http.NewServeMux()    cfg := &tls.Config{        GetCertificate: func(info *tls.ClientHelloInfo) (*tls.Certificate, error) {            // get certificate by info.ServerName        },    }    srv := &http.Server{        Addr:      ":443",        Handler:   mux,        TLSConfig: cfg,    }    fmt.Println(srv.ListenAndServeTLS("defaulttls.crt", "defaulttls.key"))关于如何通过 获取证书ClientHelloInfo,可以参考autocert示例代码
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go