前几天发现我的 letsencrypt 通配符证书快过期了,想为这两张证书续期(renew)。

首先运行命令查看我的所有证书:

$ certbot-auto certificates  

其中证书名 simplehttps.com 都是需要续期的(renew)。

接下来运行 renew 命令:

$ certbot-auto renew --cert-name simplehttps.com

运行出现如图错误:

 
renew错误

意思就是通配符证书申请、续期的时候只能通过 DNS 验证,而 DNS 添加记录只能手动,整个 cerbot 操作无法做到自动化,所以 renew 就失败了。

那如何解决呢,幸亏 cerbot 提供了一个 manual-auth-hook hook,什么意思呢?可以编写一个脚本,由这个脚本来先完成 DNS 验证,然后再进行 renew。对应的脚本会自动添加 DNS 记录,从而完成 DNS 校验,并自动 renew 证书。

根据这个解决思路:

  • 可以使用 certbot 插件,比如 certbot-dns-cloudflare 插件(还有其他的),就是自动更新 cloudflare 等 DNS 的记录。
  • 手动编写脚本,cerbot 官方提供了 cloudflare 的样例。

可惜的是这两种脚本都不支持阿里云的 DNS(我的域名全部由阿里云 DNS 提供)。

为解决这问题,我写了个脚本,并放在 github 上,可以自取。

$ git clone "https://github.com/ywdblog/certbot-letencrypt-wildcardcertificates-alydns-au"

建议关注这个 github 仓库,我会随时更新

脚本就两个文件:

  • au.sh:--manual-auth-hook 对应的脚本,主要就是执行 hook 操作,会调用一些 certbot 内部变量。
  • alydns.php:au.sh 会调用该脚本,完成 DNS 记录的更新操作。

首先看下 au.sh 的代码:

#!/bin/bash

PATH=$(cd `dirname $0`; pwd)

echo $PATH"/alydns.php"

# 调用 PHP 脚本,自动设置 DNS TXT 记录。
# 第一个参数:需要为那个域名设置 DNS 记录
# 第二个参数:需要为具体那个 RR 设置
# 第三个参数: letsencrypt 动态传递的 RR 值 echo $CRETBOT_DOMAIN"_acme-challenge"$CERTBOT_VALIDATION /usr/bin/php $PATH"/alydns.php" $CERTBOT_DOMAIN "_acme-challenge" $CERTBOT_VALIDATION >"/var/log/certdebug.log" # DNS TXT 记录刷新时间
sleep 20

如果用户要使用该脚本:

  • alydns.php,修改 accessKeyId、accessSecrec,需要去阿里云申请 API key 和 Secrec,用于调用阿里云 DNS API。

配置好后,执行下列测试命令:

$ certbot-auto renew --cert-name newyingyong.cn --manual-auth-hook /你的脚本目录/au.sh --dry-run

重要提醒:为避免遇到操作次数的限制,加入 dry-run 参数,能够避免操作限制,等执行无误后,再进行真实的renew 操作。

输出如下:

Congratulations, all renewals succeeded. The following certs have been renewed:
/etc/letsencrypt/live/newyingyong.cn/fullchain.pem (success)

确保无误后,再进行真实的 renew 操作:

$ certbot-auto renew --cert-name newyingyong.cn --manual-auth-hook /你的脚本目录/au.sh
 
renew成功

证书更新成功后,运行如下命令查看证书:

$ openssl x509 -in  /etc/letsencrypt/live/newyingyong.cn/fullchain.pem -noout -text

关键输出如下:

Issuer: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
Validity
Not Before: Jul 5 21:29:55 2018 GMT
Not After : Oct 3 21:29:55 2018 GMT
Subject: CN = *.newyingyong.cn

顺利完成。

