做者:HelloGitHub-追梦人物css
文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库html
HTTP 报文以明文形式传输,若是你的网站只支持 HTTP 协议,那么就有可能遭受到安全攻击。你可使用 Google 浏览器打开一个 HTTP 协议网站,会发现 Chrome 在网址的左边将这个网站标记为不安全。python
HTTPS 为 HTTP 报文提供了一个加密传输的通道,这样攻击者就没法窃听或者篡改传输的内容。要启用 HTTPS,必须向一个可信任机构申请一个 HTTPS 证书。专业的证书申请须要收费,不过对于我的博客网站来讲,有不少免费的证书申请机构。好比 Let’s Encrypt,它提供了免费的证书申请服务,申请过程十分简单,只须要运行几条命令便可,并且证书到期后支持自动续期,可谓一劳永逸。接下来咱们就是用 Let’s Encrypt 提供的工具来申请免费的 HTTPS 证书。nginx
首先安装 Let’s Encrypt 提供的证书申请工具。登陆 certbot.eff.org/ 选择咱们博客网站使用的服务器软件和操做系统。教程中以 Nginx 和 CentOS 7 为例:git
首先安装必要工具:github
$ sudo yum -y install yum-utils
$ sudo sudo yum install -y certbot python2-certbot-nginx
复制代码
certbot python2-certbot-nginx 是 Let’s Encrypt 提供的 HTTPS 证书申请的工具,python2-certbot-nginx 是专门针对 Nginx 的插件,使得 Nginx 运行的服务申请证书更加简单方便。web
而后运行证书申请命令:django
$ sudo certbot --nginx
复制代码
注意编程
经测试,运行上述命令后有可能报 ImportError: No module named 'requests.packages.urllib3' 的错误,这是因为 requests 和 urlib3 版本太低所致(能够参考这个 issue 的讨论),解决办法是重装它们,运行下面的命令:浏览器
$ pip uninstall requests $ pip uninstall urllib3 $ yum remove python-urllib3 $ yum remove python-requests 复制代码
而后从新安装 certbot,因为它依赖上面两个包,因此重装时会一并装上:
$ sudo yum install -y certbot python2-certbot-nginx 复制代码
从新执行证书申请命令:sudo certbot --nginx
会有一系列交互式的提示,首先会让你输入邮箱,用于订阅。而后输入 a 赞成他们的政策。
接着 certbot 会自动扫描出来域名,根据提示输入想开启 HTTPS 的域名标号:
Which names would you like to activate HTTPS for?
1: django-blog-tutorial-v2-demo.zmrenwu.com
Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1
而后 certbot 会作一个域名校验,证实你对这个域名有控制权限。验证经过后,Let's Encrypt 就会把证书颁发给你。
最后会提示你是否把 HTTP 重定向到 HTTPS,固然选择是,这样 certbot 会自动帮咱们修改 Nginx 的配置,将 HTTP 重定向到 HTTPS,若是用户使用 HTTP 协议访问咱们的博客网站,就会重定向到 HTTPS 协议访问,确保安全性。
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration.
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/django-blog-tutorial-v2.conf
certbot 申请的证书只有 3 个月有效期,不过没有关系,certbot 能够无限续期,咱们增长一条 crontab 定时任务用来执行 certbot 自动续期任务,这样一次申请,终生使用。
打开 /etc/crontab,增长定时任务:
echo "0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && certbot renew" | sudo tee -a /etc/crontab > /dev/null
复制代码
这里配置天天 12 点执行自动续期命令。
因为全站开启了 HTTPS,所以须要把网站中非 HTTPS 的内容(好比经过 HTTP 协议请求的外部资源)改成 HTTPS,咱们的博客中目前有一处引入外部图标库的样式文件是以 HTTP 协议引入的,须要改成 HTTPS:
base.html
<link rel="stylesheet" href="https://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">
复制代码
以上,简单几步,就开启了全站 HTTPS。
『讲解开源项目系列』——让对开源项目感兴趣的人再也不畏惧、让开源项目的发起者再也不孤单。跟着咱们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系咱们、加入咱们,让更多人爱上开源、贡献开源~