为搭建在ParrotSec上的网站配置https

让你在ParrotSec上的网站拥抱https

ParrotSec+nginx+certbot+Let’s encrypt+crontab最佳实践


之前在论坛里发布了一篇《基于ParrotSec从头开始搭建一个LNMP服务器环境》,有兴趣的大佬可以看一下。

这一篇算是上一篇的进阶,在有一个LNMP的服务器环境之后,你可以随意的去写一些东西,但是现在Chrome之类的浏览器对于http协议的网站是越来越不友好了,国内的电信运营商也各种劫持,你常常能看到一个不安全的图标,你会不会想,凭什么我们的网站就是不安全的呢?让我们来一起走近https,让你的网站挂上绿色小锁。


背景知识介绍

下面引用了一段摘自知乎 《HTTPS 简介及使用官方工具 Certbot 配置 Let’s Encrypt SSL 安全证书详细教程》的背景知识,感谢主动分享知识的大佬!

1、http 和 https 是什么?
简单来说,http 是一个传输网页内容的协议,比如你看到的 http 开头的网站 网易,其网页上的文字、图片、 CSS 、 JS 等文件都是通过 http 协议传输到我们的浏览器,然后被我们看到。

而 https 可以理解为“ HTTP over SSL/TLS ”,好端端的 http 为什么需要“ over SSL/TLS ”呢,因为 http 是明文传输的,通过 http 协议传输的内容很容易被偷看和篡改,为了安全(你肯定不想被人偷看或者篡改网页内容吧,比如网站银行密码什么的。)就为 http 协议再加上了一层 SSL/TLS 安全协议,所以就有了 https 。


2、SSL/TLS 是什么?
“ HTTP over SSL/TLS ”字面意思就是带“安全套接层”的 http 协议,内心纯洁的同学也可以理解为“带安全套的 http ”,因为带了安全套,所以当然会比较安全(/(ㄒoㄒ)/~~)。其中 SSL 是“ Secure Sockets Layer ” 的缩写,是“安全套接层”的意思。 TLS 是 “Transport Layer Security” 的缩写,是 ” 传输层安全协议 ” 的意思。 SSL 和 TLS 是同一个东西的不同阶段,理解为同一个东西也行,都是安全协议就对了。


3、为什么要部署 https?
说到底,就是 https 更安全。甚至为了安全,一个专业可靠的网站, https 是必须的。 Firefox 和 Chrome 都计划将没有配置 SSL 加密的 http 网站标记为不安全(貌似 Firefox 50 已经这么干了),目前它们也正在联合其他相关的基金会与公司推动整个互联网 https 化,现在大家访问的一些主要的网站。如 Google 多年前就已经全部启用 https ,国内的淘宝、搜狗、知乎、百度等等也全面 https 了。甚至 Google 的搜索结果也正在给予 https 的网站更高的排名和优先收录权。

4、怎么部署 https 呢?
你只需要有一张被信任的 CA ( Certificate Authority )也就是证书授权中心颁发的 SSL 安全证书,并且将它部署到你的网站服务器上。一旦部署成功后,当用户访问你的网站时,浏览器会在显示的网址前加一把小绿锁,表明这个网站是安全的,当然同时你也会看到网址前的前缀变成了 https ,不再是 http 了。

5、怎么获得 SSL 安全证书呢?
理论上,我们自己也可以签发 SSL 安全证书,但是我们自己签发的安全证书不会被主流的浏览器信任,所以我们需要被信任的证书授权中心( CA )签发的安全证书。而一般的 SSL 安全证书签发服务都比较贵,比如 Godaddy 、 GlobalSign 等机构签发的证书一般都需要20美金一年甚至更贵,不过为了加快推广 https 的普及, EEF 电子前哨基金会、 Mozilla 基金会和美国密歇根大学成立了一个公益组织叫 ISRG ( Internet Security Research Group ),这个组织从 2015 年开始推出了 Let’s Encrypt 免费证书。这个免费证书不仅免费,而且还相当好用,所以我们就可以利用 Let’s Encrypt 提供的免费证书部署 https 了。

