2017年5月30日 星期二

在RT1900AC上使用Let's Encrypt的SSL憑證-半殘版


Let's Encrypt是最近兩年才有的「免費」SSL憑證申請服務
之前所了解的免費SSL通常是短期試用居多
然而這個真的就是免費的服務
某種程度上算是呼應Google所提唱的網路安全
(新聞連結:明年起Chrome將把含機密資訊的HTTP網頁標示為「不安全」)
讓一般人在架網站時也有SSL可以使用
只是有一好沒兩好
這個服務唯一的缺點,只支援短期(90天)的認證
超過時間就要再申請一次
但是能用、簡單而且安全, , 對一般使用者就已經是萬幸了

而我打算用在Synology的RT1900AC上
可是網路上尋找到的資訊,官方確認不支援
(補充-2019/09/24正式官方支援了,這篇可以廢掉了 XD)
直接寫信詢問官方有沒有預計加上這個功能,也碰了個軟釘子說:
「我們家的NAS有這項功能喔,可以搭配這個使用。」
然後不提未來是否加入,或是可能有其它辦法繞過。
那麼就只好靠偉大的網路社群來處理啦

最終是成功了,並確認了兩件事
1、Dynamic DNS是有條件可以申請憑證的
2、如果使用上面的DDNS,則暫時無法靠RT1900AC自己申請與自動化安裝憑證,仍然需額外的伺服器處理,如官方所述的,用別的機器申請憑證後再匯入
    所以標題才寫半殘版

以下是詳細的處理過程


直接先說怎麼申請的好了
申請憑證用的伺服器我用了第一代的樹莓派,並配合apache2,
(如果家裡沒其它Linux的機器可用的話,建議裝VMWARE Player後灌UBUNTU)
同時使用了acme.sh這個第三方的套件去申請,而非官方強烈建議的 certbot
因為certbot,在第一代樹莓派下跑得實在太慢了

首先修改apache裡,port 80網頁的設定,把servername加進去

接著,照著acme.sh的說明,安裝此項軟體
curl https://get.acme.sh | sh
最後申請的指令很簡單
sudo ./acme.sh --issue --apache -d 自己的網域
然後憑證就發下來了
當然,RT1900AC上要記得開80給這台機器
才會讓Let's Encrypt的伺服器掃得到,並發送憑證
另外還要注意二點
1、因為必須要使用sudo指令,申請下來的憑證會放置在下面的路徑中
/root/.acme.sh/自己的網域名/
並不是在實際安裝script的
/home/pi/.achme.sh/自己的網域名/
底下
2、另外要注意的是中繼憑證fullchain.cer的檔案中,會有兩個憑證
必須要先砍掉第一組,才能順利地匯入RT1900AC中
正式的作法應該是直接使用ca.cer的憑證即可,不需要用fullchain.cer(2018015更新)。
這是錯誤的作法。

這樣用自己的網域連上時,左上角的就會出現綠色的安全了



不過,還是希望可以自動更新啊
以下就來記錄一下,從頭到尾遇到的失敗與未來的可能做法吧

在Google上用RT1900AC+Let's Encrypt去找
很快地找到這個教學:Synology RT1900ac install guide
用的同樣是acme.sh的工具申請憑證
但是失敗了,原因是此項指令是使用DNS的認證來核發SSL憑證
可是我申請的是DDNS(動態DNS),並不據有額外生認證用的網域功能
所以最終得到了兩個異常回報
invalid domainError add txt for domain:_acme-challenge.自己的網域
至此也產生了個疑問:到底動態DNS能否向Let's Encrypt申請?

找到的答案是Yes,實際上也是
在這個Tutorial for using ssl on ddns services的討論中

明確回應只要靠著http或tls的方式申請
而且申請的DDNS網域必須要在公認的網域列表中就沒問題
這就是前面所提到,有條件申請的部分
公共網域清單表連結中,NO-IP、Dyndns與群暉自己的DDNS都有在表中

那再回到RT1900AC上,因為上面已經有裝了acme.sh
就繼續用此項工具執行standalone模式
會選standalone是因為它會另外創建一個環境申請
而不影響原本的伺服器設定,缺點是通常要關掉原本的服務一下子
取得可使用的port之後,進行申請憑證,等申請完成後,再重開舊服務項目
但http因為RT1900AC缺少netcat(nc)指令,所以不能用
tls的部分,我試著另開port:8443給standalone使用
但還是遇到Verify error:Incorrect validation certificate for tls-sni-01 challenge
目前從網路查起來,似乎要還是關掉網頁服務
但我不會關RT1900AC上的,所以就轉試用樹莓派處理

在樹莓派上一開始被certbot搞的火大
因為是一代樹莓派,所以上面跑的作業系統是Debian 7 (wheezy)
就試著下載官方指定的certbot來用
但是好慢啊,安裝跑很久就算了,執行也跑很久
最後申請失敗了,重設再跑,也是很久
想了一下,就跟RT1900AC一樣,換用acme.sh申請看看
順很多,非常多
結果standalone模式還是失敗,不管是http或tls的部分
最後就如最初的解答,改使用apache模式申請
一下子憑證就下來了

照上述錯誤的部分來說
要能自動最好還是跟原本的網頁服務相結合
可能用webroot模式就可行
這部分還要再試試看,留待下次到期申請時吧

沒有留言: