自动向CDN部署SSL证书及其他事

目录

感谢博友老麦,手把手的指导我向阿里云CDN自动部署SSL证书;最感谢的不是他手把手的友好,而是他自己不用这套方案,而专门为我琢磨、测试、传授的“利我”精神。

伟人说,“一个人能力有大小,但只要有这点精神,就是一个高尚的人,一个纯粹的人,一个有道德的人,一个脱离了低级趣味的人,一个有益于人民的人”。无疑,老麦就是一个高尚的人、纯粹的人、有道德的人、一个脱离了低级趣味的人。

 

自动向CDN部署SSL证书

下面简单记录下老麦的自动部署方案,证书自动比对和上传部分代码著作权完全归老麦所有,我仅是借花献佛,以方便有相同需要的同学。

我的服务器环境,阿里云服务器+阿里云CDN+阿里云域名解析+宝塔面板,此次自动部署的关键在于把宝塔面板自动申请的SSL证书上传到阿里云CDN。实行这一方案的原因是免费SSL证书从一年变成三个月,手动上传太麻烦,于是四处找自动方案,老麦知道后主动联系我,帮助实现。下面简单记录下步骤。

一、申请阿里云RAM访问控制权限

1、申请账户

只需要openAPI一个选项,申请完记得保存,关闭后就找不到了。

2、申请权限

按老麦的建议,一个业务申请一个授权,这样业务不用时直接删除授权即可。本次业务涉及域名解析和CDN配置,所以需要以下三个权限。

二、在Linux服务器上安装阿里云CLI

1、root账户下,SSH连接服务器,在服务器上运行下列命令,下载Aliyun CLI

wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-amd64.tgz
tar -zxvf aliyun-cli-linux-latest-amd64.tgz

 

2、配置Aliyun CLI

运行echo $PATH 命令,确认系统变量值中存在 /usr/local/bin 路径。

执行如下命令,将aliyun程序复制到/usr/local/bin目录中。

sudo cp aliyun /usr/local/bin

如果您是root用户,请移除sudo命令。

 

3、验证安装结果,执行

aliyun version

如返回版本号则证明安装成功

 

4、输入

aliyun configure --profile AkProfile

在接下来的窗口输入步骤一申请的账户ID和密码

Default Region Id []: 这个提示框是输入阿里云服务器的地域,用下面网址查,比如cn-beijing

https://help.aliyun.com/zh/ecs/product-overview/regions-and-zones?spm=a2c4g.11186623.0.0.c62f33afrWJkdd#concept-2459516

下面选项输入zh

Default Language [zh|en] en: zh

 

出现上面画面就是成功了

 

三、证书自动申请

在宝塔网站管里申请ssl证书

一定要选NAS认证,这样才能自动续签;

宝塔默认的证书保存文件路径为以下,每个域名一个文件夹,这个路径后面要用到;

/www/server/panel/vhost/cert/abc.com/

 

四、配置自动定时任务

1、在宝塔面板里新建cdnssl.sh文件,在 www目录下新建,新建后复制以下脚本并保存;

#!/bin/bash

# 函数:检测证书文件的变化并上传到阿里云
check_and_upload() {
    DOMAIN_NAME=$1         # 域名
    CERT_PATH=$2           # 证书路径
    PRI_KEY_PATH=$3        # 私钥路径
    HASH_FILE=$4           # 用于存储哈希值的文件路径

    # 计算当前证书文件的哈希值
    CURRENT_HASH=$(sha256sum "$CERT_PATH" | awk '{ print $1 }')

    # 读取上次保存的哈希值
    if [ -f "$HASH_FILE" ]; then
        LAST_HASH=$(cat "$HASH_FILE")
    else
        LAST_HASH=""
    fi

    # 比较哈希值
    if [ "$CURRENT_HASH" != "$LAST_HASH" ]; then
        echo "证书已更新,正在上传到阿里云CDN(域名:$DOMAIN_NAME)..."

        # 执行上传命令
        /usr/local/bin/aliyun cdn SetCdnDomainSSLCertificate \
            --DomainName "$DOMAIN_NAME" \
            --SSLPub="$(cat $CERT_PATH)" \
            --SSLPri="$(cat $PRI_KEY_PATH)" \
            --CertType upload \
            --SSLProtocol on
        
        # 上传成功后,保存新的哈希值
        echo "$CURRENT_HASH" > "$HASH_FILE"
    else
        echo "证书未更新(域名:$DOMAIN_NAME),无需上传"
    fi
}

