解决mongodb连接性错误certificate相关ssl错误

使用过程中出现mongodb连接到网络数据中心的时候,出现ssl错误,需要进行相关配置,利用pymongo进行数据连接。

错误代码

1
pymongo.errors.ServerSelectionTimeoutError: cluster0-shard-00-02.kwrin.azure.mongodb.net:27017: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

原因分析

  • 官方运用了mongodb4.4的版本,进行了升级,需要对pymongo进行升级。
  • 需要把证书放置到本地

补修过程

  • 卸载低版本pip uninstall pymongo
  • 安装高版本pip install pymongo[srv]
  • 安装证书ssl,stl插件pip install certifi

    • 此处需要把证书下载并添加到本地
    • 在python中运行

      1
      2
      import certifi
      certifi.where()
    • 找到相关路径文件site-packages\\certifi\\cacert.pem,使用文本编辑器件打开

    • 打开网站https://cloud.mongodb.com/v2/5d0c2c79d5ec134e4b3e18b6#security/network/accessList
    • 点开浏览器地址前面的小锁
    • 点击证书-详细信息-复制到文件-下一页-选择Base64编码-下一页-存储为.cer文件
    • 使用记事本工具打开.cer文件
    • 复制内容---Begin Certificate--- *** ---End Certificate---
    • 然后添加到刚才打开的certifi文件site-packages\\certifi\\cacert.pem最后
    • 保存完毕
  • 修改数据库连接字符串
    • 引入证书支持文件
    • 在字符连接中添加路径
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      import pymongo
      import certifi
      from urllib.parse import quote_plus
      user = quote_plus("dbuser_webjoy")
      password = quote_plus("123456a!")
      host = 'cluster0.kwrin.azure.mongodb.net'
      client = pymongo.MongoClient(
      "mongodb+srv://" +
      user +
      ":" +
      password +
      '@' +
      host +
      '/video?retryWrites=true&w=majority',
      tlsCAFile=certifi.where())
      db = client["d_dyart"]
      rexx = db.collection.find()

小插曲

  • 解决sublime数字键盘回车键不能使用的问题
  • 打开sublime菜单首选项-快捷键设置
  • 找到enter,然后再后面添加

    1
    { "keys": ["keypad_enter"], "command": "insert", "args": {"characters": "\n"} },
  • 完美解决

饮水思源