学习笔记:三行命令,免费申请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加密证书,一次配置,永久生效》教程,本文主要作为学习笔。

相关推荐
墨渊君2 分钟前
React Native 跨平台组件库实践: GlueStack UI 上手指南
前端
晓得迷路了10 分钟前
栗子前端技术周刊第 84 期 - Vite v7.0 beta、Vitest 3.2、Astro 5.9...
前端·javascript·vite
独立开阀者_FwtCoder13 分钟前
最全301/302重定向指南:从SEO到实战,一篇就够了
前端·javascript·vue.js
Moment22 分钟前
给大家推荐一个超好用的 Marsview 低代码平台 🤩🤩🤩
前端·javascript·github
小满zs26 分钟前
Zustand 第三章(状态简化)
前端·react.js
普宁彭于晏28 分钟前
元素水平垂直居中的方法
前端·css·笔记·css3
恋猫de小郭39 分钟前
为什么跨平台框架可以适配鸿蒙,它们的技术原理是什么?
android·前端·flutter
云浪42 分钟前
元素变形记:CSS 缩放函数全指南
前端·css
明似水1 小时前
用 Melos 解决 Flutter Monorepo 的依赖冲突:一个真实案例
前端·javascript·flutter
独立开阀者_FwtCoder1 小时前
stagewise:让AI与代码编辑器无缝连接
前端·javascript·github