为运行在AWS Lambda中的Go HTTP API执行mTLS



目前有一个Go HTTP API使用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 Lambda兼容,我似乎需要使用类似github.com/apex/gateway的东西,但只有一个ListenAndServe函数,而不是像net/http包那样使用ListenAndServeTLS

有可能在AWS Lambda函数中执行这样的mTLS吗?

或者,这是否需要重写以在API网关内执行mTLS?如果是,是否可以将证书转发到Go app/Lambda功能以检查CN?

是否可以在AWS Lambda中执行这样的mTLS作用

不,这是不可能的。TLS连接由API网关终止,然后网关通过AWS API调用您的Lambda函数。Lambda函数从不具有来自传入请求的网络连接,因此无法在Lambda函数内部执行mTLS。

或者这是否需要重写才能在API中执行mTLS网关?如果是,是否可以将证书转发到用于检查CN的Go应用程序/Lambda功能?

是的,必须在API网关上实现mTLS功能。我建议遵循这份官方指南。

最新更新