学习笔记:三行命令,免费申请https加密证书📃

📒 本文为学习笔记

核心方法源自博主 @技术爬爬虾 的文章《三行命令,免费申请https加密证书,一次配置,永久生效》

问题背景

近期因求职中断了对自己博客网站的维护。直到今天晚上访问时,浏览器突然弹出「您的连接不是私密连接」的红色警告------原来SSL证书已过期37天!

证书失效直接导致:

  • 所有现代浏览器强制拦截HTTPS访问
  • 谷歌搜索排名断崖式下跌
  • RSS订阅用户大量流失

转机出现

正当我纠结是否购买付费证书时,偶然在抖音刷到@技术爬爬虾的硬核教程《三行命令,免费申请https加密证书》,学习了一下,于是就从床上爬起来打开电脑,按照教程一步步来,发现证书过期问题被解决了,就想写篇笔记记录一下,以下内容就是转载自该博主,只记录了云服务器自建网站部分。

三行命令,免费申请https加密证书,一次配置,永久生效

视频版:www.bilibili.com/video/BV1UN...

只需3行命令,免费申请配置https加密证书,一次配置,永久生效。对于家庭NAS服务,或者自建网站等暴露在公网上的网络应用,如果只使用http协议,信息是明文传输的。只要攻击者在通信链路中的任意一个路由器抓个包,就可以看到包里的全部内容,因此很不安全。使用https协议,或者说配置TLS加密,则可以保护传输的安全。

这其中最关键的步骤,就是从CA机构那里申请服务器证书。CA机构作为受信任的第三方,是确保客户端与服务端之间互相信任的核心机制。

现在网上,有很多免费提供TLS证书的服务商,比如Let's Encrypt,不过这里的免费证书只有短短的90天。频繁续签更换证书,绝对是一个令人头秃的麻烦事情。

本期教程使用Github上面一个4.2万⭐的开源项目acme.sh。它只需要几行简单的命令,就可以免费申请到TLS证书📃,还能全自动续签,一劳永逸解决https证书的难题。下面用一个例子来演示配置TLS加密:部署在云服务器上面的自建网站。

云服务器自建网站

1. Ngnix 搭建网站

我们先在云服务器搭建一个简单的网站。我的系统是Ubuntu,先更新一下系统包索引:

bash 复制代码
sudo apt update

接下来安装nginx:

bash 复制代码
sudo apt install nginx

nginx启动:

bash 复制代码
sudo service nginx start

现在来访问一下。这里我直接在浏览器输入服务器的公网地址,协议是http,因为现在我们还没有配置TLS加密。这里出现一个nginx的欢迎页面,那我们的nginx就配置成功了,网站也就搭建好了。

2. 域名配置

这里我准备了一个www.immsf.top的域名。我们拿到域名以后,在域名托管网站添加一个DNS记录,把域名解析到我刚才的服务器上面。

这个域名就解析到了我的服务器上,然后我通过域名就可以访问到服务器了。这里我输入域名,这里显示一个不安全,它没有证书。

3. HTTPS证书配置步骤

我们进入项目首页,

github.com/acmesh-offi...

这里有中文说明,我们按照这个提示把它安装一下。

我们先来第一条命令,然后回车。

bash 复制代码
curl https://get.acme.sh | sh -s email=my@example.com

这个安装需要依赖Github的网络,如果下载不下来的话,我们可以换成这3个命令,一样可以完成安装。

bash 复制代码
git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m my@example.com

显示install success就安装成功了。

这里需要记一下安装地址,我的机器就放到了root目录下面。

我们来看一下nginx的配置,这里进入这个目录/etc/nginx/sites_available。我们看一下这个default文件,这里nginx监听了80端口,然后这里的root也就是网页的根目录放到了这个文件夹下面。

我们把这个地址复制一下,等下要用。

3.1 接下来使用命令申请证书
bash 复制代码
/root/.acme.sh/acme.sh --issue -d www.immsf.top  --webroot /var/www/html

首先,这个-d这里要替换成自己的域名。这里我的域名是www.immsf.top。开头的acme.sh需要修改成完整路径。最后的webroot需要改一下,改成我们刚才查看的那个nginx配置。

这里要注意点,我们在命令里使用的域名必须先在华为云里有对应的DNS配置。

3.2 证书安装

我准备在服务器上面新建一个文件夹(/etc/nginx/tls/)用来存放证书跟私钥。:

bash 复制代码
mkdir /etc/nginx/tls

接下来配置安装证书的命令,把脚本的地址写全,把域名改成自己的,--key-file --fullchain-file 是我们在nginx上面存放私钥还有服务器证书的地址。

最后reloadcmd指的是配置完成证书以后重启nginx所需的命令,这里普通的reload不行,我们必须改成force-reload

bash 复制代码
/root/.acme.sh/acme.sh  --install-cert -d www.immsf.top \
--key-file       /etc/nginx/tls/key.pem  \
--fullchain-file /etc/nginx/tls/cert.pem \
--reloadcmd     "service nginx force-reload"

敲入命令以后,显示success。我们进对应的目录看一下(/etc/nginx/tls),看到私钥跟证书都放到这个路径下面了。

4. Nginx配置修改

然后我们只需要进行最后一步,把这个私钥跟证书添加到nginx配置里面,并且把443端口暴露出来。

我们还是进入这个目录/etc/nginx/sites-available,进来以后主要修改这个default文件。启动起来。

bash 复制代码
vi /etc/nginx/sites-available/default

我添加一行443端口的配置。这里指的是把443端口也开启起来,使用http2协议,并且开启了SSL/TLS的加密。证书文件已经安装到nginx目录下面了,我们只需要把证书文件引用过来,添加两行:第一行指向的是证书的位置,第二行指向的是服务器的私钥地址。

ini 复制代码
server {
   listen 80 default_server;
   listen 443 ssl http2;
   listen [::]:80 default_server;
   
   ssl_certificate     /etc/nginx/tls/cert.pem;
   ssl_certificate_key /etc/nginx/tls/key.pem;
}

好,全部配置完成。

5. 验证

接下来我再重启一下nginx

bash 复制代码
service ngnix force-reload

重启完成以后,我们访问一下我的域名www.immsf.top,这里可以使用https协议了,然后我们回车。可以看到现在就是一个安全的网站,

回到服务器执行这个命令:

bash 复制代码
crontab -e

发现有一个定时脚本,它会每天帮我们检查证书,如果发现证书快要到期了,就会帮助我们自动续签。也就是说,TLS证书这个事情,我们以后就不用操心了,acme.sh会为我们自动续签证书。

特别致谢

由衷感谢 博主 @技术爬爬虾 的文章《三行命令,免费申请https加密证书,一次配置,永久生效》教程,本文主要作为学习笔。

相关推荐
知识分享小能手11 分钟前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
姑苏洛言29 分钟前
搭建一款结合传统黄历功能的日历小程序
前端·javascript·后端
你的人类朋友2 小时前
🤔什么时候用BFF架构?
前端·javascript·后端
知识分享小能手2 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3
一只小灿灿2 小时前
前端计算机视觉:使用 OpenCV.js 在浏览器中实现图像处理
前端·opencv·计算机视觉
前端小趴菜052 小时前
react状态管理库 - zustand
前端·react.js·前端框架
Jerry Lau3 小时前
go go go 出发咯 - go web开发入门系列(二) Gin 框架实战指南
前端·golang·gin
我命由我123453 小时前
前端开发问题:SyntaxError: “undefined“ is not valid JSON
开发语言·前端·javascript·vue.js·json·ecmascript·js
0wioiw03 小时前
Flutter基础(前端教程③-跳转)
前端·flutter