在macOS上使用xmlsec1签名XML时出现KEY-NOT-FOUND错误
问题描述
在macOS上使用xmlsec1对XML文档签名时失败,报错KEY-NOT-FOUND,具体操作及报错如下:
$ xmlsec1 --sign --output doc-signed.xml --privkey-pem keysncerts/userkey.pem doc.xml Enter password for "keysncerts/userkey.pem" file: Signature status: FAILED Failure reason: KEY-NOT-FOUND Error: failed to sign file "doc.xml"
- 所用示例密钥和XML文档在RedHat Linux、Windows平台可正常签名
- 已在Big Sur/x86、Ventura/M1两种macOS环境测试,均失败
- 通过Homebrew安装
xmlsec1:
brew install xmlsec1
- 确认密钥文件存在,操作时能正常弹出密码输入提示,且使用brew安装的openssl本地生成密钥对后仍报相同错误
解决方案
该问题源于macOS上Homebrew安装的xmlsec1默认链接系统OpenSSL引发的兼容性问题,可通过以下步骤解决:
- 卸载已安装的
xmlsec1:
brew uninstall xmlsec1
- 重新安装并指定链接Homebrew版本的OpenSSL:
brew install xmlsec1 --with-openssl
若上述命令报错,改用:
brew install xmlsec1 --build-from-source --with-openssl
- 验证
xmlsec1的OpenSSL链接情况:
xmlsec1 --version
输出内容需显示使用Homebrew提供的OpenSSL版本,而非系统默认版本。
另外,也可在签名时显式指定OpenSSL引擎,临时规避问题:
xmlsec1 --sign --output doc-signed.xml --privkey-pem keysncerts/userkey.pem --crypto openssl doc.xml
内容的提问来源于stack exchange,提问作者NaderNader
相关产品推荐
相关产品推荐

