Питоны M2Crypto вызывает исключение в ssl_ctx_load_verify_locations при загрузке сертификатов - PullRequest
1 голос
/ 30 сентября 2010

M2Crypto вызывает ошибку TypeError при загрузке сертификатов SSL CA. Я получаю путь сертификата SSL от экземпляра модели Django. Мой код работал отлично, потому что я выбирал путь сертификата из модели Django

Мой код:

from M2Crypto import SSL
from django.db import models

class MyModel(models.Model):
    ca_file = models.FilePathField(path='/path/to/my/certificates/')

m = MyModel(ca_file='/path/to/my/certificates/certificate.cer')
m.save()

ctx = SSL.Context()
ctx.load_verify_locations(m.ca_file)

Поднимает:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/home/django/lib/datalivelib/utils/https.py", line 51, in do_https
    if ctx.load_verify_locations(ca_file) != 1:
  File "/usr/lib/pymodules/python2.6/M2Crypto/SSL/Context.py", line 131, in load_verify_locations
    return m2.ssl_ctx_load_verify_locations(self.ctx, cafile, capath)
TypeError: in method 'ssl_ctx_load_verify_locations', argument 2 of type 'char const *'

Однако этот код работает нормально

from M2Crypto import SSL
ctx = SSL.Context()
ctx.load_verify_locations('/path/to/my/certificates/certificate.cer')

1 Ответ

2 голосов
/ 30 сентября 2010

Только что сработало!

Функция load_verify_locations () ожидает объект string , а не объект unicode .

Django по умолчанию использует юникод, поэтому путь к сертификату необходимо преобразовать в строку перед передачей в load_verify_locations () .Итак:

ctx.load_verify_locations(str(m.ca_file))
...