# 监控第一个域名 1.abc.com 的证书
DOMAIN1="1.abc.com"
CERT_PATH1="/www/server/panel/vhost/cert/1.abc.com/fullchain.pem"
PRI_KEY_PATH1="/www/server/panel/vhost/cert/1.abc.com/privkey.pem"
HASH_FILE1="/www/cert_hash_1_abc_com.txt"

# 监控第二个域名 2.abc.com 的证书
DOMAIN2="2.abc.com"
CERT_PATH2="/www/server/panel/vhost/cert/2.abc.com/fullchain.pem"
PRI_KEY_PATH2="/www/server/panel/vhost/cert/2.abc.com/privkey.pem"
HASH_FILE2="/www/cert_hash_2_abc_com.txt"

# 检查第一个域名的证书
check_and_upload "$DOMAIN1" "$CERT_PATH1" "$PRI_KEY_PATH1" "$HASH_FILE1"

# 检查第二个域名的证书
check_and_upload "$DOMAIN2" "$CERT_PATH2" "$PRI_KEY_PATH2" "$HASH_FILE2"

 

2、设置定时任务,SSH连接服务器端,root账户下

chmod +x /www/cdnssl.sh
crontab -e  //打开编辑器
shift+g    //将光标定位到最后一行

然后按 o (字母,非数字)进行编辑,输入下面命令

0 3 * * * /www/cdnssl.sh >> /www/cdnssl.log 2>&1

按Esc键,输入以下命令,记得是输入,不能复制进去。

:wq

 

3、然后输入下面两行命令进行测试。

cd /www

再输入

 ./cdnssl.sh

返回如下画面就证明成功了

 

4、自动任务触发后

自动任务每天执行一次,执行后www文件夹下会多出来cert_hash_img_savouer_com.txt和cert_hash_www_savouer_com.txt两个文件,还会多出一个cdnssl.log。前两个是记录哈希值的,cdnssl.log是记录定时任务的日志。

以上是关于自动向阿里云CDN部署SSL证书的教程,因为我是小白,所以老麦一步一步的指导的。

 

obsidian笔记

部署完以上任务,老麦又给我介绍了md文件,于是在他建议下我尝试了obsidian笔记。

之前一直用有道云笔记,之所以选他是因为在用的文石电纸书阅读器支持直接导出读书笔记到有道云。使用过程中感觉有道云也足够我用,基于Ai的功能和学术网站加速器(针对特定网站的梯子)都比较好用。但也有让人不舒服的地方,比如他的md语法和标准的不同,且打不开标准md语法的文件;同时已有笔记也不能导出md格式,只能导出pdf和word两种格式。这就让我很担心,万一笔记越来越多,我是不是越来越离不开有道云笔记了?假如哪天他觉得不赚钱,不做笔记业务了,我的笔记是不是也得跟着消灭了?

尝试obsidian后发现确实很强大,功能按需打插件,这一点和wordpress很像,找回了熟悉的感觉。但目前有道云笔记还有四年的会员,大概率会变成沉没成本了。看来互联网思维中的免费还是要好好学习下,收费的不见得是好的,尤其国内习惯焊车门的应用。

在obsidian中使用了weread插件,可以导出微信读书笔记,以前都是页面版手动复制到笔记软件,现在方便不少。

 

京东读书和微信读书

