無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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM