如何在Kong中配置CA证书以解决“unable to verify the first certificate”错误?
问题解决:Kong SSL端点非浏览器客户端证书验证失败
核心原因
浏览器会自动尝试获取缺失的中间/根CA证书以完成信任链验证,但curl、Postman这类非浏览器工具不会主动执行该操作。因此必须让Kong在返回域名证书时完整发送整个信任链(域名证书+中间CA证书+根CA证书),而非仅发送域名证书。
正确配置步骤(Docker Compose环境)
1. 准备完整证书链文件
将域名证书、中间CA证书、根CA证书按指定顺序拼接为单个文件,顺序要求:
- 第一部分:你的域名证书(通常命名为
domain.crt) - 第二部分:中间CA证书(例如
intermediate.crt) - 第三部分:根CA证书(例如
root.crt)
注意:每个证书的-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----标记需完整保留,文件内不要存在多余空格或换行。最终保存为fullchain.crt。
2. 修改Docker Compose配置
无需使用KONG_SSL_CERT_CAFILE(该参数用于Kong作为客户端请求后端服务时的CA信任库,与对外提供SSL服务无关),需将Kong对外的SSL证书配置为上述完整链文件:
services: kong: image: kong:latest environment: # 保留原有其他配置 KONG_SSL_CERT: /container/path/to/fullchain.crt # 替换为容器内证书路径 KONG_SSL_CERT_KEY: /container/path/to/domain.key # 替换为容器内域名私钥路径 volumes: - ./local/certs/folder:/container/path/to/certs # 将本地证书目录挂载到容器对应路径 # 保留原有端口、网络等配置
3. 验证配置生效
重启Kong容器后,用openssl命令测试证书链完整性:
openssl s_client -connect your-kong-endpoint:443
查看输出中的Certificate chain部分,若能依次看到域名证书、中间CA证书、根CA证书的层级信息,说明配置生效,非浏览器工具可正常验证信任链。
无效操作说明
KONG_SSL_CERT_CAFILE:该参数是Kong作为客户端(如转发请求至后端HTTPS服务)时,用于验证后端证书的CA信任库,与对外提供SSL服务的证书链无关。- Kong Manager的「CA Certificates」:此处上传的CA证书用于验证客户端证书(双向SSL场景),不会被发送给请求客户端,因此无法补充服务端证书信任链。
官方配置参考
Kong官方文档中明确要求:服务端对外提供的SSL证书必须包含完整信任链,否则非浏览器客户端会因无法构建完整信任链报错。可在SSL配置章节重点查看ssl_cert参数的使用说明,其要求传入包含完整证书链的文件。
内容的提问来源于stack exchange,提问作者user1048175
相关产品推荐
相关产品推荐

