当前有一个Go HTTP,它使用github.com/gin-gonic/gin库来执行mTLS,如下所示:
router := gin.New()
router.GET("/ping", handlers.GinHandler{GC: globalConf, H: handler.Ping}.Handle())
// I'm checking errors but just for simplicity it's ommitted
caCert, _ := ioutil.ReadFile("ca.crt")
caCertPool, _ := x509.SystemCertPool()
caCertPool.AppendCertsFromPEM(caCert)
tlsConfig := &tls.Config{
ClientCAs: caCertPool,
ClientAuth: tls.RequireAndVerifyClientCert,
}
server := &http.Server{
Addr: ":" + "8443",
TLSConfig: tlsConfig,
Handler: router,
}
server.ListenAndServeTLS("ssl.crt", "ssl.key")为了与AWS兼容,我似乎需要使用类似于github.com/apex/gateway的东西,但是只有一个ListenAndServe函数,而不是像net/http包那样的ListenAndServeTLS。
在AWS函数中可以这样执行mTLS吗?
还是需要重写以在API中执行mTLS呢?如果是的话,是否可以将证书转发到Go app/Lambda函数以检查CN?
发布于 2022-10-07 13:58:50
在AWS函数中可以这样执行mTLS吗?
不不可能。TLS连接由API网关终止,然后通过AWS调用Lambda函数。Lambda函数从来没有来自传入请求的网络连接,因此无法在Lambda函数中执行mTLS。
还是需要重写以在API中执行mTLS呢?如果是的话,是否可以将证书转发到Go app/Lambda函数以检查CN?
是的,mTLS特性必须在API上实现。我建议跟随这份官方指南。
https://stackoverflow.com/questions/73988139
复制相似问题