Nginx中使用NodeJS時更新Letsencrypt SSL
Letsencrypt
自從Google提倡每個網站需要使用SSL為最低要求後,我也少不免申請SSL服務,在尋找的過程中發現了Letsencrypt。他們是提供免費的SSL認証機構,比較起一般免費試用SSL的公司比較起來更可靠,單看他們的Major Sponsors中有Google Facebook等大公司支持,已經是信心保証。
安裝
網上提供有不少安裝方法,基本上都不太難,我就使用官方建議的Certbot來進行安裝
$ sudo apt-get install letsencrypt
簡單以apt-get
進行安裝
申請SSL Cert
最重要的部份了,整個申請過程也是可以用指令進行,非常方便的。
e.g. 我要申請的是256pages.com為例
$ letsencrypt certonly --webroot -w /var/www/256pages.com/ -d 256pages.com
certonly
是申請新Certwebroot
是最得方法,還可用standalone
但不好用,都建議用webroot
-w /var/www/256pages.com/
是指你檔案的位置-d 256pages.com
是你的域名
如果有子網域都可以用-d
新增上去
$ letsencrypt certonly --webroot -w /var/www/256pages.com/ -d 256pages.com -d www.256pages.com -d blog.256pages.com
如果有多個網域可以用-w
及-d
的組合加上去
$ letsencrypt certonly --webroot -w /var/www/256pages.com/ -d 256pages.com -d www.256pages.com -d blog.256pages.com -w /var/www/nys-hk.com/ -d nys-hk.com
然後就要確定一些條款
ACME Challenge
第一個問題遇到就是他要通過一個ACME Challenge,ACME就是Automatic Certificate Management Environment的縮寫,你把他當作申請一張SSL Cert的認証動作,畢竟是免費的SSL,用Nginx的話只要在Server setting中加入這個資料夾的通過權限
server {
...
location ~ /.well-known {
allow all;
}
...
}
還要在之前指定的網址根目標新增資料夾
$ mkdir -p /var/www/.well-known/amce-challenge
但是第二個問題來了,NodeJS不是依序放在/var/www/
中就會自動運作,頁面跟資料夾也不是真實的存在。
所以指定一個資料夾來通過Challenge
server {
listen 80;
listen [::]:80;
server_name 256pages.com *.256pages.com;
location ~ /.well-known/acme-challenge/ {
root /var/www/256pages.com/;
default_type "text/plain";
allow all;
}
}
這樣就可以順利通過了
更新
之後用renew --dry-run --agree-tos
指令可以測試更新,letsencrypt的SSL有90日使用期,不過申請未夠60日前,每天最多可以取得5次新的SSL,所以不用常常試哦
確定是而要更新後使用renew更新
$ letsencrypt renew