HTTPS, 妈妈再也不用担心我的网站被运营商劫持了

HTTPS:更安全的时代

HTTP协议的问题

HTTP 日常使用极为广泛的协议,它很优秀且方便,但还是存在一些问题,如:
1. 明文通信,内容可以直接被窃听
2. 无法验证报文的完整性,可能被篡改
3. 通信方身份不验证,可能遇到假的客户端或服务器

明文通信,内容可以直接被窃听

HTTP是明文传输的,也就意味着,介于发送端、接收端中间的任意节点都可以知道你们传输的内容是什么。这些节点可能是路由器、代理等。

举个最常见的例子,用户登陆。用户输入账号,密码,采用HTTP的话,只要在代理服务器上做点手脚就可以拿到你的密码了。

用户登陆 --> 代理服务器(做手脚)--> 实际授权服务器

在发送端对密码进行加密?没用的,虽然别人不知道你原始密码是多少,但能够拿到加密后的账号密码,照样能登陆。

无法验证报文的完整性,可能被篡改

HTTP 协议是无法证明通信报文的完整性的。因此请求或响应在途中随时可能被篡改而不自知,也就是说,没有任何办法确认,发出的请求/响应和接收到的请求/响应是前后相同的。
   比如浏览器从某个网站上下载一个文件,它是无法确定下载的文件和服务器上有些话的文件是同一个文件的。文件在传输过程中被掉包了也是不知道的。    这种请求或响应在传输途中,被拦截、篡改的攻击就是中间人攻击。某运营商就经常干这种事,打开百度、网易什么的,中间直接来个大大的广告,你懂的…

于是就有了HTTPS协议来帮我们解决HTTP协议的这些问题。

什么是HTTPS

HTTPS 也就是 HTTP 加上加密处理、认证以及完整性保护。HTTP 协议在通信过程如果没有使用加密的明文,比如在 Web 页面输入手机号,如果这条通信线路再窃听,那么手机号就被别人知道了。
另外,在 HTTP 中,服务器和客户端都无法确认通信方,说不定就是正在和某个骗子通信呢。还得考虑报文在通信过程中有没有被篡改。

为了解决上面这些问题,可以在 HTTP 上加入加密处理和认证机制。这种添加了加密及认证机制的 HTTP 就叫做 HTTPS(HTTP Secure)。 使用 HTTPS 通信时,用的是 https://,而不是 http://。另外,当浏览器访问 HTTPS 的 Web 网站时,浏览器地址栏会出现一个带锁的标记。如下面就是 Chrome 的样式:

Chrome 上的安全网站

HTTPS怎么实现更安全

HTTPS相对于HTTP有哪些不同呢?其实就是在HTTP跟TCP中间加多了一层加密层TLS/SSL。

HTTPS是HTTP披了层SSL的外壳

HTTPS 并非是应用层的新协议,而是 HTTP 通信接口部分用 SSL 协议代替而已。
通俗的讲,TLS、SSL其实是类似的东西,SSL是个加密套件,负责对HTTP的数据进行加密。TLS是SSL的升级版。现在提到HTTPS,加密套件基本指的是TLS。

  • 传输加密的流程

原先是应用层将数据直接给到TCP进行传输,现在改成应用层将数据给到TLS/SSL,将数据加密后,再给到TCP进行传输。

SSL 是独立于 HTTP 的协议,所以其他类似于 HTTP 的应用层 SMTP 等协议都可以配合 SSL 协议使用,也可以给它们增强安全性。

SSL 加密协议

HTTPS是如何加密数据

数据在传输过程中,很容易被窃听。加密就是保护数据安全的措施。一般是利用技术手段把数据变成乱码(加密)传送,到达目的地后,再利用对应的技术手段还原数据(解密)。 加密包含算法和密钥两个元素。算法将要加密的数据与密钥(一窜数字)相结合,产生不可理解的密文。由此可见,密钥与算法同样重要。

加密分为对称加密、非对称加密(也叫公开密钥加密)。

对称加密

对称加密的意思就是,加密数据用的密钥,跟解密数据用的密钥是一样的。 对称加密的优点在于加密、解密效率通常比较高。缺点在于,数据发送方、数据接收方需要协商、共享同一把密钥,并确保密钥不泄露给其他人。此外,对于多个有数据交换需求的个体,两两之间需要分配并维护一把密钥,这个带来的成本基本是不可接受的

非对称加密

非对称加密的意思就是,加密数据用的密钥(公钥),跟解密数据用的密钥(私钥)是不一样的。 什么叫做公钥呢?其实就是字面上的意思——公开的密钥,谁都可以查到。因此非对称加密也叫做公开密钥加密。 相对应的,私钥就是非公开的密钥,一般是由网站的管理员持有。 公钥、私钥两个有什么联系呢? 简单的说就是,通过公钥加密的数据,只能通过私钥解开。通过私钥加密的数据,只能通过公钥解开。 很多同学都知道用私钥能解开公钥加密的数据,但忽略了一点,私钥加密的数据,同样可以用公钥解密出来。而这点对于理解HTTPS的整套加密、授权体系非常关键。

HTTPS握手流程

