我如何在下载时验证站点的 SSL 证书是否属于我信任的主机?

我如何在下载时验证站点的 SSL 证书是否属于我信任的主机?

一般来说

我希望能够与站点建立 HTTPS 连接,并且在协商 SSL 检查时:

  1. 该证书对于证书上列出的主机而言完全有效(未过期、由受信任的 CA 签名),并且

  2. 该证书适用于我指定的主机(即,我可能通过 HTTPS 连接到 example1.com,但我只想验证 example1.com 使用的证书对 example4.com 有效,因为我相信 example4.com 没有受到损害)。

具体来说

有一个与 redhat 关联的站点,它使用对 *.redhat.com 有效的证书,但不在 redhat.com 域下。在其他所有方面,此证书都是有效的(即它由受信任的 CA 颁发,未过期,并且我 99.99% 确信它没有被盗 - 虽然,如果被盗,则意味着 redhat 已受到攻击,因此我会遇到更大的麻烦),我想从此站点下载 RPM 模块,同时(希望)保证我没有受到 MITM 攻击。

因此,我想从 redhat 附属的 example.com 下载一些内容,同时验证我连接的站点是否确实使用了有效的 redhat 证书。

我已经尝试过的事情:

curl-- curl 与此功能最接近的是此选项标志,它只是禁用所有证书认证,也就是不是我想要什么,

wget-- 只有无参数--no-check-certificate选项,这同样没有帮助。

根据 libcurl 文档,我可以使用,看起来很有希望,但提到它要求我“对 openssl 库有相当多的了解”,而我显然不具备这些知识。我可以用 C 或 Python 或其他语言编程,但最有帮助的是(按优先顺序排列):

  1. 仅使用命令行应用程序的 bash / sh 解决方案,通常随基于 RHEL 的发行版一起提供,
  2. 或者使用通用脚本语言(Python、Perl、Ruby 等)的解决方案,不需要下载任何库依赖项,
  3. 或者使用非脚本语言(C/C++、Java、Haskell 等)的解决方案,同样不需要下载任何库。

相关内容