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

Java API部署AWS ECS连接Mongo Atlas遇SSL错误求助

解决AWS ECS部署Java API连接Mongo Atlas的SSL internal_error问题

本地运行正常的Java API,部署到AWS ECS后连接Mongo Atlas抛出SSL内部错误,错误栈如下:

Caused by: javax.net.ssl.SSLException: Received fatal alert: internal_error
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:133) ~[na:na]
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117) ~[na:na]
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:340) ~[na:na]
    at java.base/sun.security.ssl.Alert$AlertConsumer.consume(Alert.java:293) ~[na:na]
    at java.base/sun.security.ssl.TransportContext.dispatch(TransportContext.java:186) ~[na:na]
    at java.base/sun.security.ssl.SSLTransport.decode(SSLTransport.java:172) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl.decode(SSLSocketImpl.java:1506) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl.readHandshakeRecord(SSLSocketImpl.java:1416) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:456) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl.ensureNegotiated(SSLSocketImpl.java:921) ~[na:na]
    at java.base/sun.security.ssl.SSLSocketImpl$AppOutputStream.write(SSLSocketImpl.java:1291) ~[na:na]
    at com.mongodb.internal.connection.SocketStream.write(SocketStream.java:99) ~[mongodb-driver-core-4.6.1.jar!/:na]
    at com.mongodb.internal.connection.InternalStreamConnection.sendMessage(InternalStreamConnection.java:552) ~[mongodb-driver-core-4.6.1.jar!/:na]
    ... 10 common frames omitted
2023-11-12 04:19:23.857  INFO 1 --- [ngodb.net:27017] org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server ac-rrfulxj-shard-00-01.fbwwahl.mongodb.net:27017
com.mongodb.MongoSocketWriteException: Exception sending message
    at com.mongodb.internal.connection.InternalStreamConnection.translateWriteException(InternalStreamConnection.java:684) ~[mongodb-driver-core-4.6.1.jar!/:na]

已尝试指定TLS版本、开放端口无效,可按以下步骤排查解决:

  • 验证Mongo Atlas白名单配置
    确保Mongo Atlas的IP白名单包含ECS任务的公网IP、VPC CIDR段,或NAT网关的公网IP(如果ECS通过NAT访问公网)。若使用Fargate,动态IP场景下可临时添加0.0.0.0/0测试(生产环境不推荐),或配置VPC peering直接连接Atlas的VPC。

  • 补充Mongo Atlas所需的根证书
    Mongo Atlas使用Let's Encrypt的ISRG Root X1证书,部分容器JRE的默认信任库可能缺少该证书。构建Docker镜像时可导入证书:

    RUN curl -o /tmp/isrgrootx1.pem https://letsencrypt.org/certs/isrgrootx1.pem.txt
    RUN keytool -importcert -file /tmp/isrgrootx1.pem -alias isrgrootx1 -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -noprompt
    

    或启动Java应用时指定自定义信任存储:

    java -Djavax.net.ssl.trustStore=/app/truststore.jks -Djavax.net.ssl.trustStorePassword=yourpass -jar your-api.jar
    
  • 核对驱动与Java版本兼容性
    mongodb-driver-core-4.6.x支持Java 8~17,若ECS容器使用Java 18+,需升级驱动至5.x版本,或降级Java到17。

  • 禁用SNI扩展
    部分网络环境下SNI会导致SSL握手异常,添加启动参数:

    -Djsse.enableSNIExtension=false
    
  • 确认连接字符串正确性
    直接使用Mongo Atlas控制台生成的标准连接字符串(如mongodb+srv://user:pass@cluster.fbwwahl.mongodb.net/?retryWrites=true&w=majority),避免手动修改SSL相关参数,确保用户名密码无未转义的特殊字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:34:54