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

52

最近Mercurial在连接HTTPS服务器时添加了证书验证。我正在尝试克隆一个Google Code项目的维基知识库存储库,网址为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

据称我需要在我的hgrc中添加证书指纹。如何从命令行检索此指纹?
父问题:在Google Code上托管图像

这个问题存在,因为添加证书只是一种解决方法。http://code.google.com/p/support/issues/detail?id=4533 - Thien
如果你喜欢它,就点个赞吧...看到那个“赞”按钮了吗。 - Matt Joiner
5个回答

100

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

如果你想要完整的证书,去掉|符号及其后面的所有内容即可。


1
为了增加更多的细节,这个例子中的<host>:<port>将是"wiki.pydlnadms.googlecode.com:443"。http://mercurial.selenic.com/wiki/CACertificates#Host_certificate_fingerprints上有如何将其添加到您的.hgrc文件中的说明。 - yanokwa
嗨,我已经获取了服务器的指纹,并将[hostfingerprints] mydomain.com = 09:EA:A1:28:49:24:21…添加到/etc/mercurial/hgrc中,但尝试克隆新创建的repo时出现了SSL问题:服务器证书验证失败[命令返回代码255 Fri Sep 14 22:31:09 2012]。有任何提示吗?非常感谢! - razor7
3
哈希方法可以作为标志指定(sha1、sha256、md5):| openssl x509 -fingerprint -sha256 -noout -in /dev/stdin - None
1
这会获取所有额外垃圾的指纹,比如“CONNECTED(00000003)”,这对我来说没有意义。 - ADJenks

19

这也足够了:

openssl x509 -fingerprint -in server.crt

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

4

由于没有人对此发表评论,所以我想尝试澄清有关子域的困惑:

证书是针对 *.googlecode.com。我认为这称为通配符域名,适用于所有子域。

你部分正确。通配符证书适用于所有直接子域,但不适用于子域的子域。

因此,*.googlecode.com 对于 pydlnadms.googlecode.com 是有效的,但对于 wiki.pydlnadms.googlecode.com 是无效的。

如果需要,则需要针对 *.pydlnadms.googlecode.com 或针对 wiki.pydlnadms.googlecode.com 的非通配符证书。


4

背景

自从Mercurial 3.9版本以后,相比之前使用的SHA-1指纹,Mercurial要求更为安全的SHA-256指纹。如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

需要替换为适当的<host>:<port>。(要回答原始问题,可以使用yanokwa指出的wiki.pydlnadms.googlecode.com:443。)您必须从URL中省略https://,否则将会出现错误Expecting: TRUSTED CERTIFICATE

然后,可以将生成的SHA-256指纹添加到Mercurial的全局设置文件(~/.hgrc)中。具体操作请参考此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接