AWS Route53 Geo dns with letsencrypt
如果是單一一台主機透過 certbot 要用 letsencrypt 這個免費的 ssl 憑證服務的話,其實並不難,以 ubuntu 16.04 搭配 apache 的話會像這樣
而 Amazon AWS 的 Route53 服務有提供很好用的 geo-based dns 功能,簡單來說就是指定來自哪個區域的 reqeust 要由哪個 ip 負責處理。但因此 certbot 預設的 dns challenge 就不能正常運作,導致無法順利申請 letsecrypt 的 ssl 憑證。
實際上只要使用 –dns-route53 參數就可以了。
$ sudo certbot certonly --dns-route53 -d YOUR_DOMAIN_NAME
不過預設 certbot 安裝的時候不會安裝 dns-route53 這個 plugin,所以要自行安裝,而安裝的指令也很簡單,如下。
$ sudo pip install certbot_dns_route53==0.31.0
要注意的是plugin版本必須要跟 certbot 版本一致,要檢查certbot 版本就用 –version 參數即可。
$ sudo certbot --version
但是比較尷尬的是,預設 ubuntu 16.04 的python 為 2.7,所以即使把上面的plugin安裝了,實際上執行certbot要申請憑證的時候還是會有錯誤訊息,主要是說沒有RSA的演算法。處理的方式就是把 python 2.7 移除掉(反正這版本之後也會掰掰),然後安裝 python 3的版本。連帶的 pip 也要安裝 pip3,還有可能會遇上的是 boto 版本不對的關係,所以 python3-boto3 也得要安裝上去。
$ sudo apt-get install python3-pip $sudo apt-get install python3-boto3
如果有使用最新版本癖好的話,可以 pip3 install –upgrade pip 一下,但是執行之後請記得修改 /usr/bin/pip3 檔案,把
from pip import main if __name__ == '__main__': sys.exit(main())
改為
from pip import __main__ if __name__ == '__main__': sys.exit(__main__._main())
要不然會噴 cannot import main 的錯誤。
大致上這樣就可以順利進行 dns route53 的ssl 憑證申請了。
Original link: Phanix's Blog