我需要使用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?)
不知道发生了什么事。
答案 0 :(得分:0)
我刚刚在使用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那里获取它。
OpenVPN还具有适用于Linux和Mac的版本。也许这也是那些平台的2.4.3版本编号。
另一种选择是,您的付款提供商安装由SHA256创建的证书(并向您提供新证书)。显然,MD5证书不再安全...
报价:
OpenSSL版本已升级到1.1,我无法连接到R7000 出于安全原因,不再需要外部路由器 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