如何在本地将远程服务器 SSL 证书保存为文件

Kim*_*ais 394 certificate ssl

我需要下载远程服务器的 SSL 证书(不是 HTTPS,但 SSL 握手应该与 Google Chrome / IE / wget 相同,并且 curl 都给出证书检查失败错误)并将证书添加为我的笔记本电脑 Windows 中的可信证书证书存储,因为我无法让我的 IT 人员给我 CA 证书。

这是用于办公室通信,因此我无法真正使用实际客户端来获取证书。

我该怎么做,我有 Windows 7 和一堆 Linux,所以任何工具/脚本语言都可以。

gbr*_*les 380

如果您有权访问 OpenSSL,请尝试

openssl s_client -connect {HOSTNAME}:{PORT} -showcerts
Run Code Online (Sandbox Code Playgroud)

用您的值替换 {HOSTNAME} 和 {PORT}。

  • [elec3647 的解决方案](http://superuser.com/a/641396/96477) 在 shell 管道中完全自动提取 PEM。 (18认同)
  • 我需要`-servername` 选项来获取虚拟主机证书。https://gist.github.com/Artistan/5219484efb2fe51cd064175b3d0d5971 (8认同)
  • 此外,它适用于 HTTP 以外的协议。 (4认同)
  • 443 是 HTTPS 的默认端口。 (4认同)
  • 我更喜欢这个选项,因为我不必打开 GUI,而且我可以从我们的服务器通过 SSH 来完成。 (2认同)

小智 318

获取和下载证书的一种快速方法是运行以下命令,该命令将来自 -showcerts 的输出通过管道传输到 x509 ssl 命令,该命令只是去除所有无关的东西。例如:

openssl s_client -showcerts -connect server.edu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >mycertfile.pem
Run Code Online (Sandbox Code Playgroud)

要使用证书,请使用 wget,

wget https:/server.edu:443/somepage --ca-certificate=mycertfile.pem
Run Code Online (Sandbox Code Playgroud)

  • 这对我不起作用:无法加载证书 27262:error:0906D06C:PEMroutines:PEM_read_bio:no start line:/SourceCache/OpenSSL098/OpenSSL098-50/src/crypto/pem/pem_lib.c:648:Expecting: TRUSTED证书 (14认同)
  • 迟到但@monojohnny:`openssl s_client -showcerts` 显示接收链中的所有证书(如果连接成功),但通过 `openssl x509` 管道只取第一个并丢弃其余的。要获得所有这些,请使用`...| sed -n '/^-----BEGIN CERT/,/^-----END CERT/p'` 或 `...| awk '/^-----BEGIN CERT/,/^-----END CERT/'` 你也可以使用稍微复杂一点的 `awk` 将每个证书放在一个单独的文件中,这使得它们更容易使用使用 `openssl` 和其他一些工具。 (8认同)
  • 我尝试了这个(在另一个网站上) - 但预计会有完整的证书链:似乎这只会带回链中的第一个 - 这是预期的吗? (6认同)
  • 我同意 monojohnny,这并没有给你完整的链条。 (4认同)
  • 使用 wget 似乎只保存了一个 `index.html` =&gt; `HTTP 请求已发送,正在等待响应...... 200 OK Length: unspecified [text/html] Saving to: 'index.html.1'` (3认同)
  • @cowlinator:有一些变化,但类似`openssl s_client ..... -showcerts \ | awk '/-----BEGIN/{f="cert."(n++)} f{print&gt;f} /-----END/{f=""}'` 参见 https://unix. stackexchange.com/questions/366898/generate-hpkp-fingerprints-for-all-certificate-chain (2认同)

Wil*_*sum 133

老实说,我以前从未尝试过(从来不需要)但是,我刚刚在 Firefox 中尝试过,它似乎可以用于保存:

  1. 单击顶部的 SSL 证书图标/底部的挂锁。
  2. 点击 View Certificate
  3. 单击Details选项卡
  4. 从层次结构中选择您想要的证书[图中未圈出]
  5. 点击 Export

替代文字

  • 这在现代 Firefox 中已不再可能。那些傻瓜想要“现代化”证书查看器,并在此过程中剥夺了导出它的能力:( (5认同)

Lar*_*y K 60

使用 Chrome 浏览器导出证书

  1. 使用 SSL ( https://whatever )连接到网站

2. 单击锁定符号,然后单击详细信息

  1. 从 Chrome 56 版开始,您可以执行以下操作:转到三点菜单 -> 更多工具 -> 开发人员工具,然后单击安全选项卡。这将为您提供带有查看证书按钮的安全概述

  2. 单击查看证书按钮。

    将打开一个模态窗口。它有两个窗格。最上面的一个显示站点证书(列出的最后一个)、中间证书和根证书(最上面的一个)的信任层次结构。

    第二个较大的窗格显示其中一个证书的详细信息。

    可能有零个或多个中间证书。

    请注意,根证书有一个金色边框的图标。其他有蓝色边框。

    请参阅下面的屏幕截图。

  3. 要导出证书:

    1. 首先单击信任层次结构中的证书图标。
    2. 证书将显示在模态的主要部分。
    3. 单击模式主要部分中证书的大图标。图标拖到桌面。然后 Chrome 会将证书复制到您的桌面。

在此处输入图片说明

  • 对于 Windows 上的 Chrome,单击“查看证书”后,模式与 Mac 不同。单击详细信息选项卡,然后复制到文件...然后选择格式和文件名,这很简单。 (4认同)
  • 不再在 Chrome 72.0.3626.121 上工作 (3认同)

Dan*_*ien 20

这是gbroiles 的回答,但我想指出 cURL 项目有一个页面,其中包含有关openssl用于保存远程服务器的 SSL 证书的更多详细信息

  • openssl s_client -connect {HOSTNAME}:{PORT} | 三通日志文件
  • 键入QUIT并按 Enter / Return 键。
  • 证书将列在“BEGIN CERTIFICATE”和“END CERTIFICATE”标记之间。
  • 如果要查看证书中的数据,可以使用:

    openssl x509 -inform PEM -in certfile -text -out certdata

    从哪里certfile提取的证书logfile。查找范围certdata


Art*_*tan 19

自动化

我需要 -servername 从我们服务器上的虚拟主机获取正确的证书。

openssl s_client -showcerts -connect host.name.com:443 -servername host.name.com </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > host.name.com.pem

您也可以转换为桌面证书

openssl x509 -inform PEM -in host.name.com.pem -outform DER -out host.name.com.cer

最后一部分是将它添加到您的证书中,不确定在
我使用的 mac 钥匙串的windows 上,应该是类似的...

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain host.name.com.cer