2024年4月29号;个人博客做了9年了…从工作以后其实就很少更新了。
其实网站最初是为了找一份工作,有自己的博客,显得很酷。
现在嘛,就像自己的财产。好好维护吧。
今天打开网站,忽然想到一直没有做SSL证书;
最开始一直没做是因为不在乎(主要是懒,嫌麻烦),但是今天就想加一个。
前段时间迁移了网站服务器,这次就加个SSL吧。
于是采用了lnmp的自动化证书方案。
参考链接地址: https://lnmp.org/faq/letsencrypt-wildcard-ssl.html
另外在部署过程中碰上一些问题,使用Copilot协助解决了。
感受是:对于前人已经解决的公共问题,通过Copilot可以快速解决。
接下来就是具体的步骤了…
我使用的是腾讯云的DNS解析工具(本来是阿里云,后来因为某些原因迁移了…)
打开秘钥获取界面 https://console.dnspod.cn/account
P.S> 创建完之后,右边还有一个IP白名单功能,建议打开。
接下来就是导入秘钥信息
1 2 |
export DP_Id="123456" export DP_Key="abcdef" |
然后启动lnmp进行自动化的创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[root@xiong-sz lnmp2.0]# lnmp dnsssl dp +-------------------------------------------+ | Manager for LNMP, Written by Licess | +-------------------------------------------+ | https://lnmp.org | +-------------------------------------------+ Please enter domain(example: www.lnmp.org): tkxiong.com Your domain: tkxiong.com Enter more domain name(example: lnmp.org sub.lnmp.org): *.tkxiong.com domain list: *.tkxiong.com Please enter the directory for the domain: tkxiong.com Default directory: /home/wwwroot/tkxiong.com: /real_path Virtual Host Directory: /real_path Allow Rewrite rule? (y/n) y Please enter the rewrite of programme, wordpress,discuzx,typecho,thinkphp,laravel,codeigniter,yii2,zblog rewrite was exist. (Default rewrite: other): wordpress You choose rewrite: wordpress Allow access log? (y/n) y Enter access log filename(Default:tkxiong.com.log): You access log filename: tkxiong.com.log Enable PHP Pathinfo? (y/n) n Disable pathinfo. Enable IPv6? (y/n) y Enabled IPv6 Support in current Virtualhost. 1: Use Let's Encrypt to create SSL Certificate and Key 2: Use ZeroSSL to create SSL Certificate and Key Enter 1 or 2: 1 Using 301 to Redirect HTTP to HTTPS? (y/n) y Redirect http://tkxiong.com to https://tkxiong.com /usr/local/acme.sh/acme.sh [found] Generate ssl certificate using letsencrypt... |
这里需要注意各个选项的意义,不要照抄。
接下来是碰上的一些问题及解决方案;此处用到了Copilot。
1 2 3 |
invalid domain Error add txt for domain:_acme-challenge.tkxiong.com Please check log file for more details: /usr/local/acme.sh/acme.sh.log |
Copilot回答:
1 2 3 4 5 6 7 |
看起来你正在尝试使用 acme.sh 脚本来为你的域名生成 SSL 证书,但遇到了一些问题。这个错误可能是由于 DNS 验证失败导致的。你需要在你的 DNS 提供商那里添加一个 TXT 记录,记录名为 "_acme-challenge.tkxiong.com"。 这是一种常见的问题,通常是由于以下原因导致的: 1. 你的 DNS 提供商可能需要一些时间来更新 DNS 记录。你可以等待一段时间,然后再次尝试。 2. 你可能没有正确地设置 TXT 记录。你需要确保 TXT 记录的名称和值都是正确的。 3. 你的 DNS 提供商可能不支持自动 DNS 验证。在这种情况下,你可能需要手动添加 TXT 记录。 你可以检查 "/usr/local/acme.sh/acme.sh.log" 日志文件以获取更多详细信息。 |
从这里可以看到, acme.sh 脚本在往我的DNS里面写入TXT信息。
那这里最大的可能就是秘钥配错了。
我的错误是:前面的图里,用了左边的腾讯云API秘钥。
接下来是关于证书自动更新的问题。
问
1 2 |
解释一下 34 0 * * * "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null |
Copilot的回答:
1 2 3 4 5 6 7 8 9 10 |
这是一个在 Unix-like 系统(如 Linux)中使用的 cron 任务。Cron 是一个用于定期执行任务(如备份、系统维护等)的守护进程。每个 cron 任务都有一个与之关联的时间表达式,用于指定任务的执行时间。 这个 cron 任务的时间表达式是 34 0 * * *,意思是每天的 0 点 34 分执行任务。 任务的内容是 "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null。这是一个调用 acme.sh 脚本的命令,用于自动更新 Let's Encrypt SSL 证书。 --cron 参数表示这是一个 cron 任务,--home "/usr/local/acme.sh" 指定了 acme.sh 的家目录。 > /dev/null 是一个重定向操作,表示将命令的输出重定向到 /dev/null。/dev/null 是一个特殊的文件,写入到这个文件的数据会被系统丢弃。这样做的目的是防止命令的输出干扰到其他的输出。 总的来说,这个 cron 任务的作用是每天的 0 点 34 分自动更新 Let's Encrypt SSL 证书,并且忽略所有的输出。 |
问:
1 |
有必要每天更新证书吗? 一般建议多久更新一次? |
Copilot的回答:
1 2 3 4 5 6 |
Let's Encrypt 的 SSL 证书有效期为 90 天,官方建议每 60 天自动更新一次证书,以防止证书过期。但是,许多系统管理员选择更频繁地更新,例如每天或每周,以确保在更新过程中出现问题时有足够的时间来解决。 这个 cron 任务 34 0 * * * "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null 并不是每天都会更新证书。 acme.sh --cron 命令会检查所有的证书,只有当证书距离过期还有 30 天(默认值)时,它才会尝试更新证书。所以,尽管这个任务每天都会运行,但实际的证书更新频率应该接近 Let's Encrypt 的建议(每 60 天一次)。 如果你希望减少 cron 任务的运行频率,你可以调整 cron 时间表达式。例如,如果你希望每周更新一次,你可以将时间表达式改为 34 0 * * 0,这表示每周日的 0 点 34 分执行任务。 |
问:
1 |
如何修改cron任务? |
Copilot的回答:
修改 cron 任务可以通过 crontab 命令来完成。以下是具体步骤:
- 打开终端。
- 输入 crontab -e 命令并回车。这个命令会打开一个编辑器,你可以在这个编辑器中修改你的 cron 任务。
- 在编辑器中找到你想要修改的 cron 任务,然后进行修改。例如,如果你想要将任务的运行频率改为每周一次,你可以将 34 0 * * * “/usr/local/acme.sh”/acme.sh –cron –home “/usr/local/acme.sh” > /dev/null 修改为 34 0 * * 0 “/usr/local/acme.sh”/acme.sh –cron –home “/usr/local/acme.sh” > /dev/null。
- 保存并关闭编辑器。在大多数编辑器中,你可以通过按 Ctrl + X,然后按 Y,最后按 Enter 来保存并关闭编辑器。
- 输入 crontab -l 命令并回车,查看你的修改是否已经生效。
这个命令会列出所有的 cron 任务,你应该能在列表中看到你刚刚修改的任务。
给这段代码加上合理的注释
Copilot的回答:
你可以在这个 cron 任务前后添加注释,以解释这个任务的作用和执行时间。例如:
1 2 3 4 |
# 每周日的 0 点 34 分,运行 acme.sh 脚本来检查和更新 Let's Encrypt SSL 证书 # acme.sh 只有在证书距离过期还有 30 天时才会尝试更新证书 # 所有的输出都会被重定向到 /dev/null,即被丢弃 34 0 * * 0 "/usr/local/acme.sh"/acme.sh --cron --home "/usr/local/acme.sh" > /dev/null |