Я пытаюсь использовать набор инструментов 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 на машинах с красной шляпой, и я решил их, создав пакет, следуя тому, что описано в https://github.com/onelogin/python-saml/issues/30, что означает обновление /usr /bin/xmlsec1-config, чтобы он содержал "-DXMLSEC_NO_SIZE_T" в "--cflags".