从命令行获取HTTPS服务器的证书指纹?

Mat*_*ner 31 https mercurial command-line google-code certificate

最近,Mercurial 在连接到HTTPS服务器时添加了证书验证.我正在尝试克隆googlecode项目的wiki存储库https://wiki.pydlnadms.googlecode.com/hg/,但证书适用于*.googlecode.com.我的印象是,这被称为通配符域,对所有子域都有效,但我收到错误:

matt@stanley:~/src$ hg clone https://wiki.pydlnadms.googlecode.com/hg/ pydlnadms-wiki
abort: wiki.pydlnadms.googlecode.com certificate error: certificate is for *.googlecode.com
Run Code Online (Sandbox Code Playgroud)

据称我需要将证书指纹添加到我的hgrc.如何从命令行检索此指纹?

家长问题:在Google Code上托管图片

Jer*_*ock 65

http://wiki.debuntu.org/wiki/OpenSSL#Retrieving_certificate_informations上的页面列出了该命令行(并打印出相关信息).从那个页面和一些手册页,看起来你想要的是(对于bash):

openssl s_client -connect <host>:<port> < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin
Run Code Online (Sandbox Code Playgroud)

如果您需要整个证书,请不要使用|符号及其后的所有内容.

  • 哈希方法可以指定为标志(sha1、sha256、md5):` | openssl x509 -fingerprint -sha256 -noout -in /dev/stdin` (3认同)

run*_*gel 9

这也足够了:

openssl x509 -fingerprint -in server.crt
Run Code Online (Sandbox Code Playgroud)


小智 6

这是一个老线程,但我找到了一种更简单的方法.假设你有crt文件:

$ cat server.crt|openssl x509 -fingerprint 
MD5 Fingerprint=D1:BA:B0:17:66:6D:7F:42:7B:91:1E:22:7E:3A:27:D2
Run Code Online (Sandbox Code Playgroud)


Ben*_*res 5

背景

从 Mercurial 3.9 开始,Mercurial 需要更安全的 SHA-256 指纹,而不是之前版本中的 SHA-1。 Jeremiah 的回答解释了如何计算 SHA-1 指纹。正如 J.Money 的评论所指出的,现在必须添加标志-sha256才能获得正确的指纹。

新命令:

openssl s_client -connect <host>:<port> < /dev/null 2>/dev/null | openssl x509 -fingerprint -sha256 -noout -in /dev/stdin
Run Code Online (Sandbox Code Playgroud)

其中<host>:<port>应酌情替换。(要回答最初的问题,可以使用wiki.pydlnadms.googlecode.com:443,如 yanokwa 所指出的。) 您必须在 URL 中省略https://,否则您将收到错误Expecting: TRUSTED CERTIFICATE

然后,可以将生成的 SHA-256 指纹添加到 Mercurial 的全局设置文件( ~/.hgrc)。