下载自签名服务器证书

下载自签名服务器证书

概括
我需要从服务器下载自签名证书,以创建 .JKS 文件作为应用程序中的信任库。我如何从 Red Hat 服务器执行此操作?

我尝试过
我曾尝试使用 openssl 来获取证书:

echo -n | openssl s_client -connect hostname.example.com:20000 -showcerts | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > downloadedcerts.cert

此操作失败并显示以下消息:

verify error:num=19:self signed certificate in certificate chain

确实,该服务器的根证书自签名,不是来自 CA。我对此没有异议 - 根证书属于我国的一个政府机构 - 但 openssl 无法连接以下载证书。

在 Firefox 中加载 URL、手动忽略证书错误并下载证书很容易,但由于防火墙,我无法从我的台式机连接到服务器。

任何帮助将非常感激 :)

答案1

验证错误:num=19:证书链中的自签名证书

事实上,该服务器的根证书是自签名的,而不是来自 CA。

它是一个 CA,只是不受信任 ;)

与浏览器(几乎信任所有内容)不同,OpenSSL 不信任任何内容(您必须告诉它信任什么)。


下载您所在国家/地区的 CA 证书(通常不是链中发送)。其不是发送链中因为它是一个信任点;你必须已经拥有它并信任它。

您通常可以在网上找到 CA 证书。例如,这里是 DigiCert 的这里是 Verisign 等。验证您下载的证书。验证是比较棘手的部分 - 浏览器通过携带自己已验证的证书包来解决此问题。

将您所在国家/地区的 CA 证书放入其自己的文件中。然后,使用openssl s_client -connect hostname.example.com:20000 -CAfile my-country-ca.pem.s_client将完成Verify OK (0)或类似操作。

答案2

我建议创建自己的证书颁发机构 [编辑 - 不是想要的。请参阅下一段]。这有点麻烦,当你研究如何做时,你会发现它比实际更难。你只需虚构一家公司,将其证书放入客户的受信任根中,它就可以签署证书,而不是使用自签名证书。

我在 Bruno 对这个问题的回答中找到了解释: https://stackoverflow.com/questions/4103472/ssl-handshake-fails-with-a-verisign-chain-certificate-that-c​​ontains-two-ca-s

我一直没有想到根证书是自签名的,但这很有道理。所以,如果我理解正确的话,您不仅获得了所需的证书(第一个证书),还获得了证书链中的所有其他证书。根证书是导致出现该消息的证书。

相关内容