使用Dart连接MongoDB Atlas时遭遇HandshakeException错误
解决MongoDB Dart连接时的CERTIFICATE_VERIFY_FAILED(证书未生效)错误
问题分析
你遇到的HandshakeException是因为证书验证环节失败,提示"certificate is not yet valid",核心原因是本地设备时间与证书生效时间不匹配,或是MongoDB服务器的证书配置存在问题。
解决方案
1. 检查并修正本地设备时间
证书验证会严格校验生效时间段,如果你的设备(手机、模拟器或电脑)系统时间早于证书的Not Before生效时间,就会触发该错误。直接将设备时间调整为当前正确的日期和时间后,重新运行代码重试。
2. 开发环境临时跳过证书验证(仅限测试用)
如果是开发测试阶段,可以临时关闭证书验证来绕过这个问题,但生产环境绝对禁止使用,会带来严重安全风险:
class MongoDatabase { static connect() async { var db = await Db.create( MONGO_URL, settings: ConnectionSettings( ssl: true, sslSettings: SslSettings( allowedInvalidCertificates: true, ), ), ); await db.open(); inspect(db); var status = db.serverStatus(); print(status); var collection = db.collection(COLLECTION_NAME); print(await collection.find().toList()); } }
3. 排查MongoDB服务器证书配置
如果是自行搭建的MongoDB服务器,需要确认证书的生效时间是否正确:
使用openssl命令查看证书详细信息:
openssl x509 -in 你的证书文件路径.pem -text -noout
查看输出中的Not Before字段,确认当前系统时间在该时间之后。若证书生效时间设置错误,需重新生成正确的证书并配置到MongoDB服务器。
内容的提问来源于stack exchange,提问作者Manjubhargavi
相关产品推荐
相关产品推荐

