首页 > 解决方案 > 使用证书、密钥和 CAcertificate 调用 REST API https

问题描述

我需要使用 SSL 身份验证调用支付解决方案提供商 REST API 端点。

提供者给了我这些文件:

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?)

不知道发生了什么。

标签: curlhttpsopenssl

解决方案


我刚刚在使用 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 证书,因为签名很弱。

来自https://community.netgear.com/t5/Nighthawk-WiFi-Routers/Netgear-R7000-and-OpenVPN-for-Android-App/td-p/1310857

有关 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

推荐阅读