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
相关产品推荐
相关产品推荐

