Nginx中使用NodeJS時更新Letsencrypt SSL

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 是申請新Cert
  • webroot 是最得方法,還可用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