Letsencrypt续签泛域名证书

之前用letsencrypt为这个网站生成的证书快到期了,我是给泛域名生成的证书,所以在续签证书的时候需要DNS验证,但是续签是个自动的过程,你不知道需要把TXT记录改成什么。所以自动续签命令一直失败。看了一些教程,需要在续签的时候用有一个脚本来修改DNS记录,所以需要调用域名注册商的一些API。正好godaddy有API,下面分享一下步骤。

先决条件

  • 一个在Godaddy注册的域名
  • 证书是letsencrypt生成的

具体操作

  • 进入这个页面,为自己的Godaddy账号生成一对API Key,生成production的就可以。这个key是不会过期的,但只会出现一次,所以一定要保存好。
  • 由于我之前已经生成了证书,所以我的域名记录里有一个TXT记录,这是当时为了生成证书添加的,所以现在更新证书只需要修改对应的值就可以了。我选择使用这个API
    API recordReplaceTypeName:https://api.godaddy.com/v1/domains/mmlnp.com/records/TXT/_acme-challenge
这个API的作用就是替换某个域名的某个已存在的记录的值。控制台上如下图这样填就可以

console1.JPG

其中data就是替换后的值,ttl最短是600,port最小是1.这三个是必填的,默认控制台会有一些别的参数,那些默认就好。写完了可以点击Execute测试一下,但这个控制台是会用OTE
API进行测试,可能会失败,我得到的错误是404,显示该域名没有被注册,但我用production的Key在代码中测试是没问题的。所以控制台上只要没有其他的错误就不需要担心。
点击Execute之后会生成一个curl命令,完全可以复制出来到linux机器上执行,只要把url和key换成相应的就可以。

  • 下一步就可以测试代码调用这个PUT API了,这个各有各的方法,我就不赘述了。
  • 最后一步是整合所有功能,这个可能大家用的东西都不一样,我的方式仅供参考。

我先创建一个bash脚本:

#!/usr/bin/bash
#要配置的域名
DOMAIN="mmlnp.com"
# 脚本路径
PATH="/home/mml"

#要为那个 DNS RR 添加 TXT 记录
CREATE_DOMAIN="_acme-challenge"

# $CERTBOT_VALIDATION 是 Certbot 的内置变量,代表需要为 DNS TXT 记录设置的值

# 调用脚本,自动设置 DNS TXT 记录。
/usr/bin/python   $PATH"/renewcert.py"  $DOMAIN $CREATE_DOMAIN  $CERTBOT_VALIDATION >/var/log/certdebug.log

# DNS TXT 记录刷新时间
/usr/bin/sleep 30

renewcert.py是我使用python调用Godaddy的API。

import urllib2
import json
import sys

value = sys.argv[3]
api_url = 'https://api.godaddy.com/v1/domains/mmlnp.com/records/TXT/_acme-challenge';
head = {}
head['Accept'] = 'application/json'
head['Content-Type'] = 'application/json'
head['Authorization'] = 'sso-key Key:Secret'
records_a = {
"data" : value,
"ttl" : 600,
"port" : 1
}
put_data = [records_a]
req = urllib2.Request(api_url,headers = head,data = json.dumps(put_data))
req.get_method = lambda: 'PUT'
rsp = urllib2.urlopen(req)
code = rsp.getcode()
if code == 200:
        print('succeed!')
else:
        print(code)

这两个文件准备好之后,在letsencrypt目录下执行这个命令可以测试续签泛域名证书。没有报错说明配置没有问题。

./certbot-auto renew --cert-name mmlnp.com --manual-auth-hook /home/mml/au.sh --dry-run

--manual-auth-hook是执行验证脚本,验证TXT记录。
--dry-run 是演习一次,不会保存生成的证书,去掉这个参数就真的会续签证书了。

因为证书有效期是三个月,所以我写了一个crontab,自动续签。命令部分如下:

/home/mml/letsencrypt/certbot-auto renew --cert-name mmlnp.com --manual-auth-hook /home/mml/au.sh  --renew-hook "service nginx reload"

--renew-hook 是在成功续签证书之后执行一个命令,可以用来让nginx重新加载证书。

参考连接:
https://www.4spaces.org/certbot-command-line-tool-usage-document/
https://blog.csdn.net/lihao19910921/article/details/81534188
https://www.xiaoweigod.com/network/1633.html


发表评论

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠(ᐛ」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • (งᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ°Д°;)っ
  • ╮(╯▽╰)╭
  • o(*
  • >﹏<
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 颜文字

*