authorize.net如何使用由不在众所周知的curl.haxx.se/CA/cacert.pem列表中的CA签名的证书?

authorize.net如何使用由不在众所周知的curl.haxx.se/CA/cacert.pem列表中的CA签名的证书?,curl,ssl-certificate,authorize.net,Curl,Ssl Certificate,Authorize.net,使用authorize.net进行交易的URL为。如果我们访问此URL并检查证书,我们可以看到它是由中介证书签署的,CN=委托认证机构-L1E,有效期至2019年11月10日17:25:43。但是,如果您访问委托网站,您会看到他们的中介证书具有相同的CN,有效期至2021年11月11日23:00:59-因此它是一个更新的版本。这两个中间证书不共享同一根证书。在我的例子中,出现了一个问题,因为CURL在我的配置设置中使用的已知列表不包含证书早期版本的根证书。它只包含新版本的根证书。当我在文件中手动

使用authorize.net进行交易的URL为。如果我们访问此URL并检查证书,我们可以看到它是由中介证书签署的,CN=委托认证机构-L1E,有效期至2019年11月10日17:25:43。但是,如果您访问委托网站,您会看到他们的中介证书具有相同的CN,有效期至2021年11月11日23:00:59-因此它是一个更新的版本。这两个中间证书不共享同一根证书。在我的例子中,出现了一个问题,因为CURL在我的配置设置中使用的已知列表不包含证书早期版本的根证书。它只包含新版本的根证书。当我在文件中手动添加旧版本的根证书时,问题就解决了。然而,我想知道到底出了什么问题。列表是否应包含两个版本的根证书?应该让Authorize.net更新其证书,使其与最新的CA捆绑包相匹配吗?

问题是CA捆绑包中不包括(以及Authorize.net上的其他安全域)的根CA,理由充分:如果您访问该页面并查看证书路径中根CA的详细信息,您将注意到Sha1指纹是99 a6 9b e6 1a fe 88 6b 4d 2b 82 00 7c b8 54 fc 31 7e 15 39。Internet上的搜索将引导您进入此页面 ,这说明此根证书不再受信任。它使用不安全的1024位RSA密钥。链中正下方的证书(sha1指纹be e7 72 b3 19 0a c8 4b f8 31 f9 60 7d 98 89 ec 6a 96 6c 16)使用2048 RSA密钥,但它不是最新版本。例如,谷歌改用了更新的版本(指纹:B31EB1 B7 40 E3 6C 84 02 DA DC 37 D4 4D F5 D4 67 49 52 F9)。根据我自己的经验,正如Andrew提到的,Ubuntu最近放弃了对该链中证书的支持,curl将不再连接到。不幸的是,Authorize.net仍然使用旧版本。因此,我被迫使用旧证书(2048位)来解决这个问题。我没有插入根证书,它使用1024位密钥。临时解决方案是让CURL信任根目录下的证书(而不是不安全的根目录)。为了在Ubuntu中做到这一点,我遵循了配置文件\etc\ca-certificates.conf中提供的说明

# This file lists certificates that you wish to use
...
# Certificates should be installed under /usr/share/ca-certificates
# and files with extension '.crt' is recognized as available certs.
在我的例子中,我在根目录下添加了所有证书(在仔细检查了它们的sha1指纹之后),按照指示将它们列在配置文件中并简单地执行:

sudo update-ca-certificates –fresh
这将在/etc/ssl/certs/中添加证书。我们需要确保CURL知道这个位置。因此,我在CURL脚本中添加了以下选项:

curl_setopt($ch, CURLOPT_CAPATH, "/etc/ssl/certs"); 
要验证它是否有效,可以执行

openssl verify -CApath /etc/ssl/certs /path/to/signed/certificate.crt

这里提出了一个类似的问题:

更新:这应该不再是必要的,因为。

你可能会突然发现这个停止工作,因为Ubuntu ca证书包在最近的更新中刚刚放弃了对它们的支持:

前几天,我和我的同事在一位客户那里遇到了这种情况——他们的捐赠突然停止了

真正的解决方案是Authorize.net需要更新其证书。但是,在此期间,您可以只添加一个缺少的证书。我把如何在Ubuntu中实现这一点的注释放在这里:

我还将单根证书(尽管可能不安全)保存在


同样,我希望在他们获得新证书之前,这只是一个短期解决方案,但这将是一个很好的权宜之计。

我认为添加(RSA 1024位)根证书不是一个好主意,也不是必要的。只需在下面添加中间层(RSA 2048位)证书即可。在我的回答中,我解释了如何通过直接检查证书路径(在Windows中)和剪切粘贴添加此中间证书。我对你的答案投了赞成票,因为有信息表明Ubuntu最近放弃了对根证书的支持。我没有在github上发布证书,这需要人们信任你,除非他们通过委托检查指纹,否则提供直接链接更简单:。但是,同样,我不建议在CA包中添加此RSA 1024位证书。最好是使用中介机构的证书,这是在中国使用的。我原则上完全同意。然而,到目前为止,我还无法获得您提供的中间证书以类似的方式工作,或者(理想情况下)通过被包括在ca证书的可信证书中,或者通过简单地使用--cacert和curl。我还尝试用下面描述的方法直接保存中间证书——不走运。好的,我们必须做一些其他事情来保存中间证书。仅将其添加到CA包中是不起作用的。但是,我很高兴您同意这一点:我们不应该使用不安全的根证书。我将编辑我的答案,以提供一个有效的解决方案。五天后,我们最近从authorize.net上看到了这篇文章,它宣布了对具体问题的一个永久性答案:然而,这个问题需要更广泛的理解。我仍然对整个过程应该如何运作感到困惑。出了什么问题?