作者:HelloGitHub-追梦人物

文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库

HTTP 报文以明文形式传输,如果你的网站只支持 HTTP 协议,那么就有可能遭受到安全攻击。你可以使用 Google 浏览器打开一个 HTTP 协议网站,会发现 Chrome 在网址的左边将这个网站标记为不安全。

HTTPS 为 HTTP 报文提供了一个加密传输的通道,这样攻击者就无法窃听或者篡改传输的内容。要启用 HTTPS,必须向一个可信任机构申请一个 HTTPS 证书。专业的证书申请需要收费,不过对于个人博客网站来说,有很多免费的证书申请机构。比如 Let’s Encrypt,它提供了免费的证书申请服务,申请过程十分简单,只需要运行几条命令即可,而且证书到期后支持自动续期,可谓一劳永逸。接下来我们就是用 Let’s Encrypt 提供的工具来申请免费的 HTTPS 证书。

首先安装 Let’s Encrypt 提供的证书申请工具。登录 https://certbot.eff.org/ 选择我们博客网站使用的服务器软件和操作系统。教程中以 Nginx 和 CentOS 7 为例:

首先安装必要工具:

$ 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 运行的服务申请证书更加简单方便。

然后运行证书申请命令:

$ 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。


『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~

免费申请 HTTPS 证书,开启全站 HTTPS的更多相关文章

  1. 【原创】免费申请SSL证书【用于HTTPS,即是把网站从HTTP改为HTTPS,加密传输数据,保护敏感数据】

    今天公司有个网站需要改用https访问,所以就用到SSL证书.由于沃通(以前我是在这里申请的)暂停了免费的SSL证书之后,其网站推荐了新的一个网站来申请证书,所以,今天因为刚好又要申请一个证书,所以, ...

  2. 超详细网站博客域名和二级域名、子域名升级HTTPS免费申请SSL证书配置nginx指南

    随着互联网的飞速发展,我们的工作生活已经离不开互联网,HTTP虽然使用极为广泛, 但是存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,网络交易等网站应用中 ...

  3. 如何申请https证书、搭建https网站

    如何申请https证书.搭建https网站 随着国内搜索引擎巨头百度启用全站https加密服务,全国掀起了网站https加密浪潮.越来越多的站点希望通过部署https证书来解决“第三方”对用户隐私的嗅 ...

  4. 通过Cloudflare开启全站https

    Cloudflare 添加域名后,会自动生成通用证书,快速开启全站HTTPS,服务端不用做任何修改,还可以选择多种开启模式 一.注册Cloudflare账号 直接打开网站:https://www.cl ...

  5. StartCom 申请 SSL 证书及 Nginx HTTPS 支持配置全攻略

    来源:https://www.williamyao.com/index.php/archives/1397/ 前言 最近收到 StartCom 的邮件,数字证书即将过期,想到去年在 StartSSL ...

  6. 借助腾讯云CDN开启全站https及问题解决分享

    版权声明:本文由张戈原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/78 来源:腾云阁 https://www.qcloud ...

  7. Docker Compose + Traefik v2 快速安装, 自动申请SSL证书 http转https 初次尝试

    前言 昨晚闲得无聊睡不着觉,拿起服务器尝试部署了一下Docker + Traefik v2.1.6 ,以下是一些配置的总结,初次接触,大佬勿喷. 我的系统环境是 Ubuntu 18.04.3 LTS ...

  8. 阿里云-域名免费申请ssl证书过程

    1.运行证书服务docker docker run --entrypoint="/bin/sh" -it --name certbotsh certbot/certbot:late ...

  9. Centos7 通配符HTTPS证书申请 实测 笔记

    环境: 免费通配符HTTPS证书网址: https://letsencrypt.org/ 1.下载证书申请工具 [root@centos ~]# mkdir /opt/letsencrypt -p [ ...

随机推荐

  1. flutter无线调试与打包

    1.WIFI连接设备 设备打开开发者选项 -> 点击WIFI调试 ->  项目目录下输入终端命令: adb connect   设备ip地址:[端口号(一般是5555)] 2.apk打包 ...

  2. (五十五)c#Winform自定义控件-管道

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  3. C++中的I/O输入输出问题

    C++ I/O navigation: 1.文件输入输出 2.string流 1.输入输出 C++语言不直接处理输入输出,而是通过一些标准库中类型.从设备(文件,控制台,内存)中读取数据,向设备中写入 ...

  4. NOIP2003[提高组] 加分二叉树 题解

    题意 给出一个有n个节点的二叉树的中序遍历,以当前节点为根的树的分数等于左节点分数* 右节点分数+根节点分数,叶子节点的分数等于它本身,求最大分数,以及分数最大的树的先序遍历 一道区间dp题,因为要求 ...

  5. 分析一次double强转float的翻车原因

    背景 人逢喜事精神爽,总算熬到下班撩~~ 正准备和同事打个招呼回家,被同事拖住问了.

  6. go 学习笔记之无心插柳柳成荫的接口和无为而治的空接口

    如果你还了解编程概念中的接口概念,那么我建议你最好还是先阅读上一篇文章.详情请点击 go 学习笔记之万万没想到宠物店竟然催生出面向接口编程? ,否则的话,请自动忽略上文,继续探索 Go 语言的接口有什 ...

  7. zabbix监控进程和端口存活脚本

    自定义脚本监控端口和进程,脚本process_port_check.sh 内容: [root@mysql02 data]# cat test.sh #!/bin/bash ############## ...

  8. 分库分表之后,id 主键如何处理?

    其实这是分库分表之后你必然要面对的一个问题,就是 id 咋生成?因为要是分成多个表之后,每个表都是从 1 开始累加,那肯定不对啊,需要一个全局唯一的 id 来支持.所以这都是你实际生产环境中必须考虑的 ...

  9. ERROR IN RESOURCESTART

    TOMCAT启动时出现这个问题,试遍了网上所有的方法就是不管用,卸载tomcat重新安装即可

  10. Golang 数组 切片 字典 基本知识点

    数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...