http=>https的转变

2014年百度开始转https,2015年百度实现了搜索全站HTTPS服务,致力于向广大互联网用户提供最好的HTTPS服务.同年阿里系也迁移https. 新版的浏览器,基本上都对于http的网站表单输入进行了不安全的提示.而随着移动设备的发展,以及公共wifi热点,各种劫持也时有发生, https可以很好的解决劫持的问题.所以启用https非常有必要.

https的概念(来自百度百科):

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL. 它是一个URI scheme(抽象标识符体系),句法类同http:体系.用于安全的HTTP数据传输.https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间).这个系统的最初研发由网景公司(Netscape)进行,并内置于其浏览器Netscape Navigator中,提供了身份验证与加密通讯方法. Https是基于Http添加一层加密的模块.即SSL证书以及其对应的验证/加解密密模块.

扩展阅读: 全球HTTPS时代已来,你跟上了吗?

https示意图

https示意图

上图主要说明了客户端到服务端数据的交互是怎么个处理过程.

https搭建

免费的https证书很多,我用的是Let’s Encrypt

Let’s Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用, 是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起, 主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持

  1. 搭建环境 Center OS 6.4, Nginx 1.12.0, certbot
  2. 安装Nginx 因为配置https需要nginxssl模块的支持,所以编译nginx的时候需要指定ssl module:
    $ cd /usr/local
    $ sudo wget http://nginx.org/download/nginx-1.12.0.tar.gz
    $ sudo tar -zxvf nginx-1.12.0.tar.gz
    $ cd nginx-1.12.0
    $ sudo ./configure --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module
    $ sudo make
    $ sudo make install
    

    执行configure的时候,指定了几个常用的moudle: http_stub_status_module:运行状态; with-http_ssl_module:https所需要的模块; http_realip_module:方便获取使用代理的客户端的真实ip; with-http_gzip_static_module:允许发送以“.gz”作为文件扩展名的预压缩文件,以替代发送普通文件; 如果安装过程中没有什么报错信息的话,nginx应该已经安装到了/usr/local/nginx/目录. 测试nginx`的安装版本

    $ nginx -v
    nginx version: nginx/1.12.0
    

    如果有了如上的提示,则说明已经成功安装nginx. 为了方便配置(后续certbot会默认到/etc/nginx/nginx.conf文件),我们把nginx的配置文件nginx.confmime.types(可选)提取到/etc/nginx/目录下. 提取配置文件后需要设置下nginx的配置加载:

    sudo nginx -c /usr/local/nginx/conf/nginx.conf
    

    注意:certbot会扫描nginx.conf中配置的server域名,然后手动选择,所以如果nginx.conf没有配置,是无法创建的.

    $ cd /etc/
    $ sudo mkdir nginx
    $ sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/mime.types nginx/
    
  3. 安装certbot certbot是一个使用Let's Encrypt自动化部署https证书的工具.
    $ cd /usr/local
    $ sudo wget https://dl.eff.org/certbot-auto
    $ sudo chmod a+x certbot-auto
    `#` 此处会自动引用/usr/local/nginx/conf/nginx.conf进行配置,配置过程中会先选择要配置的服务(域名),然后配置是否强制转换`https`
    $ sudo ./certbot-auto --nginx
    

    此处certbot会把nginx.conf中的server添加如下内容,此处以域名www.domain.com为例

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.domain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.domain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    

    使用sudo nginx -s reload重载nginx,即可访问https://www.domain.com. 效果如下: https地址栏显示