由于缺少证书或不受信任的证书而导致AEM SSL证书验证错误
当Java运行时、AEM truststore或本地开发环境不信任远程服务器证书链时,Adobe Experience Manager (AEM)出站HTTPS和mTLS连接会失败。 当所需的根证书或中间证书缺失、证书链不完整、SSL拦截引入不可信证书或Java升级后信任关系更改时,会发生此问题。 要解决此问题,请验证证书、更新信任库以及验证连接性。
描述 description
环境
Adobe Experience Manager as a Cloud Service (AEMaaCS)
问题/症状
- 应用程序日志显示javax.net.ssl.SSLHandshakeException: PKIX路径生成失败,表示Java无法生成到远程端点的受信任证书路径。
- 本地开发工具(如aio CLI或节点获取显示
SELF_SIGNED_CERT_IN_CHAIN)指示SSL链中存在不受信任的证书。 - 由于证书链不完整,在访问受保护端点时,浏览器显示您的连接不是专用的。
- 本地开发环境显示无法获取本地颁发者证书,这表示本地信任存储不信任证书链。
- 即使KeyStore配置显示正确,出站mTLS调用也会失败。
根本原因
出现此问题的原因是AEM或基础Java运行时不信任远程服务器证书链。 缺少根证书颁发机构或中间证书颁发机构、证书上载不完整、SSL检查代理、Java信任存储更改以及本地SDK信任验证失败会阻止SSL握手验证成功。
解决方法 resolution
按照以下步骤识别和解决SSL证书信任问题:
- 通过查看AEM日志、Cloud Manager CLI输出、JVM栈栈跟踪或消息的本地开发日志来识别证书验证错误,例如PKIX路径构建失败或SELF_SIGNED_CERT_IN_CHAIN。
- 通过运行
openssl s_client -showcerts -connect <host>:443提取远程服务器证书链,并验证链中的所有证书是否都已返回。 - 通过确定问题是由缺少证书、链不完整、SSL拦截、浏览器信任问题还是本地开发信任验证失败引起的,从而确定故障类别。
- 将缺失的根证书和中间证书添加到AEM truststore。 对于AEM as a Cloud Service,通过全局信任库导入证书。 对于AMS或内部部署环境,请使用keytool将证书导入Java信任库。
- 当基于浏览器的证书警告指示链不完整时,上载包含叶、中间和根证书的完整证书链。
- 通过将所需的公司CA证书添加到本地操作系统或Node.js truststore来解决本地开发证书问题。
- 在AMS或内部部署环境中进行信任存储更新后,重新启动AEM实例或Java进程,以便成功加载更新的证书。
- 使用SSLPoke或应用程序级别API调用验证出站连接,并验证SSL握手故障是否不再发生。
- 通过确认出站连接成功、SSLHandshakeException错误不再出现在日志中,并且证书验证成功完成来验证解决方案。
何时上报
- 即使truststore包含所需的证书,SSL握手故障仍会继续。
- 证书链看起来很完整,但出站连接继续失败。
- 无法在该环境中验证或信任SSL检查或代理证书。
- 在信任库更新和连接验证后,出站SSL验证仍然不成功。
相关阅读
recommendation-more-help
experience-cloud-kcs-help-kbarticles