剖析SSL证书

2020-05-07 05:21:22

你好!。在我的网络杂志上(很快每个人都能看到),有一个关于TLS/SSL的页面(基本上就是这条推文),但是当你在一个页面上写200字关于一件事的时候,有很多更有趣的东西可以说。因此,在这篇文章中,我们将剖析一个SSL证书,并试着去理解它!

我不是一个安全人员,我不会给你的网站提供安全建议(想知道你应该使用什么TLS密码吗?我不知道!)。但!。我认为了解“颁发SSL证书”意味着什么是很有趣的,我可以稍微谈一下。

我很长一段时间都不明白这个“TLS”是什么,基本上更新的SSL版本叫做TLS(SSL3.0之后的版本是TLS1.0)。我将把它从头到尾都称为“SSL”,因为这对我来说不那么困惑。

mail.google.com在端口443上运行HTTPS服务器。我想确认我实际上是在与mail.google.com交谈,而不是互联网上其他由坏人拥有的随机服务器。

在很长一段时间里,这个“证书”业务对我来说都是一种神秘的东西。有一天,我的酷同事Ray告诉我,我可以通过命令行连接到服务器并下载它的证书!

(如果您只想查看SSL证书,您可以单击浏览器中的绿色锁,并可靠地获取所需的所有信息。但这更有趣。)。

因此,让我们从查看mail.google.com的证书开始,并对其进行一点解构。

这将打印一大堆东西,但我们只关注证书。在这里,是这样的:

原来,这种胡言乱语是一种名为“X509”的格式,openssl命令知道如何解码它。

所以我将这段文本保存到一个名为cert.pem的文件中。如果您想要继续操作,可以根据此要点将其保存到您的计算机中。

$openssl x509-in cert.pem-text证书:数据:版本:3(0x2)序列号:3633524695565792915(0x326cdf7599cef693)签名算法:sha256WithRSAEncryption颁发者:C=US,O=Google Inc,CN=Google Internet Authority G2有效期不早于:Jan 18 18:52:11 2017GMT:Apr 12 18:50:002017 GMT主题:C=US,ST=California,L=Mountain。cn=mail.google.com主题公钥信息:公钥算法:rsaEncryption Public-Key:(2048位)模:00:89:87:2B:0B:D4:67:EE:0F:71:8E:C8:3B:92:1A:9F:44:FC:54:9E:FA:60:1B:20:87:A8:93:17:C5:91:.。废话.。C2:4E:F8:9D:5F:FF:CF:BA:E3:65:45:95:60:DC:D8:CA:FF指数:65537(0x10001)x509v3扩展:x509v3主题备选名称:dns:mail.google.com,dns:inbox.google.com x509v3主题密钥标识符:8E:BD:69:80:84:B5:BD:AC:C1:B2:49:47:77:0C:39:37:5C:7E:F6:78签名算法:Sha256WithRSA加密21:8a:a4:08:c2:41:a9:d4:d9:a5:2e:af:3d:82:3a:00:7e:9c:1a:6a:91:ee:46:2c:71:97:64:b9:e1:fc:ae:ff:85。:8E:1C:92:.。更多的内容放在这里.。

这是一大堆东西。以下是我所理解的部分内容。

cn=mail.google.com是“常用名称”。与直觉相反,您应该忽略此字段,改为查看“Subject Alternative Name”字段。

x509v3主题备用名称:部分包含此证书适用的域的列表。这是mail.google.com和inbox.google.com,这是有道理的--它们都是电子邮件域名。

Public Key Info部分告诉我们将用于与mail.google.com通信的公钥。我们现在没有时间解释公钥密码学,但这基本上是我们要用来秘密交谈的加密密钥。

最后,签名是一件非常重要的事情。基本上任何人都可以为mail.google.com制作证书。我现在就可以做一个!但是如果我给你那张证书,你就没有理由相信那是一张真正的证书

证书(有效的域名和公钥等)。

别人的签名。这基本上是说,“嘿,这没问题,Visa是这么说的。”

我的计算机上/etc/ssl/certs中有一堆证书。这些是我的计算机信任用来签署其他证书的证书。例如,我的笔记本电脑上有/etc/ssl/certs/Staat_der_Nederlanden_EV_Root_CA.pem。一些来自荷兰的证书!谁知道呢!如果他们签署了mail.google.com证书,我的电脑会说“是的,看起来棒极了,听起来棒极了”。

如果街对面的某个随机的人签了证书,我的电脑就会像“我不知道你是谁”一样拒绝证书。

我的计算机上有一个/etc/ssl/certs/GeoTrust_Global_CA.pem文件,我认为这就是我信任此mail.google.com证书的原因。(GeoTrust签署了谷歌的证书,谷歌签署了mail.google.com)。

您将生成证书的前半部分(“jvns.ca!在X日期到期!这是我的公钥!“)。这部分是公开的。

同时,您将为您的证书生成私钥。你要保守秘密,不要把它给任何人看。您将在每次建立SSL连接时使用此密钥。

您向其他计算机信任的证书颁发机构(CA)支付为您签署证书的费用。证书颁发机构应该具有完整性,所以当他们签署证书时,他们应该确保他们颁发证书的人实际拥有域名。

你用你的签名证书来配置你的网站,并用它来证明你就是真正的你!成功!

这个“证书权威机构应该有完整性的东西”我想这就是为什么人们在赛门铁克出现这样的问题时如此生气,他们生成了“对未注册的域和赛门铁克没有域所有者授权的域的测试证书”。

我们要讨论的最后一件事是证书透明度。这是一件非常有趣的事情,而且有一个很好的网站,我几乎肯定会把它搞砸。

所以,我们说证书颁发机构“应该是诚信的”。但是证书颁发机构太多了,我的电脑都信任!他们中的任何一个随时都可以为mail.google.com签署流氓证书。这可不好。

这不是一个假设性的问题-证书透明性网站会谈论CA已被泄露或出错的不止一个实例。

所以,事情是这样的。在任何给定的时间,Google都知道mail.google.com应该存在的所有有效证书(可能只有一个或几个)。因此,证书透明度基本上是一种方法,可以确保如果mail.google.com有他们不知道的证书在流通,他们可以找出。

任何CA每次签署证书时,都应该将其放入全局公共“证书日志”中。

此外,Googlebot会将它在互联网上找到的每个证书都放入证书日志中

如果证书不在日志中,则我的浏览器将不接受它(或在将来停止接受它或其他什么)。

任何人都可以随时查看日志,以确定其中是否存在恶意证书。

因此,如果荷兰CA签署了一个邪恶的mail.google.com证书,他们要么必须将其放入公共日志(Google会发现他们的邪恶方式),要么将其从公共日志中删除(浏览器会拒绝它)。

好吧!。我们已经下载了一个SSL证书,并对其进行了剖析,了解了一些有关它的知识。希望你们中的一些人已经学到了一些东西!

为您的Web服务器上的SSL证书和SSL配置选择正确的设置令人困惑。据我了解,大约有30亿个设置。这是一个SSL实验室对mail.google.com的结果示例,页面上有所有像OLD_TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256这样的东西(真的,这是真的)。我很高兴有像SSL Labs这样的工具来帮助人类理解所有这些。

有人告诉我,如果您不确定要做什么,https://cipherli.st/是一种选择安全SSL配置的方法。我不知道它是好是坏。

还有,让我们加密真的很酷!他们为您的站点提供证书并使其安全,您甚至不需要了解证书在内部是如何工作的!而且是免费的。