curl - 使用证书、密钥和 CAcertificate 调用 REST API https
问题描述
我需要使用 SSL 身份验证调用支付解决方案提供商 REST API 端点。
提供者给了我这些文件:
- 商人CA.crt
- 根CA.crt
- 客户端.crt
- 客户端密钥
- 客户端.pfx
- 密码
API 文档对 rootCA.crt 说,这是签署证书提供商服务器在连接到商家时用来进行身份验证的证书颁发机构。
而merchantCA.crt 是签署商家证书的证书颁发机构
所以这是我的 CURL 调用:
curl --cacert rootCA.crt --cert client.crt:passphrase --key client.key -X GET -H 'Content-Type: application/json' "https://provider_website/api/desired_endpoint"
但我收到了这个错误
curl: (58) could not load PEM client certificate, OpenSSL error error:140AB18E:SSL routines:SSL_CTX_use_certificate:ca md too weak, (no key found, wrong pass phrase, or wrong file format?)
不知道发生了什么。
解决方案
我刚刚在使用 OpenSSL 的 OpenVPN 客户端上遇到了类似的问题(就像你的 curl 一样)。问题可能是您的 OpenSSL 客户端太新。您需要一个较旧的 OpenSSL 客户端。
您较新的 OpenSSL 客户端不接受 SSL 服务器正在使用 md5 散列证书。它要求使用 SHA256 对服务器证书进行哈希处理。
因此,通过获取较旧的 OpenSSL 客户端,它将接受 MD5 散列证书。
您可以在https://build.openvpn.net/downloads/releases/中找到旧的 OpenVPN 版本。
对于 Windows,接受 MD5 的最新版本是openvpn-install-2.4.3-I602.exe
. 当您安装它时,它将安装到C:\Program Files\OpenVPN\bin
. 在那里你会发现一个openssl.exe
有效的。这是它打印给我的版本:
> openssl version
# OpenSSL 1.0.2l 25 May 2017
如果你喜欢的话,你可以直接去 OpenSSL somwhere 获取它。
OpenVPN 也有适用于 Linux 和 Mac 的版本。也许这也是这些平台的 2.4.3 版本编号。
另一种选择是您的支付提供商安装由 SHA256 创建的证书(并且也向您提供新证书)。显然 MD5 证书不再安全......
引用:
OpenSSL 版本已升级到 1.1,我无法再从外部连接到我的 R7000 路由器,因为出于安全原因,OpenSSL v.1.1 不接受 MD5 证书,因为签名很弱。
有关 MD5 证书的更多信息:https ://openvpn.net/vpn-server-resources/faq-regarding-openvpn-connect-ios/#md5-signature-algorithm-support
这将告诉您可以检查证书是否使用 MD5 进行哈希处理:(使用 Git Bash)
../bin/openssl x509 -in rootCA.crt -noout -text | grep "Signature Algorithm"
# Signature Algorithm: md5WithRSAEncryption
推荐阅读
- python - NERDA 模型导入的 ValueError
- python - 在python中使用线程时如何处理内存不足错误
- powershell - 如何通过 EWS 对 Exchange 中的联系人进行排序
- excel - 在行中查找字符串并将整列复制到新工作表
- c++ - 这种 lambda 用法的可能目的是什么?
- random - 用空格替换逗号?Fisher-Yates 随机化
- maven - 安装 DL4J 时构建失败
- dataset - PETS2007 链接断开
- database - Kraken.com - 根据 /public/Trades 端点协调 websocket 交易数据
- sql - 创建表时出现 Oracle 错误。ORA-00998: 必须使用列别名命名此表达式