最早读书一直用京东读书,原因是书比较全,但京东读书会员只能读有限的书,而其他书还要付费;今年偶然用上了微信读书,发现会员可以读所有书,且笔记导出和有限的社交功能比较方便,于是这半年基本上一直在微信读书。到今天共读了170天,407小时,共读完30本书。会员是每月5元的挑战,年合60元,很便宜了。

前两天看到京东读书宣布会员可读所有书,放弃了二次收费策略,看来竞争还是有用的,要不京东的电纸书和纸质书价格相差无几,会员功能就没有多大意义了。

京东读书宣布会员可免费读所有上架书籍后,顿觉压力山大,这么多书怎么读的完啊!京东读书、微信读书、还有仓鼠症屯的几百G电子书,还有买的纸质书。不由感慨,这个时代读书的成本真是低啊!

 

文石电子书阅读器

刚感慨完读书的成本低,现实就教育了我。目前正在使用的文石阅读器大概两年前购买,共使用它阅读了约1600个小时,但现在它开始出现掉电快的问题,有时甚至会在40%左右电量时自动关机,再打开就是剩余1%电量。很明显这是电池坏了,2年,1600小时,电池就坏了,不由得出“电池真垃圾”的结论。电纸书使用电流很小,这对电池很友好,且它充电时也是慢充,按这种工况,他的电池怎么也应该使用500-800次循环。实际使用中我不开背光、不开wifi,只用来看文字,基本上10天左右一充,就算一年充50次,那它的电池起码应该用10年,但现在两年它就坏了。网上看出现同样问题的人很多,可见它采购的电池真垃圾。

对比以前的kindle,到现在快10年了,电池依然没有故障。由此感叹,小众产品真不好买,因为市场小,大厂看不上,而小厂都会有各种各样的问题,让你用的不安生。

这个阅读器2600元入手,到现在只用了1600小时,如果官方换一个块电池(据网上说100元),再用1600小时,然后报废,那等于2700元用3200小时,每小时合0.84元,其实也不便宜。但如果按都书量来算,则很便宜了,我大概5-7小时读一本300页的书,这样大概5元钱的成本就能读一本书,而买纸书每本需要30元,相比还是很便宜的(抛开纸书可以多人反复读的问题)。

 

最后再次感谢下老麦,让我也与时俱进,乘上了自动化的便车。

