Ошибка XMLSEC: "не удалось загрузить сертификат"
Я пытаюсь использовать набор инструментов python-saml (или часть кода в нем) в своем проекте, но у меня возникли некоторые проблемы, которые я попытаюсь решить в этом вопросе. На моей локальной машине (Ubuntu 18.04) я все установил и запустил, но когда дело дошло до установки его на машину с ОС centOS, у меня было несколько проблем. Релиз, который я использую (должен использовать) - это CentOS 6.8. Я собрал все нужные мне rpm-пакеты (зависимости) и установил их. Я получаю сообщение об ошибке "Не удалось загрузить сертификат" в следующей строке кода python-saml:
sign_key.loadCert(file_cert.name, xmlsec.KeyDataFormatCertPem)
Эта функция loadCert является частью пакета dm.xmlsec.binding. Итак, я проверил эту функцию, и это она:
def loadCert(self, char *filename, xmlSecKeyDataFormat key_data_format):
"""load certificate of *key_data_format* from *filename*."""
cdef int rv
with nogil:
rv = xmlSecCryptoAppKeyCertLoad(self.key, filename, key_data_format)
if rv < 0:
raise Error("failed to load certificate", filename, rv)
Ну, я думаю, что проблема может быть только в "xmlSecCryptoAppKeyCertLoad", поэтому я проверил эту функцию, которая принадлежит библиотеке XMLSEC и определяется как:
int xmlSecCryptoAppKeyCertLoad(xmlSecKeyPtr key, const char* filename, xmlSecKeyDataFormat format) {
if((xmlSecCryptoDLGetFunctions() == NULL) || (xmlSecCryptoDLGetFunctions()->cryptoAppKeyCertLoad == NULL)) {
xmlSecNotImplementedError("cryptoAppKeyCertLoad");
return(-1);
}
return(xmlSecCryptoDLGetFunctions()->cryptoAppKeyCertLoad(key, filename, format));
}
Аргументы функции "loadCert" являются правильными, правильное имя файла сертификата и правильный формат. Я попробовал это вручную в командной строке, и я получил ту же ошибку (только на машине с CentOS, все хорошо в моей Ubuntu).
Есть идеи, в чем может быть проблема? Я должен буду понять, что происходит как-то, но если кто-то может помочь, это было бы здорово.
Заранее спасибо!
Не имеет значения для вопроса, но на всякий случай может быть полезным для кого-то другого, у меня были проблемы с установкой dm.xmlsec.binding на компьютерах Red Hat, и я решил ее, собрав пакет, следуя инструкциям на https://github.com/onelogin/python-saml/issues/30, что означает обновление файла /usr/bin/xmlsec1-config, чтобы он содержал "-DXMLSEC_NO_SIZE_T" в "--cflags".
1 ответ
Я решил это путем загрузки сертификата из памяти вместо загрузки из файла. Тем не менее, на самом деле не знаю, почему загрузка из файла не работает в CentOS 6.8 (или не работает для меня)