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 客戶端

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

  1. 請執行下面的命令以確定套件資訊已經更新至最新版本。
    sudo apt-get update
  2. 安裝 Git
    sudo apt-get -y install git
  3. 從 GitHub 複製 Let’s Encrypt 客戶端至本地
    sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

自動建立 SSL 證書

  1. 將當前目錄轉至客戶端的位置
    cd /opt/letsencrypt
  2. 安裝伺服器插件
    如果使用 Apache 伺服器,由於預設已經有 Apache 插件,請跳至下一步。
    如果使用 Nginx 伺服器,請執行下面的命令安裝 Nginx 插件。

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

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

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

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

    ./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. 將當前目錄轉至客戶端的位置
    cd /opt/letsencrypt
  2. 執行下面的指令開始建立新的證書
    ./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 的伺服器設定檔案,例如︰
    sudo vim /etc/apache2/sites-available/000-default.conf
  2. 正常來說,Let’s Encrypt 客戶端會自動將設定檔案更改。
    <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. 如果需要應用伺服器設定的更改,請在設定檔案更改後儲存,然後執行下面其中一句命令以重新啟動伺服器。
    sudo service apache2 restart
    sudo /etc/init.d/apache2 restart

檢查 Nginx 伺服器設定

  1. 使用編輯軟件開啟 Nginx 的伺服器設定檔案,例如︰
    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. 如果需要應用伺服器設定的更改,請在設定檔案更改後儲存,然後執行下面其中一句命令以重新啟動伺服器。
    sudo service nginx restart
    sudo /etc/init.d/nginx restart

更新 Let’s Encrypt 證書

  1. 執行入面的命令可更新 Let’s Encrypt 證書。請將「–nginx」更改為系統的伺服器。
    /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 證書的指令以更新證書。
    /opt/letsencrypt/letsencrypt-auto certonly --standalone

更新 Let’s Encrypt 客戶端

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