学习笔记:三行命令,免费申请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 protected]

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

bash 复制代码
git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
cd acme.sh
./acme.sh --install -m [email protected]

显示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加密证书,一次配置,永久生效》教程,本文主要作为学习笔。

相关推荐
腾讯TNTWeb前端团队5 小时前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰8 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪9 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪9 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy9 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom10 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom10 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom10 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom10 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom10 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试