API Gateway mTLS配置异常:非信任CA证书可通过请求
API Gateway mTLS验证失效问题诊断与解决
核心原因
你在curl请求中错误地使用了**证书签名请求(CSR)**而非CA签发完成的客户端证书,这是导致非信任CA签发的请求被放行的关键。
错误操作分析
你的curl命令传入的是.csr文件(如john.csr、marta.csr):
curl --cert john.csr --key john.key myapi.com/test
CSR只是用于向CA申请签名的请求文件,本身不包含CA的有效签名,不属于合法的客户端证书。API Gateway的mTLS验证逻辑在收到无效的"证书"(CSR)时,没有触发完整的信任链校验,导致请求被意外放行。
正确操作步骤
使用CA签发后的客户端证书文件(.pem)作为--cert参数的值:
- 对于John的合法证书,执行:
curl --cert john.pem --key john.key myapi.com/test
此时请求会正常通过,因为John的证书由信任库中的RootCA签发。
- 对于Marta的证书,执行:
curl --cert marta.pem --key marta.key myapi.com/test
此时请求会被拒绝,因为Marta的证书由未在信任库中的RootCA-2签发,符合预期的mTLS验证逻辑。
额外验证建议
可以先检查证书文件的有效性,确认是已签名的证书而非CSR:
openssl x509 -in john.pem -text -noout
该命令会输出证书的完整信息(包括签发CA、有效期等),而如果是CSR文件,执行openssl req -in john.csr -text -noout才会输出内容,以此区分两种文件。
内容的提问来源于stack exchange,提问作者Gonzalo
相关产品推荐
相关产品推荐

