https原理浅析

原文how-does-https-work

HTTPS是如何工作的

这篇文章来自我在团队内部的分享,许多人对https不是很了解,为什么https的代码是那样的?所以我想把我的观点分享到网上。

cipher(密码)

Java 1.2引入了一个叫JCE(Java Cryptography Extension)的系统,这个系统是java的秘钥和证书的重要组成部分。
我们都知道如果我们想加密或者解密信息,我们需要有秘钥,这就像我们想打开或关闭一扇门,我们要有钥匙一样。
在java里用KeyGenerator生成对称的秘钥,KeyPairGenerator生成非对称秘钥。

  • 对称秘钥:加密和解密用的是同一个key
  • 非对称秘钥:加密和解密用的是不同的秘钥,也就是公钥和私钥
    公钥可以被广泛传播,但是私钥只有它的所有者知道。
    在一个安全的非对称加密模式下,当一个信息被公钥加密之后,只有对应的私钥能解密。所以如果黑客获取了通过公钥加密后的信息,他并不能解密,因为没有对应的私钥。所以信息的传输是安全的。

证书

在现实生活中,如果你进入一个钻石店,想买钻石,你会如何分辨钻石的纯度呢。作为一个普通人,你也许没有钻石的相关知识,但是如果钻石有政府颁发的牌照,你也许会相信这个珠宝店。
证书(Certificate)也是一样,在电脑世界里的证书有一些特征,也就是另外一个证书(我们暂且称它为“B”)。这个证书就是我们需要的,“B”就是那个证明证书是可信的牌照。

证书有许多不同的格式

  • ”x.509”
    x.509证书通常用来包含公钥
  • “PKCS12”
    PKCS12证书也可以用来包含私钥,但是需要一个秘密来打开它。

HTTPS

HTTPS(HTTP+SSL)是为互联网的信息安全传输而设计的

1.如何安全的交流

如何安全的交流,加密是第一步。我加密我的数据,然后把数据和秘钥发送给服务器,然后服务器就可以利用发送的key解密我发送的数据。
http://i2.wp.com/github.com/songzhw/songzhw.github.io/raw/master/imgs/20160113_01.jpg?zoom=2&w=840&ssl=1
现在我们来看一下可能的场景:黑客监听了这次会话,也就意味着获取到了加密后的数据和秘钥,那么要解密就不是件困难的事情。显而易见,信息泄露了。

2.不对称加密

上一种解决方案根本不安全,所以继续,如果用不对称加密会怎么样。
这是个好主意。服务器给你它的公钥,你用公钥来加密数据。因为只有服务器有私钥,所以只有服务器能解密。即使黑客窃取了会话,也没办法解密。
但是,非对称加密比对称加密需要更多的时间来加密和解密数据。从用户体验的角度来看,使用非对称加密来传输整个信息不是最好的解决方案。

3.最终的模式

上面两种方式都行不通,那如果把他们合二为一呢?
http://i0.wp.com/github.com/songzhw/songzhw.github.io/raw/master/imgs/20160113_02.jpg?zoom=2&w=840&ssl=1
上图清晰的展示了https的过程
1.[服务器]生成秘钥对,包含一个公钥(“KeyPub”),一个私钥(“KeyPri”)。
2.[服务器]把“KeyPub”发送给客户端
3.[客户端]生成一个随机的秘钥(“key2”),然后用key2加密握手信息
4.[客户端]用公钥加密key2
5.[客户端]把加密后的握手信息和key2发送给服务端
6.[服务器]用“KeyPri”解密秘钥,得到key2
7.[服务器]用key2解密握手信息,建立连接

结论

因为对称加密比非对称加密快,所以https用对称加密来加密需要传输的数据,用非对称加密来加密对称加密的秘钥来确保安全。用这种方法既保证了加密的速度也保证了传输的安全。
顺便说一句,深入理解https的原理是很重要的,你可以在现实生活中用这种思想来确保你自己的数据的安全性。

转载注明出处或者联系作者
Fork me on GitHub