如何使用 Let's Encrypt 加密網站的連線

Let’s Encrypt

Let’s Encrypt 是一個 ISRG 管理的數字證書認證機構,為安全網站提供免費的 SSL/TLS 證書。而 Let’s Encrypt 簽發的證書是免費、自動化和公開的,有效期為 3 個月,在 2015 年 12 月 3 日開始進行公眾測試。

系統要求

在開始使用 Let’s Encrypt 之前,請確保擁有主機的 sudo 櫂限和域名的擁有和管理櫂。檢查主機的 IP 位置和在域名的 DNS 建立 A Record 並且指向主機的 IP 位置。如果網站使用了 CDN,必須在建立 Let’s Encrypt 證書前暫停 CDN 的服務。

安裝 Let’s Encrypt 客戶端

Let’s Encrypt 客戶端的源碼在 GitHub 存放,大家可以到 GitHub 下載新的客戶端。為了方便管理 Let’s Encrypt 客戶端,強烈建議使用 Git 下載和管理客戶端。

  1. 請執行下面的命令以確定套件資訊已經更新至最新版本。

    1
    
    sudo apt-get update
    
  2. 安裝 Git。

    1
    
    sudo apt-get -y install git
    
  3. 從 GitHub 複製 Let’s Encrypt 客戶端至本地。

    1
    
    sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
    

自動建立 SSL 證書

  1. 將當前目錄轉至客戶端的位置。

    1
    
    cd /opt/letsencrypt
    
  2. 安裝伺服器插件 如果使用 Apache 伺服器,由於預設已經有 Apache 插件,請跳至下一步。 如果使用 Nginx 伺服器,請執行下面的命令安裝 Nginx 插件。

    1
    
    ~/.local/share/letsencrypt/bin/pip install -U letsencrypt-nginx
    
  3. 假設要建立 SSL 證書的域名是 foolegg.com,而系統使用 Apache 伺服器,可使用下面的命令。

    1
    
    ./letsencrypt-auto --apache -d foolegg.com -m admin[:at:]foolegg.com
    

    如果系統使用 Nginx 伺服器,可使用下面的命令。

    1
    
    ./letsencrypt-auto --nginx -d foolegg.com -m admin[:at:]foolegg.com
    

    如果需要建立多過一個域名或子域名的 SSL 證書,可使用下面的命令。請將「–nginx」更改為系統的伺服器。

    1
    
    ./letsencrypt-auto --nginx -d foolegg.com -d www.foolegg.com -d share.foolegg.com -m admin[:at:]foolegg.com
    

    系統有可能會自動安裝缺乏的套件,請耐心等待。

    如果系統沒有「~/.local/share/letsencrypt/」目錄,請跳至下一章「手動建立 SSL 證書」。

  4. 設定是否強制使用 HTTPS 安裝時會確認是否強制使用 HTTPS,如果想同時使用 HTTPS 和 HTTP,請選擇「Easy」,否則請使用「Secure」。

    Easy Allow both HTTP and HTTPS access to these sites
    Secure Make all requests redirect to secure HTTPS access
    
  5. 完成建立 SSL 證書之後,會出現下面的提示。請進入提示中的超連結檢查證書是否成功安裝。

    Congratulations! You have successfully enabled https://foolegg.com
    You should test your configuration at:
    https://www.ssllabs.com/ssltest/analyze.html?d=foolegg.com
    

    請注意證書的有效時間,為網站提前建立新的證書。

    IMPORTANT NOTES:
    - Congratulations! Your certificate and chain have been saved at
    /etc/letsencrypt/live/foolegg.com/fullchain.pem. Your cert will
    expire on 2016-03-19. To obtain a new version of the certificate in
    the future, simply run Let's Encrypt again.
    

    建立的證書會存放於 /etc/letsencrypt/live/ 目錄下。