Let Encrypt延期(转自虞大胆的叽叽喳喳)的更多相关文章

  1. 一分钟理解 HTTPS 到底解决了什么问题

    本文原作者“虞大胆的叽叽喳喳”,原文链接:jianshu.com/p/8861da5734ba,感谢原作者. 1.引言 很多人一提到 HTTPS,第一反应就是安全,对于普通用户来说这就足够了: 但对于 ...

  2. ubuntu服务器无法运行chromedriver解决方法(转)

    无头浏览器 sudo apt-get install Xvfb sudo pip install pyvirtualdisplay from pyvirtualdisplay import Displ ...

  3. 申请Let’s Encrypt永久免费SSL证书过程教程及常见问题

    配置证书https://easy.zhetao.com/   虽然目前Let’s Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用,为了考虑到文章的真 ...

  4. 免费SSL证书 之Let’s Encrypt申请与部署(Windows Nginx)

    我着着皇帝的新衣,但是你看不见    有一颗愿意等待的心,说明你对未来充满希望.有一颗充满希望的心,那么等待又算什么.人就是在等待与希望中度过,我们永远要对未来充满信心! 读在最前面: 1.本文案例为 ...

  5. H-1B身份六年后的延期问题

    http://www.hooyou.com/cn_version/h-1b/extension.html H-1B首次获签的在美国居留时限是三年,三年期满后还可以申请延期再续三年,总计在美国的最长时限 ...

  6. Let’s Encrypt 配置

    刚配置了下Let's Encrypt,chrome浏览器里有绿条出来,看官网其它平台问题应该也不大.我还没有研究这个工作原理,关键是刚花了几千块给公司买了个收费的证书认证.这里写下配置过程(https ...

  7. 使用Let`s encrypt 免费的https 证书

    在iOS上以前暂时屏蔽https使用http的接口,将在未来被苹果拒绝: 之前传苹果会在2017年1月1日强制要求支持https,但是现在苹果又延迟该计划了 https://developer.app ...

  8. 哈希(Hash)与加密(Encrypt)相关内容

    1.哈希(Hash)与加密(Encrypt)的区别 哈希(Hash)是将目标文本转换成具有相同长度的.不可逆的杂凑字符串(或叫做消息摘要),而加密(Encrypt)是将目标文本转换成具有不同长度的.可 ...

  9. Let's Encrypt 正式出發(免费HTTPS证书即将到来)

    转自:https://blog.gslin.org/archives/2015/10/20/6073/lets-encrypt-%E6%AD%A3%E5%BC%8F%E5%87%BA%E7%99%BC ...

随机推荐

  1. javaWeb的基础知识

    在服务器中,端口号是比较重要的,要学会查看和修改.win7有cmd和任务管理器两种方法.同时区分include动作和指令. <%@ include file="url"> ...

  2. 利用python对微信自动进行消息推送

    from wxpy import * #该库主要是用来模拟与对接微信操作的 import requests from datetime import datetime import time impo ...

  3. day_11 py 名片管理系统

    '' 2018-4-23 11:42:29 名片管理系统 字典与列表的结合 ''' #1.打印功能提示 print("="*50) print(" 1.添加一个新的名片& ...

  4. F - Fibonacci again and again

    任何一个大学生对菲波那契数列(Fibonacci numbers)应该都不会陌生,它是这样定义的: F(1)=1; F(2)=2; F(n)=F(n-1)+F(n-2)(n>=3); 所以,1, ...

  5. win10 远程出现身份验证错误 要求的函数不受支持

    win10的一个更新的bug 解决方案 http://note.youdao.com/noteshare?id=68aa9de9fbf46c50a097b3ccf7994580&sub=5AF ...

  6. 使用 PREPARE 的几个注意点

    简单的用set或者declare语句定义变量,然后直接作为sql的表名是不行的,mysql会把变量名当作表名.在其他的sql数据库中也是如此,mssql的解决方法是将整条sql语句作为变量,其中穿插变 ...

  7. vue axios跨域请求,代理设置

    在config下的index.js中的dev下的 proxyTable{}中设置代理 proxyTable: { '/api': { target: 'http://10.0.100.7:8081', ...

  8. cadence xbl封装转AD

    下载一个 软件 免费试用 导出到ad,出现一个脚本,脚本工程直接拉到ad里面,然后 有这两个文件,启动是有顺序的,顺序一旦错误就会产生大问题,没有任何反应 设置工程启动顺序,再次启动,出现打开文件窗口 ...

  9. ubuntu 搜狗输入法 在中断失效

    实测是更换了皮肤后,出现在中断输入故障,乱码.在其他界面可能是正常的,更换语言没用. killall fcitx输入法突然好了(根据网友所说,更改一堆东西貌似并没有什么用) 此时关闭输入法皮肤一切正常 ...

  10. 在eclipse中导入hadoop jar包,和必要时导入源码包。

    1. 解药hadoop包 1, C:\hadoop-2.7.2\share\hadoop  提取出所有的 jar 包, 到 _lib 文件夹下 2,将有含有source 名称的jar包 剪切出来 3, ...