80、443 埠無法使用時使用 Let’s Encrypt 簽發證書
Let ’ s Encrypt 自從公測以來,就喚起了各路開發者的興趣,第三方自動化指令碼也是雨後春筍般出現。但是 Let ’ s Encrypt 與其它 CA 簽發證書時驗證域名所有權不太相同,它使用 ACME-server 進行域名驗證,原理就是驗證伺服器指定在客戶端伺服器的一個隨機的目錄下生成一個隨機的檔案,然後驗證是否能下載到這個檔案。
本來這是個很方便的驗證方法——更符合自動化的需求,但是,這也是 Let ’ s Encrypt 被抱怨的地方之一,很多情況下無法滿足這個驗證流程,比如我今天遇到的, 80 埠被完完全全 block 掉的情況。
於是後來,更多的人開始呼籲支援 DNS 方式驗證,最終 Let ’ s Encrypt 終於支援了 DNS 驗證域名所有權。
支援 DNS 驗證的第三方自動化工具也不少,letsencrypt.sh就是其中之一,下面我來向大家分享一下我使用 letsencrypt.sh 並且結合 DNSpod 的 API 實現自動化簽署 Let ’ s Encrypt 證書的過程,如果你使用其他的 DNS 服務,那麼在後面呼叫 hook 的地方,改為你所使用的 API 即可。
獲取 letsencrypt.sh
git clone https://github.com/lukas2511/letsencrypt.sh.git
進入 letsencrypt.sh 目錄
cd letsencrypt.sh
建立 domains.txt ,並把你要簽發的域名寫進去
nano domains.txt
下面是和 DNSpod 相關的,如果你使用的不是 DNSpod ,可以直接跳到編輯 hook.sh 。
在 DNSpod 中新增一條 TXT 記錄,主機名為_acme-challenge.<subname>
。比如我要簽發 wiki.lizhe.org 這個域名的證書,那麼我就新增_acme-challenge.wiki 這個主機名。值隨便寫,後面簽發時程式會自動改。
獲取你的 DNSpod 域名 id 和記錄 id
curl -k https://dnsapi.cn/Domain.List -d "login_email=xxx&login_password=xxx"
curl -k https://dnsapi.cn/Record.List -d "login_email=xxx&login_password=xxx&domain_id=xxx"
複製 hook.sh.example 到 hook.sh
cp hook.sh.example hook.sh
編輯 hook.sh
nano hook.sh
找到deploy_challenge
這個函式,$TOKEN_VALUE
就是我們需要更改的 TXT 記錄值,對於 DNSpod ,通過我們前面找到的域名 id 和記錄 id 進行更新。
更新 DNS 記錄,將下面的內容寫在deploy_challenge
函式中
curl -k https://dnsapi.cn/Record.Modify -d "login_email=xxx&login_password=xxx&domain_id=xxx&record_id=xxx&sub_domain=_acme-challenge.xxx&record_type=TXT&record_line=預設&value=${TOKEN_VALUE}"
記得把 xxx 都改成你自己的引數,注意sub_domain
裡還有個 xxx ,sub_domain
的字首我已經幫你加好了。
最後執行 letsencrypt.sh 簽發證書
./letsencrypt.sh -c -k ./hook.sh -t dns-01
如果一切順利,那麼在 certs 下面在各個以域名命名的資料夾下就會有證書檔案了,privkey.pem
是私鑰,fullchain.pem
是拼好的完整證書鏈,其他的檔案就不用管了。
如果不想把證書檔案放在當前路徑,在 hook.sh 的deploy_cert
函式中,將生成的相應證書移動到目標目錄即可。
相關文章
- let's encrypt 申請 https 證書HTTP
- CentOS 下 Nginx 配置 Let’ s Encrypt 證書CentOSNginx
- 免費 HTTPS 證書 Let's Encrypt 安裝教程HTTP
- Let's Encrypt 申請免費的 Https 證書HTTP
- 申請Let's Encrypt永久免費SSL證書
- 申請Let's Encrypt萬用字元SSL證書字元
- Let's Encrypt 泛域名證書申請及配置
- cert-manager + Let‘s Encrypt + DNS 實現基於K8S的https證書自動簽發DNSK8SHTTP
- Let's Encrypt - 免費SSL/TLS證書用起來TLS
- docker獲取Let's Encrypt永久免費SSL證書Docker
- 使用 acme.sh 從 Let’ s Encrypt 生成免費的萬用字元 SSL 證書ACM字元
- 免費SSL證書Let's Encrypt的替代:SSL.com
- 申請Let’s Encrypt萬用字元HTTPS證書(certbot版)字元HTTP
- 基於Let's Encrypt生成免費證書-支援多域名泛域名證書
- 使用Let’s Encrypt實現網站https化網站HTTP
- 使用 Let's Encrypt 保護你的網站網站
- 更新:為 NGINX 配置免費的 Let's Encrypt SSL/TLS 證書NginxTLS
- 申請Let’s encrypt免費證書,並自動續訂.
- Let's Encrypt 免費萬用字元 SSL 證書申請教程字元
- 由於Bug,Let's Encrypt決定吊銷300多萬張證書!
- 解決Let’s Encrypt SSL證書”DNS problem: NXDOMAIN looking up A for xxx.com”DNSAI
- Let's Encrypt 倡議新證書策略 提高抗網路攻擊能力
- Let's Encrypt 釋出ACME v2 正式支援萬用字元證書ACM字元
- Let's Encrypt 泛域名httpsHTTP
- Windows Server 下 IIS 申請部署 Let’s Encrypt 證書實現 免費 HTTPSWindowsServerHTTP
- 伺服器80埠和443埠的區別伺服器
- 通過 Certbot 安裝 Let's Encrypt 證書,來實現全站的 HTTPS 訪問HTTP
- 透過 Certbot 安裝 Let's Encrypt 證書,來實現全站的 HTTPS 訪問HTTP
- 每日安全資訊:Let's Encrypt 釋出自己的證書透明度日誌
- 通過 Certbot 安裝 Let's Encrypt 證書,實現免費的全站 HTTPS 訪問HTTP
- 無法訪問SmartScreen怎麼辦?使用程式碼簽名證書有必要!
- 網站伺服器80埠和443埠的區別網站伺服器
- 盼望著,盼望著 let's encrypt 泛域名野卡證書,終於終於上線了
- 受 CAA 程式碼問題影響 Let's Encrypt 於 3 月 4 日撤銷部分證書
- 443和80埠被佔用win10如何解決_443和80埠被佔用win10怎麼處理Win10
- Xamarin Android使用自簽名證書Android
- 使用mkcert建立自簽名證書mkcert
- 用 Python 寫了一個 Let's Encrypt 的 wildcard 證照小工具Python
- SSL證書是否要付費購買?免費SSL證書無法使用?