手動建立 SSL 證書

  1. 將當前目錄轉至客戶端的位置。

    1
    
    cd /opt/letsencrypt
    
  2. 執行下面的指令開始建立新的證書。

    1
    
    ./letsencrypt-auto certonly --standalone
    
  3. 系統會自動安裝需要的元件,請耐心等待。

  4. 安裝完必須的元件後,請按照螢幕的指示輸入電郵地址,然後按「OK」繼續。

  5. 之後請閱讀條款選擇「Agree」繼續。

  6. 輸入建立 SSL 證書的域名,然後按「OK」。

    foolegg.com www.foolegg.com
    
  7. 完成建立 SSL 證書之後,會出現下面的提示。

    IMPORTANT NOTES:
    - If you lose your account credentials, you can recover through
     e-mails sent to admin[:at:]foolegg.com.
    - Congratulations! Your certificate and chain have been saved at
     /etc/letsencrypt/live/foolegg.com/fullchain.pem. Your cert will
     expire on 2016-05-22. To obtain a new version of the certificate in
     the future, simply run Let's Encrypt again.
    - Your account credentials have been saved in your Let's Encrypt
     configuration directory at /etc/letsencrypt. You should make a
     secure backup of this folder now. This configuration directory will
     also contain certificates and private keys obtained by Let's
     Encrypt so making regular backups of this folder is ideal.
    - If you like Let's Encrypt, please consider supporting our work by:
    
     Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
     Donating to EFF:                    https://eff.org/donate-le
    

檢查 Apache 伺服器設定

  1. 使用編輯軟件開啟 Apache 的伺服器設定檔案,例如︰

    1
    
    sudo vim /etc/apache2/sites-available/000-default.conf
    
  2. 正常來說,Let’s Encrypt 客戶端會自動將設定檔案更改。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    
    <ifmodule mod_ssl.c>
        <virtualhost *:443>
            # ...
    
            # Let's encrypt
            SSLCertificateFile /etc/letsencrypt/live/foolegg.com/cert.pem
            SSLCertificateKeyFile /etc/letsencrypt/live/foolegg.com/privkey.pem
            SSLCertificateChainFile /etc/letsencrypt/live/foolegg.com/chain.pem
            SSLCACertificateFile /etc/letsencrypt/live/foolegg.com/fullchain.pem
    
            # ...
        </virtualhost>
    </ifmodule>
    
  3. 如果需要應用伺服器設定的更改,請在設定檔案更改後儲存,然後執行下面其中一句命令以重新啟動伺服器。

    1
    2
    
    sudo service apache2 restart
    sudo /etc/init.d/apache2 restart
    

檢查 Nginx 伺服器設定

  1. 使用編輯軟件開啟 Nginx 的伺服器設定檔案,例如︰

    1
    
    sudo vim /etc/nginx/sites-available/default
    
  2. 正常來說,Let’s Encrypt 客戶端會自動將設定檔案更改。

    server {
      #...
    
      include /etc/letsencrypt/options-ssl-nginx.conf;
      ssl_certificate /etc/letsencrypt/live/foolegg.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/foolegg.com/privkey.pem;
      listen 443 ssl;
      #listen 80;
      server_name foolegg.com www.foolegg.com;
    
      #...
    }
    
  3. 如果是手動建立 SSL 證書,請自行建立「/etc/letsencrypt/options-ssl-nginx.conf」。

    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 1440m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    # Using list of ciphers from Bulletproof SSL and TLS
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-SHA ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES256-SHA384 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES128-SHA ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES256-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256 EDH-RSA-DES-CBC3-SHA;
    
  4. 如果想強制將 HTTP 轉至 HTTPS,可加入下面的內容。

    server {
      listen 80;
      server_name foolegg.com www.foolegg.com;
      add_header Strict-Transport-Security max-age=31536000;
      return 301 https://$server_name$request_uri;
    }
    
  5. 如果需要應用伺服器設定的更改,請在設定檔案更改後儲存,然後執行下面其中一句命令以重新啟動伺服器。

    1
    2
    
    sudo service nginx restart
    sudo /etc/init.d/nginx restart
    

更新 Let’s Encrypt 證書

  1. 執行入面的命令可更新 Let’s Encrypt 證書。請將「–nginx」更改為系統的伺服器。

    1
    
    /opt/letsencrypt/letsencrypt-auto certonly --nginx --renew-by-default --agree-tos -m admin[:at:]foolegg.com -d foolegg.com -d www.foolegg.com
    

    只需要配合「crontab」的使用,便可自動更新證書。

  2. 如果有任何錯誤,也可以執行以下手動建立 SSL 證書的指令以更新證書。

    1
    
    /opt/letsencrypt/letsencrypt-auto certonly --standalone
    

更新 Let’s Encrypt 客戶端

  1. 由於使用了 Git 來管理 Let’s Encrypt 客戶端,只需要執行下面的命令就可以更新。

    1
    2
    
    cd /opt/letsencrypt
    sudo git pull
    
Made in Hong Kong