0

So I'm attempting connect to a MongoDB on Bluemix (Compose for MongoDB service) through Python 3.6.2 on my local machine using the following code:

import json
import urllib.request
import pymongo
import ssl

#uri is string taken from Service Credentials section of MongoDB Bluemix page
uri_string = "mongodb://admin:<password>@server1:port,server2:port/compose?ssl=true&authSource=admin"
client = pymongo.MongoClient(uri_string)
db = client.handle

#reading in json data from api_url
data = urllib.request.urlopen("api_url")
parsed = json.loads(data)
for item in parsed['resultItemList']:
    db.insert_one(item)

The goal is to insert the JSON data into my MongoDB but after running the for loop I am getting the following error message:

Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/usr/local/lib/python3.6/site-packages/pymongo/collection.py", line 667, in insert_one
    with self._socket_for_writes() as sock_info:
File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/contextlib.py", line 81, in __enter__
    return next(self.gen)
File "/usr/local/lib/python3.6/site-packages/pymongo/mongo_client.py", line 868, in _get_socket
    server = self._get_topology().select_server(selector)
File "/usr/local/lib/python3.6/site-packages/pymongo/topology.py", line 214, in select_server
    address))
File "/usr/local/lib/python3.6/site-packages/pymongo/topology.py", line 189, in select_servers
    self._error_message(selector))

pymongo.errors.ServerSelectionTimeoutError: SSL handshake failed: [SSL: 
    CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:748),SSL 
    handshake failed: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify 
    failed (_ssl.c:748) 

I've searched extensively online and haven't been able to figure it out. I understand I somehow need to retrieve the SSL Certificate from Bluemix but do not understand the proper way to do so within python and certain options in MongoClient(). I've already installed the certifi python package:

python3 -m pip install certifi  

which was unsuccessful and also tried turning off the SSL requirement with

ssl_cert_reqs=ssl.CERT_NONE

1 Answers1

0

Try this. Mine works.

import os
import pymongo
import ssl

MONGODB_URL = os.environ.get('MONGODB_URL')
client = pymongo.MongoClient(MONGODB_URL,ssl_cert_reqs=ssl.CERT_NONE)
db = client.get_default_database()
print db.collection_names()
Pang
  • 9,564
  • 146
  • 81
  • 122
Jason Li
  • 1
  • 1
  • 1