上面啰啰嗦嗦讲了一大通,HTTPS如何确保数据加密传输的安全的机制基本都覆盖到了,太过技术细节的就直接跳过了。 最后还有最后两个问题: 1. 网站是怎么把证书给到用户(浏览器)的 2. 上面提到的对称密钥是怎么协商出来的
 上面两个问题,其实就是HTTPS握手阶段要干的事情。HTTPS的数据传输流程整体上跟HTTP是类似的,同样包含两个阶段:握手、数据传输。 1. 握手:证书下发,密钥协商(这个阶段都是明文的) 2. 数据传输:这个阶段才是加密的,用的就是握手阶段协商出来的对称密钥

HTTPS带来的负面影响

HTTPS 速度慢

   HTTPS 使用 SSL 通信,所以它的处理速度会比 HTTP 要慢。
   一是通信慢。它和 HTTP 相比,网络负载会变慢 2 到 100倍。除去和 TCP 连接、发送 HTTP 请求及响应外,还必须进行 SSL 通信,因此整体上处理通信量会不可避免的增加。    二是 SSL 必须进行加密处理。在服务器和客户端都需要进行加密和解密的去处处理。所以它比 HTTP 会更多地消耗服务器和客户端的硬件资源。不过随着目前硬件的快速发展,HTTPS 的资源消耗问题将不再是什么太大问题了。另外,随着移动互联网的快速发展,用户信息泄露情况日益严重,也是非常有必要采用 HTTPS 来进行通信的。 Apple 就在 iOS9 中鼓励应用积极使用 HTTPS。

如何购买SSL证书

SSL证书等级

从证书认证的等级来分,ssl证书可以分为DV, OV和EV三种:

1、DV是Domain Validation 的缩写,意思就是对网站域名所有权进行验证。CA认证机构会向域名持有者的邮箱发送相应的邮件,以确认证书和域名的所有权关系。其特点是简单快捷,价格便宜,缺点是无法保证网站经营者的身份,因此一般仅用来提供数据加密的功能,属于Class 1验证的证书。

2、OV是Organization Validation 的缩写,这种证书在颁发的时候会对网站所有单位的身份和域名的所有权进行证实行验证,所以一般电子商务类的网站往往会做OV的认证。价格当然也会比较昂贵,证书颁发周期也会比较久,属于Class 2或者Class 3 验证的证书。

3、EV是Extended Validation 的缩写,也是最严格的身份验证,此证书审核证书申请人对域名的所有权,以及详细的企业/组织相关信息审核,当用户在访问通过EV认证的网站时候,浏览器的显示为绿色,当然价格也是相当的昂贵,属于Class 4 验证的证书。

以上域名证书一般都支持一个或多个域名,还有一种SSL证书支持泛域名(Multiple Subdomains),就是通配符SSL证书(Wildcard SSL Certificates)。

国内SSL证书提供商

freessl.Wosign

Wosign.com

国外免费SSL证书提供商

LetsEncrypt.org Mozilla、思科、Akamai、IdenTrust、EFF 和密歇根大学研究人员联合宣布了 Let’s Encrypt CA 项目,计划为网站提供免费的基本 SSL 证书,以加速互联网从 HTTP 向 HTTPS 过渡。Let’s Encrypt CA 将由非赢利组织 Internet Security Research Group (ISRG) 运营,于 2015 年夏天开始向任何需要加密证书的网站自动发放免费的 SSL 证书。

CloudFlare.com

StartSSL.com StartCom公司提供免费StartSSL(Class 1)证书,有效期1年,证书到期后可以免费续期,它的根证书很久之前就被一些具有开源背景的浏览器支持(Firefox浏览器、谷歌Chrome浏览器、苹果Safari浏览器等)。

comodo.com

国外收费SSL证书提供商

GoDaddy.com

GeoTrust.com GeoTrust是全球第二大数字整合速颁发机构(CA)

RapidSSL.com RapidSSL是GeoTrust旗下的SSL证书颁发机构。

AlphaSSL.com 全球著名SSL证书颁发机构GlobalSign旗下的信息安全产品,是专业的SSL证书提供商

Symantec.com 赛门铁克SSL前身为VeriSign

价格比较

价格因网站而发生变动,仅供参考

提供商 | 价格区间/年 ------- | ------- GoDaddy.com | $69.99 - $299.99
Symantec.com | $399 - $1999
GeoTrust.com | $149 - 499
RapidSSL.com | $49 - $149
AlphaSSL.com | $49 - $149
WoSign.com(国内) | $80 - $1434

如何配置SSL证书

一般证书提供商会提供两个文件,crt和key文件,以下假设这两个文件已经上传到服务器的/root目录下 /root/ssl.key/root/ssl.crt

设置证书权限
chmod 600 /root/ssl.key  
server  
{
listen 80;

listen 443 ssl;  
ssl on;  
        ssl_certificate /root/ssl.crt;
        ssl_certificate_key /root/ssl.key;
}

如果是我们自己的网站可以使用免费的 http://freessl.wosign.com

以下是岁宝众包配置完成以后的签名信息

安全的岁宝网站

蒋磊

Read more posts by this author.

中国浙江省杭州市

Subscribe to The Terminus Blog

Get the latest posts delivered right to your inbox.

or subscribe via RSS with Feedly!