介绍
烦死了,腾讯云天天一条短信提醒我证书快过期了,我知道快过期了,让我买我也买不起啊。
由于我的vps是nginx,所以该方式适用于nginx上的HTTPS证书部署。
2024-5-11更新,将域名接入到cloudflare了,然后cloudflare上可以直接创建SSL证书,所以现在相对来说要方便点了。
概述
acme是github开源的一个优秀的免费SSL证书项目,如果自己运行了一个网站应用想配置HTTPS加密协议,考虑到正常的HTTPS证书价格都比较昂贵,对于个人使用的小网站或者博客等就完全没有必要花费大价钱去购买专门的HTTPS证书。有些云服务器厂商有时候第一次申请HTTPS证书的话会免费一年,一年后就要续费了。但是对于已经使用过免费优惠的用户,证书过期后再次续费的话价格也是不菲,所以就需要使用到acme来申请免费的SSL证书。用于网站的HTTPS加密,**acme.sh** 实现了 acme
协议, 可以从 letsencrypt 生成免费的证书,非常好用。
项目地址:https://github.com/acmesh-official/acme.sh
更加详细的使用可以参照该项目地址的wiki
安装
注意事项:(1).本次安装过程记录是Nginx的安装记录,Apache的可以自行参考github项目介绍。(2).安装过程中,如果nginx的默认配置文件修改过的话,需要使用原始的nginx配置文件才可以安装成功。
备份配置
备份下自己的Nginx配置,原始配置文件也备份一个,防止出现意外,真出现意外的话重装nginx也可以。
下载acme
额,github国内有时候上不去,下载不下来,那么我把这个放在自己服务器上吧,有需要自己下载即可。
本机链接:https://blog.axzzsec.com/upload/acme.sh
curl https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh -o acme.sh 也行
wget https://raw.githubusercontent.com/acmesh-official/acme.sh/master/acme.sh 也行
开始步骤
给脚本赋予执行权限:chmod +x acme.sh
- 配置注册邮箱:./acme.sh --register-account -m [email protected] (这里的邮箱账号不一定需要真实的,应该是需要提供一个用于远端拿去做注册)
跟上自己的域名:./acme.sh --issue -d www.domain.com --webroot /usr/share/nginx/html/ 注意--webroot这个目录不要更改。
出错了就在命令后面加上 --debug 进行调试
继续调试
出现什么socat的错误,直接安装一个socat,我的是Ubuntu系统,Centos用yum:apt install socat ,如果没出错就不用管了。
哦豁安装完又出错,我fuck,继续调试:
不知道什么原因,我先把我cdn关了再试试吧。哦好像又知道原因了,我的nginx默认配置不对。nginx.conf不是原始的,被我修改过了。卸载重装一下:apt autoremove nginx -y rm -rf /etc/nginx
哦fuck,越调试错误越多,就不记录错误调式的过程了。nginx重装的时候出问题了,我去我虚拟机上面拷贝的一个nginx配置以及/usr/share/nginx的文件夹过来才弄好了。
错误过程:改了域名解析,暂时取消cdn的解析,关闭了防火墙,上云服务器控制台重新配置了安全组允许所有流量通信。
安装证书,当然不用输入安装这个步骤也行,直接在nginx配置文件中填入key和cer文件的路径就可以。
./acme.sh --install-cert -d www.domain.com \
--cert-file /home/website/blog/acme/www.domain.com_cert.pem \
--key-file /home/website/blog/acme/www.domain.com_key.pem \
--fullchain-file /home/website/blog/acme/www.domain.com_fullchain.pem \
--reloadcmd "nginx -s reload"
修改nginx的证书路径
然后测试下nginx配置是否出错,并重新加载一下配置就完成了。
错误记录
出错的话,可以尝试如下操作:
如配置了cdn服务,则暂时停止cdn的解析。
将域名解析都删掉,保留A记录,A记录地址为服务器的ip地址。
如果申请证书成功并将证书配置好后访问还是提示不安全的话应该是cdn的问题,有cdn的情况下,将申请的证书信息配置到cdn厂商里面去。
尝试将nginx彻底卸载,重装,然后再申请证书。
---------- 分割线 --------
将nginx配置文件暂时还原(使用默认的配置),然后再申请。
关闭防火墙。
## 总结
总结其实就只要三条命令就可以把证书安装上了,前提是要先下载acme脚本:
第一条命令:
acme.sh --register-account -m [email protected]
第二条命令:
acme.sh --issue -d www.xxx.com --webroot /usr/share/nginx/html/
第三条命令:
acme.sh --install-cert -d www.xxx.com \
--cert-file /etc/nginx/conf.d/ssl/www.xxx.com_cert.pem \
--key-file /etc/nginx/conf.d/ssl/www.xxx.com_key.pem \
--fullchain-file /etc/nginx/conf.d/ssl/www.xxx.com_fullchain.pem \
--reloadcmd "nginx -s reload"
但是中途遇不遇得到坑就不清楚了。
中途我遇到的坑解决:使用原始的nginx配置文件,但是配置文件中要监听自己的域名,然后关闭防火墙再重新申请一般就能成功了。