📒 本文为学习笔记
核心方法源自博主 @技术爬爬虾 的文章《三行命令,免费申请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证书配置步骤
我们进入项目首页,
这里有中文说明,我们按照这个提示把它安装一下。
我们先来第一条命令,然后回车。
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加密证书,一次配置,永久生效》教程,本文主要作为学习笔。