最近在看到这么1篇讲授Https原理的文章,语言精炼,通俗易懂,特地将其翻译下,原文在此how does https work
正文开始之前,我先来解释简单的解释下对称加密和非对称加密.
对称加密采取对称密码编码技术,也就是编码和解码采取相同描写字符,即加密和解密使用相同的密钥,实现这类加密技术的算法称对称加密算法。对称加密使用简单,密钥较短,加密和解密进程较快,耗时短,常见的对称加密算法有DES,3DES,lDEA,AES,RC4等。
非对称加密与对称加密不同,其加密算法需要两个密钥:公然密钥(publickey)和私有密钥(private),二者是1对的。如果用公钥加密,只能用私钥才能解密。非对称加密保密性好,但加密和解密花费的时间较长,不合适对大文件加密而只合适对少许的数据加密。常见的非对称加密算法有RSA,ECC,DSA(数字签名)等。
Hash算法是1种单向算法,通过Hash算法可以对目标数据生成1段特定长度、唯1的hash值,但是不能通过这个hash值重新计算出原始的数据,因此也称之为摘要算法,常常被用在不需要数据还原的密码加密和数据完全性校验上,经常使用的算法有MD2,MD4,MD5,SHA等。
现在我们对对称加密,非对称加密及Hash算法做了简单的说明以后,就能够开始了解https的工作原理了。
这篇文章是我在我团队中分享的。很多人不理解https的好处,不理解https的原理,因此我将这篇文章也分享给大家。
在java 1.2时,引入JCR(java 加密扩大)系统,用来负责java中的密钥和证书。
我们都知道,如果我们想要加密或解密1些信息,我们必须要有1个密钥。这好比你想要开门或锁门,必须要有钥匙1样。
在java中,密钥由KeyGenerator或KeyPairGenerator生成。前者用来生成对称密钥,后者用来生成非对称密钥。
在现实中,如果你进入到钻石专卖店中想要买1颗钻石,你怎样知道钻石是真的?作为1个普通人来讲,我们没有钻石方面的知识,但是如果这钻石有个由美国政府颁发的许可证,我们就会相信它是真的。(去过珠宝店的同学都知道,每件珠宝都有自己的鉴定书)
证书的作用也是如此。在计算机世界中,它多是包括1些密钥,是另外一个证书(姑且称之为证书B好了)。这些密钥是我们需要的,而证书B是1个许可证,用来证明这个证书是可信赖的。
做个简短的解释,每一个钻石都有自己的“身份证书”,但是如何说明这个身份证书是合法的,而不是自己捏造的?因此,我们需要1个权威的机构来证明这个钻石的身份证书是合法的,如果这个钻石的身份是合法的,该权威机构就会为其颁发1个“许可证”,这个许可证就相当于上面我们说到的证书B。可以看到,证书B的目的就是证明这个身份证书是这个钻石的身份证书,即证明某某东西是某某东西的东西
问题来了:我们怎样肯定证书B是可信赖的呢?这个问题非常棒。
Android已把将近150个CA根证书(数字证书认证机构认证过的证书)内置在我们手机中。这150多个证书被全球信赖,他们就像是美国的大法官。
这150多个证书类似我们刚才说的证书B,分别用来证明某某东西是某某东西的东西
B证书中里有另外1个证书(姑且称之为C证书),我们通过检查C来肯定C是不是是可信任的。。。通过这个证书链,如果我们找到的最后1个或根证书 和手机中预置的150个证书中某个相同,我们就能够这个证书原件(此处就是B)
这里我对证书链进行说明。证书之间的信任关系是可以嵌套的。比如,CA信任D,D信任C,C信任B
,B信任A。。。这就是证书链。只要我们信任证书链上的头1个证书,那末后续的证书都是可以信任的。这里也就是如果我信任了证书CA,那末后面的D,C,B,A都是可以信任的。这里来打个比方,架设军队中的每一个兵士都只认识自己的直接上级,那末这时候候总司令怎样确认某个兵士是自己部队 当中的呢?总司令(CA)会问的直接下级(D),而司令的直接下级又会找自己的直接下级,顺次往下找…如果最后能找到这个兵士直属上级,那就说明这个兵士是该部队当中的。
附:证书有多种格式
x.509
x.509证书通经常使用于包括1个公钥
PKCS12
PKCS12证书通经常使用来包括1个私钥。因此,PKCS12需要密码才能打开。
现在我们来了解https部份。Https(http over ssl)包括上面提到的加密和证书两部份,被设计用来在Internet安全进行通讯。
如何安全通讯呢?对称加密是我们最早想到的方案:将数据进行加密,然后将加密过的数据和密钥同时传到服务器,服务器使用这个密钥解密加密过后的数据。
现在,我们来看看这类可能的场景:黑客截获了该通讯,这意味着黑客具有了密钥和密文。1旦黑客有了密钥,那末解密密文就是很简单的事情了,我们的数据就这样泄漏了。
上面的解决方案非常不安全。我们继续往下看。使用非对称加密怎样样?
这个想法非常棒:服务端发送给你公钥,你使用这个公钥加密数据。由于服务端是唯1具有私钥的,
这意味着只有服务端能够解密密文。即便黑客截获了该通讯,但由于没有私钥也就没法解密密文。
但是,非对称加密比对称加密更加耗时。为了用户体验,不建议使用非对称加密这类方式来加密/解密大量的数据
。
前两种方案都没法解决我们安全通讯,我们怎样结合上面的两种方案呢?来看看终究方案:
上面这张图片已清楚的展现了HTTPS工作的流程。
1.[Server]生成1对密钥:公钥和私钥,我们称之为“KeyPub”,“KeyPri”
2.[Server]服务端将公钥(KeyPub)发送到客户端
3.[Client]生成1个对称密钥(姑且称之为key2),然后用key2加密数据。
4.[Client]使用公钥(KeyPub)加密key2.这时候,key2是安全的,由于只有服务度有私钥KeyPri
5.[Client]发送用key2加密后的信息及用KeyPub加密过的key2到服务端
6.[Server]服务端使用KeyPri解密得到加密过的key2,得到真实的key2
7.[Server]使用key2解密消息正文。这样,数据就被安全的传输到了服务端。
由于对称加密比非对称加密快,https决定使用对称加密来加密数据,使用非对称加密对称加密生成的密钥,以确保安全。
这篇文章最后并没有很好的说明证书的作用,因此如果你之前没了解过,到此可能产生1些困惑,后面我会再单独写1篇文章来讲明下。
上一篇 浅谈主流热修复技术
下一篇 青岛卫生答题系统刷题脚本使用手册