在过去的几天里,我们在每天的管道运行中都会遇到错误。错误与此类似:
消息:"源"端发生故障。ErrorCode=UserErrorFailedToConnectOdbcSource,'类型=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,消息=来自MongoDB客户端的错误:找不到合适的服务器(设置了
serverSelectionTryOnce
(:TLS握手失败:错误:1416F086:SSL例程:tls_process_server_certificate:证书验证在上调用ismaster失败'.mongodb.net:27017'
我可以使用Mongo CLI连接到Mongo数据库。我使用Wireshark来确认SSL握手工作正常。它表明Mongo证书是由"Let's Encrypt"颁发的(https://letsencrypt.org/)。"Let's Encrypt"证书包含在证书列表中,由"DST Root CA X3"颁发,该证书位于我计算机上的受信任根证书中。有趣的是,Mongo证书几天前刚刚更新。
只是为了好玩(请参阅上面消息中的"…验证调用ismaster…"(,在管道配置中,我将数据源数据集更新为"允许自签名服务器证书",连接开始工作。
我会设置这个标志,并允许管道运行几天,看看它是否修复了它。但我没有解释为什么这会起作用,除了Azure有一种奇怪的实现SSL的方式。
有没有办法查看Azure服务器上的受信任证书列表?有没有一种方法可以在Azure端捕获SSL握手的数据包?
Microsoft建议我将MongoDB Collection数据集类型升级为MongoDB Collection V2。与我合作的管道是不久前开发的。V2版本没有"允许自签名服务器证书"。但这对我来说是有效的。