全部 / 技术交流 · 2022年10月12日 0

免费申请、服务器部署SSL证书的几种方式

本文最后更新于 560 天前,其中的信息可能已经有所发展或改变。

这周一直在想办法优化网站速度,ping域名时发现其指向的IP竟然在不断跳动,而且对应的地区都指向了新加坡。

有点奇怪,因为网站的主机已迁移到香港,一查才发现是Cloudflare Cdn的锅。

对于境外网站,能白嫖Cf的cdn似乎很划算。但cf在国内并没有服务器(只为企业提供),甚至连香港地区都没有。如此来看cdn反而成了减速器,遂立即关闭代理,再次ping时,响应图已经一片绿,时间达到了50ms上下。

随之而来问题是,关闭了cf代理后,cf签发的证书就失效了。现在想重新申请,竟一时没找到对应的指令。这篇文章将为一年后准备。

申请证书

阿里云

因为买了阿里云的轻量应用,因此最先想到了在阿里云上申请证书。据页面介绍,阿里云每年可以提供20张免费SSL证书的申请,并且支持一键部署功能(OSS、ECS、CLB等,但没有轻量应用)

按提示填上域名,几分钟后证书即申请成功。此后下载Nginx对应的服务器类型,得到pem、key两种格式。它们需要自行上传至服务器。

Certbot

免邮箱自动安装

cd;snap install --classic certbot #安装certbot
fuser -k 80/tcp;
certbot certonly --standalone --register-unsafely-without-email --agree-tos -d demo.ripplelog.xyz #使用80端口申请证书

已经连上终端的话,就不必再打开阿里云。使用certbot是一个很方便的选择

安装Certbot-域名解析至主机ip-防火墙放行80端口-申请

成功后通过sftp访问对应地址即可看到证书与私钥

手动安装

手动安装的优点,可能是兼容性更好。

同样使用上方代码安装certbot

sudo certbot certonly --manual --preferred-challenges=dns-01 # 进入手动模式

进入手动模式后,根据提示输入域名-邮箱-同意协议

手动申请需要再DNS托管商处添加一条TXT记录

以上循环两次后证书即可申请成功

再次续约时,以上步骤都会省略,一行代码即可搞定!

ACME

curl  https://get.acme.sh | sh #安装ACME
apt install socat #安装socat
~/.acme.sh/acme.sh --register-account -m xxxx@xxxx.com #输入邮箱注册账号
~/.acme.sh/acme.sh --issue -d mydomain.com --standalone #为域名申请证书

acme本质上与certbot一样,从 let‘s encrypt 生成免费的证书

成功后,根据路径找到证书与私钥

部署证书

这一步将证书部署到Nginx服务器上。

cd /etc/nginx/ssl #vultr nginx默认位置
cd /usr/local/nginx/ssl #阿里云轻量 nginx默认位置
systemctl status nginx #确认已经安装了Nginx,并且运行正常
systemctl status nginx #修改配置后需要重启Nginx

使用Sftp将证书与私钥移到nginx的ssl文件夹中,修改上级文件中wordpress.conf的相关配置

替换为部署的证书与私钥名称

保存-重启nginx,此时证书部署完成。

如果重启nginx时报错,一定是配置打错了字~