我正在尝试在我的项目中使用 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 文件以在“--cflags”中包含“-DXMLSEC_NO_SIZE_T”。