XML Security Library是一个基于libxml2的C类库,支持主流的XML加密算法,原生支持gcrypt, gnutls, mscng, mscrypto, nss, openssl
六种加密库,在诸如SAML2.0等加密认证或相关安全领域会用到该库,截至发文(2019-10-18),libxmlsec类库源码最新版为1.2.29(2019-10-15更新))。
XML Security Library 官网提供了源代码及旧版预编译二进制文件下载。
XML Security Library 官方下载站点提供的最新Windows版库文件为1.2.18,用于32位平台,不支持64位平台,因此在64位Windows使用该文件时会报0xc000007b加载错误。
xmlsec动态加载各加密库时对不同加密算法的支持情况:
crypto 库 | xmlsec支持的xml加密算法 |
---|---|
gcrypt | Der |
gnutls | Pkcs12, Der, X509_APP_KEY |
mscng | Pkcs12, Der |
mscrypto | Pkcs12, Der |
nss | Pkcs12, Der, |
openssl | Pem, Der, Pkcs8Pem, Pkcs8Der, Pkcs12 |
xmlsec的解析库中,openssl几乎支持了大部分加密算法,针对常见的Pkcs12及Der加密可以任选其一使用,而其余的如Pem的加密则必须使用openssl加密库,这些加密方法接口的定义及调用在$PATH_TO_XMLSEC_SOURCE/src/$CRYPTO_LIB/app.c
中。
官方提供的二进制文件目前不支持新版特性,并且只能运行在32位系统中,如果需要在pySAML等库中调用该库,建议在目标机中从源代码编译。
编译环境任选,编译器任选,建议只选择加密库其中一种,避免程序过于臃肿。
此处挑选以Pem位加密算法加密XML场景的编译过程,因为只有openssl库支持Pem加密方式,其余库参考此方法即可
平台:Windows 10-64bit
编译环境:Cygwin
Cygwin预装库:automake-1.15, cygwin32-libtool, libtool, libxml2-dev, libxslt, libxslt-devel, make, gcc-g++.
如果在Linux环境中编译,只需要保证这些库在就可以,其余步骤一样。
编译准备:下载xmlsec1源代码,openssl源代码,使用系统或Cygwin预装的openssl会导致一些方法调用时显示未定义。
解压编译opensll和xmlsec1源代码,需要先编译并安装openssl库再编译xmlsec
tar xvf openssl-1.1.1d.tar.gz
tar xvf xmlsec1-1.2.29.tar.gz
cd openssl-1.1.1d
./config
make
make install
cd xmlsec1-1.2.29
./configure --enable-mscrypto=no --enable-mscng=no
# 禁用mscrypto和mscng库以减小库大小
make
make install
最后在系统环境变量PATH中加入$PATH_TO_CYGWIN\lib
和$PATH_TO_CYGWIN\bin
。