• 无80端口情况下使用 CertBot 申请SSL证书 并实现自动续期


    443端口不知道是电信不想封还是怎么样,一直无需备案就能开启对外服务。而443端口就必须使用合法的 SSL 证书,合法的 SSL 证书很多,我一直在使用 letsencrypt 提供的SSL证书服务。但是 letsencrypt 的证书只有90天的有效期,必须在有效期内 renew,否则过期了只好重新申请了。申请 letsencrypt 证书网上一堆都是需要开放 80 端口才能申请,其实 CertBot 在以前就是支持 https 的方式申请证书。但是不知道什么原因放弃了. 现在另外一方法是用dns申请和更新. 我的域名是挂在dnspod下面的, 需要用到dnspod的接口去更新txt记录才能正常的更新证书.

    安装certbot

    centos 7

    yum install epel-release

    yum install certbot

    ubuntu

    可以先尝试执行sudo apt-get install certbot 看是否能安装. 如果提示找不到的话, 执行下面的命令后再尝试安装

    sudo add-apt-repository -y ppa:certbot/certbot
    sudo apt-get update
    

    然后执行sudo apt-get install certbot 

    DNS认证

    letsencrypt支持使用DNS认证的方式来获取证书,这种方式需要在DNS里面添加TXT记录来证明域名是你自己的。

    这种方式只能使用certonly功能,因此安装时需要自己修改相应的服务器配置,无法让certbot帮忙修改。

    只需要运行一下命令即可,

    1
    
    sudo certbot certonly --manual --preferred-challenge dns -d <你的域名>
    

    然后首先会告知你会记录你的IP,选择Y,接着会出现一个提示,要你把_acme-challenge.<你的域名>设置成TXT记录,值也会写出来,设置好以后等待生效回车即可。

    成功以后,就会告诉你证书路径,只需要替换掉服务器的配置里面的证书即可。

    证书更新

    使用dns申请的证书是没办法直接使用certbot renew来更新证书的. 幸亏 cerbot 提供了一个 manual-auth-hook hook,什么意思呢?可以编写一个脚本,由这个脚本来先完成 DNS 验证,然后再进行 renew。对应的脚本会自动添加 DNS 记录,从而完成 DNS 校验,并自动 renew 证书。写了个脚本进行更新au.sh, 代码如下:

    1.  
      echo "recode:"$CERTBOT_VALIDATION
    2.  
       
    3.  
      curl -k https://dnsapi.cn/Record.Modify -d "login_email=${ACCOUNT}&login_password=${PASSWORD}&domain_id=${DOMAIN_ID}&record_id=${REC_BBS}&sub_domain=_acme-challenge.${RECORD}&record_line=默认&record_type=TXT&value=$CERTBOT_VALIDATION"
    4.  
       
    5.  
      sleep 20

    关于如何查询domain_id 和record_id 

    1.  
      #获得域名id
    2.  
      #curl -k https://dnsapi.cn/Domain.List -d "login_email=${ACCOUNT}&login_password=${PASSWORD}"
    3.  
      #获得域名id下的记录列表
    4.  
      #curl -k https://dnsapi.cn/Record.List -d "login_email=${ACCOUNT}&login_password=${PASSWORD}&domain_id=${DOMAIN_ID}"

    测试

    certbot renew --manual-auth-hook /root/au.sh --dry-run

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

    出现以上信息的时候就表示成功了.

    然后加到crontab里面

    30 0 * * 1 certbot renew --manual-auth-hook /root/au.sh

    表示每周一凌晨0点30分会尝试更新证书.

    感谢以下3位作者提供的参考:

    https://www.orzorc.com/201807/get-cert-by-letsencrypt-dns-challenge/

    https://www.jishux.com/p/6be2ce6781c16ee7

    https://blog.neroxps.cn/2017/10/19/certbot-nginx-renew/

    当你的才华还撑不起你的野心的时候,你就应该静下心来学习; 当你的能力还驾驭不了你的目标时,就应该沉下心来历练。
  • 相关阅读:
    WordPress修改后台登录地址
    android开发之浅谈viewpager
    android开发之viewpager and Fragment
    android开发之 广播机制
    android开发之 SQLite(数据库)
    前端目标——天猫网页
    android 开发之Toast
    centos8 单机安装k8s
    mysql 查看库大小
    idea 常见问题
  • 原文地址:https://www.cnblogs.com/ellisonzhang/p/14298492.html
Copyright © 2020-2023  润新知