注:对 https  、数字证书及 CA 的工作原理感兴趣的同学可以阅读编程随想的系列文章。

image

使用 Let’s encrypt 签发证书

上面提到了可以通过Let’s encrypt来部署https,那么怎么部署呢?

ISRG 的发起者 EFF (电子前哨基金会)为 Let’s Encrypt 项目发布了一个官方的客户端 Certbot ,利用它可以完全自动化的获取、部署和更新安全证书。


image

使用certbot自动获取Let’s encrypt签发的https证书

如果你阅读过官方教程的话,你就会发现,教程教的他娘的根本不好使。所以我们针对ParrotSec和我们上一篇中搭建好的LNMP环境,换个思路找方法。

1. 对于我来说,Debian最出名的是丰富的源,所以我们尝试通过Parrot源来安装letsencrypt包:

sudo apt update && sudo apt dist-upgrade && sudo apt install letsencrypt

2. 安装完成之后,不可以直接进行官方教程说的certbot-auto --nginx,你可以试试,反正我的报错了。

需要安装python-certbot-nginx包,这个是certbot的一个nginx扩展(插件),你可以通过这个来自动配置nginx。

apt install python-certbot-nginx

3. 使用letsencrypt(也就是debian下的certbot)进行指定域名的https自动配置

sudo letsencrypt --nginx

或者

sudo certbot --nginx #不推荐,我就是觉得安装的letsencrypt不用而去直接用certbot不好

输入这个命令之后,一步步按提示输入一个邮箱(只有第一次需要)、域名、是否自动配置重定向到https(推荐选择redirect),全部完成后会提示“Congudulations!”和一大堆英文(文化强国、科技强国啊同志们!!)

4. 检验

可以使用全球知名https检测工具,或者直接浏览器输入不加https的域名访问试试。

image


为Let’s encrypt签发的证书续签

到此为止,你的网站已经可以通过https访问了,Let’s encrypt 是不是个大福利~
但是强归强,它也有缺陷,那就是只有三个月有效期,所以我们下一步要考虑的,就是怎么为我们的https证书续签。

1. 通过certbot直接为Let’s encrypt续签

sudo letsencrypt renew --dry-run

据说

Certbot 会帮你启动一个定时任务,在证书过期时自动更新。

但是总感觉还不保险,万一重启系统了呢?

2. 通过crontab配置定时任务

sudo crontab -l #查看定时任务
sudo crontab -e #编辑定时任务

这里有一些相关的介绍,比如:

每个月都强制更新一下:

0 0 1 * * letsencrypt renew
5 0 1 * * nginx -s reload

当然,你也可以每天凌晨1点检查一下:

0 1 * * * letsencrypt renew
5 1 * * * nginx -s reload
注:crontab 中有六个字段,其含义如下:

第1个字段:分钟 (0-59)
第2个字段:小时 (0-23)
第3个字段:日期 (1-31)
第4个字段:月份 (1-12 [12 代表 December])
第5个字段:一周当中的某天 (0-7 [7 或 0 代表星期天])
/path/to/command – 计划执行的脚本或命令的名称

基本就是这样了,到此为止我们的lnmp环境搭建和https都已经弄好了,可以通过这个环境来搭一个WordPress写写技术博客,写个钓鱼网站、黄色网站啦

PHP必须是世界上最好的网站,不信你点开看 https://zuihaodeyuyan.com/ ,有小绿锁哦~

4 个赞

大佬的技术贴就是专业,配图排版什么的比我那篇好看多了╮(╯▽╰)╭

1 个赞

你去看看我上一篇。。那个排版惨不忍睹。。/捂脸

深夜 拜读 受教了

兄,言重了 :sweat_smile:

certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d *.doylee.cn --manual --preferred-challenges dns-01 certonly

挖坑,配置泛域名

1 个赞

服务器资源由ZeptoVM赞助

Partners Wiki Discord