Ubuntu下xmlsec1签名XML时PKCS12证书加载失败及警告求助
问题解决:xmlsec1签名XML时的遗留算法警告处理
背景
使用以下bash脚本在Ubuntu系统中用xmlsec1签名XML时,已通过开启OpenSSL legacy模式解决了PKCS12证书加载失败的问题,但签名过程仍存在警告:
#!/bin/bash value="${HOME}/demo.p12" PATH2="${HOME}/installation_signed.xml" PATH3="${HOME}/installation.xml" PASS="logalty" /usr/bin/xmlsec1 --sign --output $PATH3 --pkcs12 $value --pwd $PASS $PATH2
解决方案步骤
1. 先定位警告具体内容
首先捕获完整的警告信息,明确问题根源:
/usr/bin/xmlsec1 --sign --output $PATH3 --pkcs12 $value --pwd $PASS $PATH2 2>&1
常见警告类型包括:旧摘要算法(如SHA1)提示、遗留加密算法提示等。
2. 指定现代签名/摘要算法
如果警告是因使用了过时算法(如SHA1),在签名命令中显式指定更安全的算法:
/usr/bin/xmlsec1 --sign --output $PATH3 --pkcs12 $value --pwd $PASS \ --digest sha256 --sign-sha256 $PATH2
--digest sha256:设置XML节点的摘要算法为SHA256--sign-sha256:设置签名算法为RSA-SHA256(若为EC密钥,该参数同样适用)
3. 确认OpenSSL legacy配置正确性
若警告与legacy模式相关,检查/etc/ssl/openssl.cnf配置是否正确开启legacy provider:
[provider_sect] default = default_sect legacy = legacy_sect [default_sect] activate = 1 [legacy_sect] activate = 1
保存配置后,可通过环境变量临时生效(若未全局生效):
export OPENSSL_CONF=/etc/ssl/openssl.cnf
4. 重新打包PKCS12证书(针对旧算法证书)
如果证书本身使用了MD5等极旧的加密算法,用OpenSSL重新打包为现代格式:
# 先导出PEM格式(需legacy模式读取旧证书) openssl pkcs12 -in demo.p12 -out temp.pem -legacy -passin pass:logalty -passout pass:newpass # 重新打包为使用现代算法的PKCS12 openssl pkcs12 -export -in temp.pem -out new_demo.p12 \ -passout pass:newpass -certpbe AES-256-CBC -keypbe AES-256-CBC -macalg SHA256
之后修改脚本中的证书路径为new_demo.p12,密码替换为newpass即可。
5. 验证签名有效性
调整后验证签名结果是否正常:
/usr/bin/xmlsec1 --verify $PATH3 --pkcs12 $value --pwd $PASS
内容的提问来源于stack exchange,提问作者scorpions77
相关产品推荐
相关产品推荐

