You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS EMR连接MongoDB时遭遇TLS错误求助

排查TLS握手错误(SAN不匹配)的原因

核心问题定位

从你导出的证书SAN信息里能看到重复的DNS:前缀:比如DNS:DNS:impl-stable-v4-mongodb0.ams-np-v4.internal.stuff.org,正确格式应为DNS:impl-stable-v4-mongodb0.ams-np-v4.internal.stuff.org。这种格式错误会导致Java的SSL验证无法识别这些SAN条目,进而触发匹配失败的报错。

具体排查与修复步骤

1. 确认证书本身的SAN格式问题

Java的X.509证书解析器仅识别DNS:<域名>格式的SAN条目,重复的DNS:前缀会让解析器把整个DNS:impl-stable-v4-mongodb0.ams-np-v4.internal.stuff.org当成一个完整域名,自然无法匹配实际的impl-stable-v4-mongodb0.ams-np-v4.internal.stuff.org。

2. 验证导入与导出的证书一致性

你导入证书时使用的别名是impl-stable.crt,但导出验证时用的是certs/impl-stable.crt,可能存在证书混淆。请用导入时的别名重新导出验证:

keytool -list -rfc -keystore /usr/lib/jvm/java/jre/lib/security/cacerts -alias impl-stable.crt

3. 确认EMR集群JVM证书路径匹配

AWS EMR不同版本可能使用不同的JDK路径,比如部分版本的cacerts路径为/usr/lib/jvm/java-1.8.0-openjdk/jre/lib/security/cacerts。需确认Spark任务实际使用的JVM对应的cacerts路径与你导入证书的路径一致,可通过Spark任务日志查看java.home参数确认。

4. 修复证书的SAN格式(根本解决)

根源是证书生成时SAN字段格式错误,需重新生成符合规范的证书:

  • 在OpenSSL配置文件中正确定义SAN扩展:
    [req]
    req_extensions = v3_req
    distinguished_name = req_distinguished_name
    
    [v3_req]
    subjectAltName = @alt_names
    
    [alt_names]
    DNS.1 = mongodb-0
    DNS.2 = mongodb-0.mongodb-svc.core.svc.cluster.local
    DNS.3 = impl-stable-v4-mongodb0.ams-np-v4.internal.stuff.org
    DNS.4 = impl-stable-v4-mongodb1.ams-np-v4.internal.stuff.org
    DNS.5 = impl-stable-v4-mongodb2.ams-np-v4.internal.stuff.org
    # 其他需要的域名依次添加
    
    重新生成证书后,再导入到EMR集群的cacerts密钥库中。

内容的提问来源于stack exchange,提问作者TheFiddlerWins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 14:06:15