37 条评论

  1. 你和老麦这也是有缘分哈哈,证书这个确实也困扰我很久了。

    1. 水拍石

      老麦是我写博最大的缘分之一,从思想交流到技术指导,对我帮助很大。老麦这个方法很方便,起码在我这是跑通了,你可以参考下。

  2. 紫慕

    因为我的域名解析屏蔽了国外的ip访问,ssl方案采用了acme.sh方案。然后启用了三方的高防CDN后,证书每次还是复制过去的,也没有找到一个好的方案,后续还是得考虑一下官方的CDN。

    1. 水拍石

      一直看你们说高防CDN,但我真不知道去那找高防的,都是服务器是谁家的CDN就是谁家的。自动部署后方便很多,这个对你来说易如反掌。

  3. 老麦同志乐于助人啊,这就是互联网有意思,愿意帮助人的特别多,开源精神万岁!

    1. 水拍石

      老麦是无私的

  4. 自从90天有效期之后一直没有解决这个问题,可以参考下了

  5. 上次宝塔自动给我续签了,CDN没续签,竟然使用了一段时间,不过现在没有一年的证书可以白嫖,操作起来的确麻烦一些,而且宝塔续期有时候还容易失败,只能域名验证续。

    1. 水拍石

      宝塔续签失败就只能手动了。我设置了宝塔证书到期前10天提醒,这样手动续签完了老麦的程序再自动上传到CDN上,也算方便。如果实在受不了,那就只能付费买一年的证书了。

    1. 水拍石

      老麦出的这个脚本值得收藏,熟练的话几分钟搞定,一劳永逸。

  6. ohttps.com不错,可以看看

    1. 水拍石

      好的,我看下。

  7. 我以为愿意折腾博客,做笔记,写博文的最终归宿都会是.md

    1. 水拍石

      我这两天又读了一遍你关于Ob,博客架构,服务器优化等那几篇文章,还是感觉静态博客门槛太高了,比如没有梯子或自己的电脑不在身边发个文章都难。当然作为笔记md和Ob都是不错的,以后我要和大家接轨。

      1. 可能是自己的观念,想法,习惯问题。我比较关注碎片化,持续性,总结,然后数据可控。对及时性,便利性等没多大要求。

        1. 水拍石

          通过你博文就看出你这些习惯和倾向了,我后面笔记会用Ob,但博客还会用wp,我写博客都是后台写的,还没有养成从笔记直接复制过来的习惯。你们用静态博客,笔记写完了自动发布,这个功能我很羡慕,但不想折腾了,因为这是一个系统工程,学习成本太高了。

  8. 「会员是每月5元的挑战,年合60元」这个怎么抢,我点开说首月9元,后续29元。

    1. 水拍石

      微信读书有7天,30天,365天三种挑战,挑战成功就是对应的会员天数。30天的是5元,365天的是50元。微信读书挑战

      1. 已连续阅读245天,不过没参加挑战。

        1. 水拍石

          我挑战纯粹是为了节省订阅费

      2. 藏得够深的,要点三四下才找到

        1. 水拍石

          还是你找的动力不强,对我来说,藏得再深也得把它找出来

          1. 现在动力强了,存量的设备都要用起来….

  9. 这这这,我都有点不好意思了,没你说得那么好。
    我可以在我博客上给这篇文章做个链接吗?

    1. 水拍石

      这篇的核心是你贡献的,再说即使不是你贡献的,也随便链。

  10. 知更鸟主题有代码高亮,用起来,文章里的代码显示会更美观。

    1. 水拍石

      我开了,但没有用,估计和缓存插件有冲突,我十年发一次代码,懒得折腾了。

  11. 强烈建议你用 Obsidian,数据存到本地,我现在大部分文本文件都会选择保存为 md,大部分文本编辑器都可以打开。我是买了小米电子书 Pro 来运行微信读书和京东读书的,挺不错。

    1. 水拍石

      以后会把Obsidian用起来,还是标准格式,自己随时能转移比较踏实一些。小米的产品我现在不碰,因为被它的手机售后伤心了,不过相比于一种小厂,小米的电纸书应该比较好,起码对供应链管理和软件优化就比小厂有优势。

      1. 小米其他产品我也不敢买,电子书还可以,对速度没有太高的要求。但小厂的电子书真用不了太久。华为 paper 又略贵了。

        1. 水拍石

          我是华为粉,它的电纸书价格我也能承受,因为我读书属于重度用户,但我怀疑它是不是不会出第二代了,如果只有这一代产品的话,后续维护也就跟不上了。

  12. XIEG

    CDN我是改不了一直用七牛的3个月花点时间去申请下,操作多了轻车熟路几分钟完事还算较快。阅读这些app我都不习惯,一直用kindle,现在kindle没了商店反倒更喜欢了,近期加了个电子书会员,百度网盘里的,又发现了几个国外的电子书网站,kindle又发挥大作用了。

    1. 水拍石

      宝塔面板能自动签证书, 从宝塔复制到CDN也很方便,但就怕忘记了这一步,网站就会报证书过期,自动化的好处就是不用担心证书过期了。kindle确实很好用,而且我觉得显示也比别的更白一些,但kindle做笔记不方便,国产的做笔记,导出都很方便。下载的电纸书狠多pdf的,甚至是扫描pdf,这种也存在做笔记麻烦的问题。

      1. XIEG

        笔记确实是个难题,之前好多次都想买国产的但是没买,现在kindle电子书,读一遍,觉得还不错就买纸书再在纸书上笔记。

        1. 水拍石

          我以前也喜欢纸书用笔写,但最近改变想法了,因为电纸书昨晚批注后很容易查找,借助笔记软件可以很容易的搜索,纸书翻找太麻烦。