HTTPS,你不知道的事儿

what is https?

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,所以加密的详细内容就须要SSL。android

看到上面定义,咱们大体也明白了HTTPS其实就是一个通过加密后的HTTP,具备更高的安全性。所以咱们就须要了解一下通过加密的HTTPS是如何工做的?git

加密算法

笔者目前所了解到的算法归为三类:github

  • 对称加密算法

    • 对称密码编码技术
    • 编码和解码采用相同描述字符(加密、解密采用相同密钥)
    • 对称加密使用简单
    • 密钥较短
    • 加密、解密过程较快、耗时短
    • 常见算法有:DES、3DES、IDEA、AES、RC4等等
  • 非对称加密安全

    • 加密须要两个密钥:公钥(publickey)、私钥(privatekey)
    • 公钥加密,私钥才能解密
    • 保密性好
    • 加密、解密过程较慢、耗时多
    • 适合对少许数据加密
    • 常见算法有:RSA、ECC、DSA等等
  • Hash算法加密服务器

    • 单向加密
    • 经过Hash算法对数据加密生成惟一Hash值,此值没法计算出原来的数据
    • 频繁应用于数据完整性检验
    • 经常使用算法有:SHA、MD二、MD四、MD5等等

how to work

在弄清HTTPS如何工做前,我须要了解两个概念:性能

密钥

  • 加密或解密都须要一个密钥,正如开门或锁门都须要一把钥匙
  • Java中密钥由KeyGenerator或KeyPairGenerator生成的
  • 对称密钥(KeyGenerator生成的)编码

    • 使用同一个密钥加密或加密
  • 非对称密钥(KeyPairGenerator生成的)加密

    • 公钥(pulickey)普遍用作传播,主要用作加密,私钥(privatekey)用作解密(公钥加密后的数据只有私钥才能解密)

证书

  • 证书是一个许可证,用来证实这个证书的可信赖的
  • 证书中可能内置密钥
  • android系统内置了不少证书,证书之间存在必定信任关系,信任是嵌套的,为了确保密钥的更高安全性

了解上面两个概念后,接下来咱们来了解下HTTPS如何安全通讯?前面在定义HTTPS时讲到HTTPS是一种加密的HTTP,为了更高的安全性,没错,密钥和证书正是特定设计来实现HTTPS安全通讯的。设计

说到安全通讯,咱们可能先想到对称加密算法,思路以下:

  • 将数据加密
  • 将加密后的数据和密钥同时传给服务器
  • 服务器利用传来的密钥解密数据

以上这种方案存在很大漏洞,假如加密后的数据和密钥被黑客给截获,黑客拿着密钥直接把加密后的数据给解密了,这样数据就泄漏出去了。

既然对称算法不行,那就来试试非对称算法,思路以下:

  • 服务器将公钥发给客户端
  • 客户端将数据采用公钥加密而后发送给服务器
  • 服务器收到客户端加密数据,用私钥解密数据

以上这个方案貌似不错,看过前面加密算法说明的童鞋应该清楚非对称算法有缺陷,就是加密、解密过程较慢、耗时多,影响用户体验。

那有木有更好的方案呢?必须有啦~HTTPS最终采用的安全通讯方案,你们看清楚啦

思路以下:

  • 服务器生成一对非对称加密密钥:公钥(publickey)、私钥(privatekey)
  • 服务器将公钥(publickey)发送给客户端
  • 客户端生成对称加密密钥(clientkey),利用clientkey给数据加密
  • 客户端使用服务器传来的公钥(publickey)给clientkey进行加密、此时clientkey是安全的,由于只有服务器才有私钥(private)能解密它
  • 客户端发送用clientkey加密过的数据和用公钥(publickey)加密过的clientkey给服务器
  • 服务器使用私钥(privatekey)解密用公钥(publickey)加密过的clientkey,获得真的clientkey
  • 使用clientkey解密数据,这样数据就安全地从客户端传给服务器了。

总结

因为对称加密算法比非对称加密算法效率高、性能好,https决定采用对称加密算法来加密解密数据,使用非对称加密算法加密解密对称算法密钥,以确保通讯安全。

关于做者

相关文章
相关标签/搜索