pythonwindowssslpython-pika

Accessing a specific certificate from the windows store with python


I am trying to connect to RabbitMQ using Pika. We are using certificates (ssl) to do this. Here is their (Pika's) example:

context = ssl.create_default_context(
    cafile="PIKA_DIR/testdata/certs/ca_certificate.pem")
context.load_cert_chain("PIKA_DIR/testdata/certs/client_certificate.pem",
                        "PIKA_DIR/testdata/certs/client_key.pem")
ssl_options = pika.SSLOptions(context, "localhost")
conn_params = pika.ConnectionParameters(port=5671, ssl_options=ssl_options)

This is great, if our cert files had a file path, but we are on Windows and they are stored in the windows store. So I don't believe load_cert_chain() as provided above will work.

I am able to access (or see) the specific cert like this:

context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
context.load_default_certs()
certs = context.get_ca_certs()

But this gets a list of certs. I don't see any obvious way to search through and grab the cert I need. And even if I could, I am not sure how to make the code connection to "pika.SSLOptions(context,...)"

So there are two questions here, but the more important one is this:

  1. How can I pull out a specific certificate from the windows store (since I don't have a file path)?

(the other question is how to connect this to Pika but I may be able to figure that out if the above question is answered)

Note: Pika is just a third party library that interfaces with RabbitMQ. Note2: Using Python3.5


Solution

  • It looks like, after reading some hits from this search that most Python libraries that deal with the Windows cert store do so to fetch CA certs and CRL lists and not individual certs so much.

    The wincertstore library might be what you're looking for.