RHEL7运行curl用PKCS12证书报SEC_ERROR_UNKNOWN_PKCS11_ERROR如何解决
RHEL7环境curl使用PKCS12格式证书的解决方法
RHEL7默认预装的curl基于NSS加密后端编译,和通用的OpenSSL后端逻辑不同,无法直接解析带密码的PKCS12格式证书文件,因此会抛出SEC_ERROR_UNKNOWN_PKCS11_ERROR错误。你用PEM格式证书+私钥可正常运行,也是因为NSS对PEM格式的适配度更高,对应两种可行解决方案如下:
方法1:适配默认NSS后端curl,导入证书到NSS数据库
- 安装依赖的NSS工具包
yum install -y nss-tools
- 初始化用户NSS数据库(若已初始化可跳过)
mkdir -p ~/.pki/nssdb && certutil -N -d ~/.pki/nssdb --empty-password
如果需要给NSS数据库设置密码,去掉--empty-password参数按提示输入即可。
- 导入PKCS12证书到NSS数据库
pk12util -i /mycert.p12 -d ~/.pki/nssdb
执行时按提示输入PKCS12证书的保护密码即可完成导入。
- 执行curl请求
如果NSS数据库中只有一个客户端证书,直接执行即可:
curl -0 -v --cacert /my_sec_cert.cer -X GET "https://<url>"
如果存在多个证书,先执行certutil -L -d ~/.pki/nssdb查询对应证书的别名,执行请求时指定别名即可:
curl -0 -v --cert <证书别名> --cacert /my_sec_cert.cer -X GET "https://<url>"
方法2:更换为OpenSSL后端的curl,直接使用原有命令
如果不想修改NSS数据库配置,可以直接安装适配OpenSSL的curl版本:
- 安装OpenSSL版本curl
yum install -y curl-openssl
- 直接执行你原有命令即可正常发起请求:
curl -0 -v --cert-type p12 --cert /mycert.p12:<password> --cacert /my_sec_cert.cer -X GET "https://<url>"
内容的提问来源于stack exchange,提问作者DeadPool
相关产品推荐
相关产品推荐

