之前用certbot, 后来一直不报错, 证书不管用, 就想着干脆直接使用来此加密, 不要中间商了, 就有了直接到来此加密注册之旅
注册地址:
来此加密https://letsencrypt.osfipin.com/user-0408/order/list附上这两年的"战绩"
申请这么多证书主要原因是, 测试域名太多, 一些用了之后又不要了, 还有一些测试域名的证书
话不多说, 直接申请证书
1, 点击申请证书
2,输入需要申请证书的域名,如果需要泛域名,或者包含根域名, 自行选中
3,选择加密方式,我一般就下一步了
4,选择渠道和是否需要独立通道, 独立通道的作用可以去看看文档, 总的来说就是可以同时处理多个证书的申请&验证, 然后验证和创建的速度要快些, 备注我都没怎么在意
5,提交, 等证书创建成功
因为我的这个测试域名已经创建成功了的, 只能另起一个域名作为演示: a.sinclair.world
6,选择验证方式
http验证:
如果已经指了域名, 就可以用http,在域名服务器的目录下面创建文件夹 mkdir -p ./.well-known/acme-challenge/
点击"立即下载",把文件放到新建的文件夹里面, 就可以直接点击验证本条了, 需要注意的是服务器的配置不要把http直接跳转https了, 不然要报错
DNS验证:
需要注意上面说的是TXT 还是CNAME, 按照指定的规则添加DNS规则, 然后再进行验证
下面附上一些失败记录,HTTP的失败是因为没关闭http跳转https, DNS就是没看清楚到底是TXT解析还是CNAME解析...自己的锅自己背......
7,我用的nginx 就参考了文档里面的nginx配置
server
{
listen 80;
listen 443 ssl http2;
ssl_certificate path\fullchain.crt;
ssl_certificate_key path\private.pem;
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# 开启OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
}
只需要把fullchain.crt和private.pem放在指定的文件夹, 配置好了就重启nginx
8,通过shell脚本自动部署
8.1变更验证类型
8.2根据API接口里面的步骤进行
首先创建一个key,然后点击查看进入文档
看到了手册 案例:linux下自动下载和部署 · 语雀根据接口文档,可以编写满足需求的bash文件,实现自动...https://www.yuque.com/osfipin/letsencrypt/makzkw
我用了这个案例里面的例子
附上我的脚本:
#!/usr/bin/env bash
export PATH=$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
# 参数配置 开始
ORDER_ID='2x83ml'#上图的自动验证ID
TYPE='auto'#自动重申&自动验证的话,这里需要是auto
API_TOKEN='xxxxxx'##刚刚申请的key
API_USER='XXX@163.com'#我的用户名
FILE_CERT_DIR='/etc/nginx/cert'
FILE_CERT=${FILE_CERT_DIR}'/fullchain.crt'
FILE_CERT_KEY=${FILE_CERT_DIR}'/private.pem'
COMAND_RELOAD='nginx -s reload'
# 参数配置 结束
# 以下内容根据需求修改
# 证书到期前13天内才会更新
isexpire=`openssl x509 -in ${FILE_CERT} -noout -enddate -checkend 91123200`
if echo "${isexpire}" | grep " not " ; then
#echo "Certificate will not expire."
exit 1
fi
API_URL='https://api.osfipin.com/letsencrypt/api'
URL_ORDER_DOWN="${API_URL}/order/down"
HEADER_AUTHOR="Authorization: Bearer ${API_TOKEN}:${API_USER}"
ZIP_FILE="${ORDER_ID}.$RANDOM"
curl ${URL_ORDER_DOWN} -H "${HEADER_AUTHOR}" -G -d "id=${ORDER_ID}" -d "type=${TYPE}" -o ${ZIP_FILE}.zip
if [ ! -s "${ZIP_FILE}.zip" ]; then
echo "download error."
exit 1
fi
size=`du -b ${ZIP_FILE}.zip | awk '{print $1}'`
if [[ ${size} -lt 500 ]]; then
echo "download file error."
cat ${ZIP_FILE}.zip
unlink ${ZIP_FILE}.zip
exit 1
fi
# 解压 移动文件
mkdir -p ${ZIP_FILE}
mkdir -p ${FILE_CERT_DIR}
unzip ${ZIP_FILE}.zip -d ${ZIP_FILE}
cp ${ZIP_FILE}/fullchain.crt ${FILE_CERT}
cp ${ZIP_FILE}/private.pem ${FILE_CERT_KEY}
# 删除 打完收工
unlink ${ZIP_FILE}.zip
rm -rf ${ZIP_FILE}
##`${COMAND_RELOAD}`
脚本在root用户下运行
在crontab里面添加定时任务, 我是周二周五运行一下
30 8 * * 2,5 bash /root/backup/updateHttps.sh
至此, 从申请证书, 到验证, 到配置, 再到自动部署, 大致的步骤就完了, 官方文档很详细了, 需要注意的是:
- http验证的时候, 文件夹权限要注意, http不要直接跳转https, 证书配置好了再说哈
- DNS验证的时候, 需要注意是TXT解析还是CNAME解析
- 自动部署的时候, 过期时间需要改一下
免费的证书, 爱了吗, 不过建议加入VIP, 买点独立通道, 真的很方便!
附上推荐码,可自取: 2DOV0NRJ
记录完毕, 收工