Ошибка 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 (или не работает для меня)

Другие вопросы по тегам