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
证书很多,我用的是Let’s Encrypt
Let’s Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用, 是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起, 主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持
- 搭建环境 Center OS 6.4, Nginx 1.12.0, certbot
- 安装Nginx
因为配置
https
需要nginx
的ssl
模块的支持,所以编译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.conf
与mime.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/
- 安装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
. 效果如下: