顯示具有 letsencrypt 標籤的文章。 顯示所有文章
顯示具有 letsencrypt 標籤的文章。 顯示所有文章

2020/02/10

Let's encrypt 申請 ssl 憑證

Let’s Encrypt 可對 domain 做憑證以便後續的功能使用以及遠端登入可以提供更加的安全性。
如果沒有自己的 domain name,可以至 duckdns 免費申請。

Let’s Encrypt 有一個限制就是至少每 30-40 天必須更新憑證。
因此如果所使用的 domain 是從 duckdns 申請的,可以考慮安裝另外一個 addon - Duck Dns

這邊我只安裝 Let’s Encrypt 來做 domain 的憑證。domain 的部份則交由我另外一個地方的主機來做更新。

安裝 Let’s Encrypt
1. Supervisor -> ADD-ON STORE
2. Search Let’s 找到後點進去並點擊 INSTALL
3. 安裝完畢,不要勾選 Start on boot
4. config 依照實際需求修改,設定好後點擊右下 Save

email: abc@example.com
domains:
  - test.duckdns.org
certfile: fullchanin.pem # 不要修改
keyfile: privkey.pem # 不要修改
challenge: http # 依照需求可改成 dns,這邊我是使用 http
dns: {} # 依照需求修改
  1. 回到畫面最上面點擊 Start
  2. 拉到最下面點擊 Refresh ,看一下偵錯訊息,正常的話就表示申請憑證成功

申請成功後,開啟 configuration.yaml,加上以下的部份。

http:
  base_url: test.duckdns.org:8123
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem

重啟 hass,這樣就可以使用 https 連線了,且也不能再使用 http 連線了。
遠端連線方式變成: https://test.duckdns.org:8123
本地端連線就要改成: https://本地端IP:8123

另外建議備份 config/addons/data/ 裡面的 core_letsencrypt 這個目錄,裡面有相關的憑證以及認證訊息。
這個可以在重新安裝時直接把這些資料覆蓋回去,這樣就不用重新申請憑證。
太頻繁申請憑證會暫時無法申請。

由於 Let’s encrypt 只用於申請憑證並沒有定時自己更新的功能。
因此需要加上自動更新的功能。
開啟 automations.yaml,加上以下的部份。
這會定期在每天晚上 11 點重新做憑證更新的動作。
憑證更新的部份會先檢查是否需要更新,如果有需要才會更新,
沒有需要則直接結束。

- id: 'system_lets_encrypt_renewal'
  alias: "[ System ] Let's Encrypt Renewal"
  trigger:
    - platform: time
      at: '23:00:00'
  action:
    - service: hassio.addon_restart
      data:
        addon: core_letsencrypt

2020/01/17

更新 Let's Encrypt 失敗

將 hass.io 做 snapshot 還原時,針對 Let's Encrypt addon 啟動確認是否可以正常更新憑證。
發現卻無法更新,出現以下錯誤。
File “/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/letsencrypt/storage.py”, line 273, in _check_symlinks
“expected {0} to be a symlink”.format(link))
CertStorageError: expected /etc/letsencrypt/live/example.org/cert.pem to be a symlink
這原因是當 Let's Encrypt 更新憑證時,會將 live/example.org/cert.pem 做 symbolic link 到 archive/example.org 裡面 certX.pem (x 表示數字,越大越新)。
如果檢查到不是 symbolic link 就會判斷有問題而不執行更新。
而做 snapshot 還原時會修改到這部分,此時只要移除 live/example.org/ 裡面的憑證重新做 symbolic link 即可。
以下 X 表示最大的數字。
rm -f live/example.org/*.pem
ln -sf archive/example.org/certX.pem live/example.org/cert.pem
ln -sf archive/example.org/chainX.pem live/example.org/chain.pem
ln -sf archive/example.org/fullchainX.pem live/example.org/fullchain.pem
ln -sf archive/example.org/privkeyX.pem live/example.org/privkey.pem