这篇文章,让外行人理解https

植夫发布

今天有人告知,我的博客网站不能访问了,真是着急了,求职期间简历作品集都在这里,一看是SSL证书过期了,好吧,通过百度搜索,一边理解概念,一边寻找解决方案, Let's Encrypt免费证书,很简单的解决了问题,但是没有一点程序基础的理解起来这些技术术语,真的很难,节选的这篇文章让我醍醐灌顶,在这里做个记录。 

什么是https?

在现实中,如果你进入到钻石专卖店中想要买一颗钻石,你怎么知道钻石是真的?作为一个普通人来说,我们没有钻石方面的知识,但是如果这钻石有个由美国政府颁发的许可证,我们就会相信它是真的。(去过珠宝店的同学都知道,每件珠宝都有自己的鉴定书)

证书的作用也是如此。在计算机世界中,它可能是包含一些密钥,是另一个证书(姑且称之为证书B好了)。这些密钥是我们需要的,而证书B是一个许可证,用来证明这个证书是可信赖的。

做个简短的解释,每个钻石都有自己的“身份证书”,但是如何说明这个身份证书是合法的,而不是自己伪造的?因此,我们需要一个权威的机构来证明这个钻石的身份证书是合法的,如果这个钻石的身份是合法的,该权威机构就会为其颁发一个“许可证”,这个许可证就相当于上面我们说到的证书B。可以看到,证书B的目的就是证明这个身份证书是这个钻石的身份证书,即证明某某东西是某某东西的东西

问题来了:我们怎么确定证书B是可信赖的呢?这个问题非常棒。

Android已经把将近150个CA根证书(数字证书认证机构认证过的证书)内置在我们手机中。这150多个证书被全世界信赖,他们就像是美国的大法官。

这150多个证书类似我们刚才说的证书B,分别用来证明某某东西是某某东西的东西

B证书中里有另外一个证书(姑且称之为C证书),我们通过检查C来确定C是否是可信任的。。。通过这个证书链,如果我们找到的最后一个或根证书 和手机中预置的150个证书中某个相同,我们就可以这个证书原件(此处就是B)

这里我对证书链进行说明。证书之间的信任关系是可以嵌套的。比如,CA信任D,D信任C,C信任B 
,B信任A。。。这就是证书链。只要我们信任证书链上的头一个证书,那么后续的证书都是可以信任的。这里也就是如果我信任了证书CA,那么后面的D,C,B,A都是可以信任的。这里来打个比方,架设军队中的每个士兵都只认识自己的直接上级,那么这时候总司令怎么确认某个士兵是自己部队 当中的呢?总司令(CA)会问的直接下级(D),而司令的直接下级又会找自己的直接下级,依次往下找…如果最后能找到这个士兵直属上级,那就说明这个士兵是该部队当中的。

附:证书有多种格式

  • x.509 
    x.509证书通常用于包含一个公钥
  • PKCS12 
    PKCS12证书通常用来包含一个私钥。因此,PKCS12需要密码才能打开。

Https

现在我们来了解https部分。Https(http over ssl)包含上面提到的加密和证书两部分,被设计用来在Internet安全进行通信。

如何安全的通信?

如何安全通信呢?对称加密是我们最先想到的方案:将数据进行加密,然后将加密过的数据和密钥同时传到服务器,服务器使用这个密钥解密加密过后的数据。 

现在,我们来看看这种可能的场景:黑客截获了该通信,这意味着黑客拥有了密钥和密文。一旦黑客有了密钥,那么解密密文就是很简单的事情了,我们的数据就这样泄漏了。

最终方案: 

1.[Server]生成一对密钥:公钥和私钥,我们称之为“KeyPub”,“KeyPri” 
2.[Server]服务端将公钥(KeyPub)发送到客户端 
3.[Client]生成一个对称密钥(姑且称之为key2),然后用key2加密数据。 
4.[Client]使用公钥(KeyPub)加密key2.这时,key2是安全的,因为只有服务度有私钥KeyPri 
5.[Client]发送用key2加密后的信息及用KeyPub加密过的key2到服务端 
6.[Server]服务端使用KeyPri解密得到加密过的key2,得到真正的key2 
7.[Server]使用key2解密消息正文。这样,数据就被安全的传输到了服务端。

原文地址: https://blog.csdn.net/dd864140130/article/details/52598107

Let’s Encrypt 简介

如果要启用HTTPS,我们就需要从证书授权机构处获取一个证书,Let’s Encrypt 就是一个 证书授权机构 。我们可以从 Let’s Encrypt 获得网站域名的免费的证书。


发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据