佛心來了,快用 Let's Encrypt 免費 SSL 憑證幫網站加密吧!
發表於 : 2016-07-23 08:34:18
https://blog.toright.com/posts/4837/%E4 ... BC%81.html
佛心來了,快用 Let's Encrypt 免費 SSL 憑證幫網站加密吧!
by SJ on 2016/07/22 in Linux, 網頁開發技術, 開放原始碼
let's-encrypt
免費 SSL 憑證
您是不是也跟我一樣買不起貴鬆鬆的 SSL 憑證 (其實 NameCheap 有便宜的)!?或者您的事業正在起步,能省就省!SSL 連線加密可以讓你的網站提供給使用者更高的安全性,SEO 的排名聽說也會比較前面,網址列多了「綠色鎖」感覺專業多了,這樣才夠潮。免費的 SSL 憑證其實早就有了,像是 StartSSL, 大陸的 WoSign (沃通), CloudFlare 也有提供免費的 SSL,原本我也是用 CloudFlare SSL Cerification 但是在 WindowsXP 的 Chrome 瀏覽器並不支援,會顯示「ERR_SSL_VERSION_OR_CIPHER_MISMATCH」,實在太不方便了,畢竟 WindowsXP 的使用者還是存在,聽說升級專業版之後可以解決,但我也沒打算付錢升級,所以才轉向 Let's Encrypt。StartSSL 期限是一年,申請過程很複雜,如果一樣要申請好幾個網域,要花上不少時間。大陸的沃通我就沒有註冊過了,2015 年 Let's Encrypt 就要放話在 2016 年要提供免費的 SSL 憑證,2016 年果然兌現,真是不錯。以下是 Let's Encrypt Root CA 簽發關係圖:
isrg-keys
申請 Let's Encrypt SSL 憑證
申請 Let's Encrypt SSL 不像一般的 SLL 申請作業要填一堆表單,取得憑證的過程通常是需要進主機安裝代理程式,當然也可以透過傳統的方式驗證網域,有了代理程式倒是方便很多,可以自動 Renew (預設憑證的期限是 90 天)。
代理程式就叫做 letsencrypt,當然也是 Open Source 囉 (GitHub)。
首先先安裝相依的套件,RedHat / CentOS 請透過以下命令:
sudo yum install gcc libffi-devel python-devel openssl-devel
如果是 Ubuntu 可以透過以下命令:
sudo apt-get install gcc libffi-devel python-devel openssl-devel
接著安裝代理程式,直接從 GitHub Clone 一份下來即可,如下:
cd /usr/share
sudo git clone https://github.com/letsencrypt/letsencrypt letsencrypt
透過代理程式自動安裝 Apache SSL 服務
首先你的 Apache 可以先裝上 SSL Module,接著執行以下命令:
cd /usr/share/letsencrypt
sudo ./letsencrypt-auto --apache -d domain.com
參數 -d 表示指定要安裝的網頁服務 Domain Name,加上 --apache 將會自動搜尋系統中的 Apache 設定檔 (當然也提供 nginx, haproxy 等等常用的網頁伺服器),自動找出 Virtual Host 設定檔自動加上 SSL 連線設定,注意喔:letsencrypt-auto 程式會搜尋單一個設定檔,你的設定檔必須只包含一個 VirtualHost 設定才行,不然程式無法正確判斷。如果有找到對應的 HTTP Virtual Hots 設定檔,你就會看到以下畫面:
letsencrypt-auto
直接選擇「Easy」模式進行安裝即可,安裝的過程 Let's Encrypt Server 會嘗試對 Domain HTTP 進行連線,確保這個程式是在您所擁有的機器上被執行,確認您是伺服器管理者後才會簽發憑證,所以一定要用 Root 執行是有原因的。
安裝完之後我們可以看到原本的設定檔 *.conf 同樣的目錄底下會自動產生一個名為 *-le-ssl.conf 檔案,其中的內容會是你原本的 HTTP 設定再加上 SSL 憑證設定,方便我們在 service apache2 restart 之後可以直接生效。範例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin master@domain.com
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /var/www/html
<Directory "/var/www/html">
AllowOverride All
</Directory>
SSLCertificateFile /etc/letsencrypt/live/domain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/domain.com/chain.pem
</VirtualHost>
</IfModule>
之後記得重新啟用 Apache,如下:
sudo service apache2 restart
這樣就可以了,但如果你的 SSL Module 無法正確被識別,造成 SSL 設定檔沒有被載入,那可以把前後的 <IfModule mod_ssl.c> 標記移除就 OK 囉。
為了讓所有連線都走 SSL 連線,原本的設定檔可以改成 Redirect SSL,如下:
1
2
3
4
5
6
<VirtualHost *:80>
ServerAdmin master@domain.com
ServerName domain.com
ServerAlias www.domain.com
Redirect 301 / https://domain.com/
</VirtualHost>
這樣一來連上 HTTP 80 的未加密連線就會自動轉為 SSL 加密連線囉。
自動 Renew SSL 憑證
前面有提到,Let's Encrypt SSL 憑證只有 90 天的期限,如果每三個月都要搞一次也太累了,所以 auto renew 是必要的功能。要啟動 Auto Renew 也很間單,Renew 命令如下:
sudo /usr/share/letsencrypt/letsencrypt-auto renew
所以做一個排程 Script 即可,如下:
sudo vim /etc/cron.daily/letsencrypt-renew
1
2
#!/bin/bash
/usr/share/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt-auto.log
這樣每天都會檢查一次,只要有透過上述的方法安裝的憑證,都會自動每天檢查,方便吧!
佛心來了,快用 Let's Encrypt 免費 SSL 憑證幫網站加密吧!
by SJ on 2016/07/22 in Linux, 網頁開發技術, 開放原始碼
let's-encrypt
免費 SSL 憑證
您是不是也跟我一樣買不起貴鬆鬆的 SSL 憑證 (其實 NameCheap 有便宜的)!?或者您的事業正在起步,能省就省!SSL 連線加密可以讓你的網站提供給使用者更高的安全性,SEO 的排名聽說也會比較前面,網址列多了「綠色鎖」感覺專業多了,這樣才夠潮。免費的 SSL 憑證其實早就有了,像是 StartSSL, 大陸的 WoSign (沃通), CloudFlare 也有提供免費的 SSL,原本我也是用 CloudFlare SSL Cerification 但是在 WindowsXP 的 Chrome 瀏覽器並不支援,會顯示「ERR_SSL_VERSION_OR_CIPHER_MISMATCH」,實在太不方便了,畢竟 WindowsXP 的使用者還是存在,聽說升級專業版之後可以解決,但我也沒打算付錢升級,所以才轉向 Let's Encrypt。StartSSL 期限是一年,申請過程很複雜,如果一樣要申請好幾個網域,要花上不少時間。大陸的沃通我就沒有註冊過了,2015 年 Let's Encrypt 就要放話在 2016 年要提供免費的 SSL 憑證,2016 年果然兌現,真是不錯。以下是 Let's Encrypt Root CA 簽發關係圖:
isrg-keys
申請 Let's Encrypt SSL 憑證
申請 Let's Encrypt SSL 不像一般的 SLL 申請作業要填一堆表單,取得憑證的過程通常是需要進主機安裝代理程式,當然也可以透過傳統的方式驗證網域,有了代理程式倒是方便很多,可以自動 Renew (預設憑證的期限是 90 天)。
代理程式就叫做 letsencrypt,當然也是 Open Source 囉 (GitHub)。
首先先安裝相依的套件,RedHat / CentOS 請透過以下命令:
sudo yum install gcc libffi-devel python-devel openssl-devel
如果是 Ubuntu 可以透過以下命令:
sudo apt-get install gcc libffi-devel python-devel openssl-devel
接著安裝代理程式,直接從 GitHub Clone 一份下來即可,如下:
cd /usr/share
sudo git clone https://github.com/letsencrypt/letsencrypt letsencrypt
透過代理程式自動安裝 Apache SSL 服務
首先你的 Apache 可以先裝上 SSL Module,接著執行以下命令:
cd /usr/share/letsencrypt
sudo ./letsencrypt-auto --apache -d domain.com
參數 -d 表示指定要安裝的網頁服務 Domain Name,加上 --apache 將會自動搜尋系統中的 Apache 設定檔 (當然也提供 nginx, haproxy 等等常用的網頁伺服器),自動找出 Virtual Host 設定檔自動加上 SSL 連線設定,注意喔:letsencrypt-auto 程式會搜尋單一個設定檔,你的設定檔必須只包含一個 VirtualHost 設定才行,不然程式無法正確判斷。如果有找到對應的 HTTP Virtual Hots 設定檔,你就會看到以下畫面:
letsencrypt-auto
直接選擇「Easy」模式進行安裝即可,安裝的過程 Let's Encrypt Server 會嘗試對 Domain HTTP 進行連線,確保這個程式是在您所擁有的機器上被執行,確認您是伺服器管理者後才會簽發憑證,所以一定要用 Root 執行是有原因的。
安裝完之後我們可以看到原本的設定檔 *.conf 同樣的目錄底下會自動產生一個名為 *-le-ssl.conf 檔案,其中的內容會是你原本的 HTTP 設定再加上 SSL 憑證設定,方便我們在 service apache2 restart 之後可以直接生效。範例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin master@domain.com
ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /var/www/html
<Directory "/var/www/html">
AllowOverride All
</Directory>
SSLCertificateFile /etc/letsencrypt/live/domain.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/domain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateChainFile /etc/letsencrypt/live/domain.com/chain.pem
</VirtualHost>
</IfModule>
之後記得重新啟用 Apache,如下:
sudo service apache2 restart
這樣就可以了,但如果你的 SSL Module 無法正確被識別,造成 SSL 設定檔沒有被載入,那可以把前後的 <IfModule mod_ssl.c> 標記移除就 OK 囉。
為了讓所有連線都走 SSL 連線,原本的設定檔可以改成 Redirect SSL,如下:
1
2
3
4
5
6
<VirtualHost *:80>
ServerAdmin master@domain.com
ServerName domain.com
ServerAlias www.domain.com
Redirect 301 / https://domain.com/
</VirtualHost>
這樣一來連上 HTTP 80 的未加密連線就會自動轉為 SSL 加密連線囉。
自動 Renew SSL 憑證
前面有提到,Let's Encrypt SSL 憑證只有 90 天的期限,如果每三個月都要搞一次也太累了,所以 auto renew 是必要的功能。要啟動 Auto Renew 也很間單,Renew 命令如下:
sudo /usr/share/letsencrypt/letsencrypt-auto renew
所以做一個排程 Script 即可,如下:
sudo vim /etc/cron.daily/letsencrypt-renew
1
2
#!/bin/bash
/usr/share/letsencrypt/letsencrypt-auto renew > /var/log/letsencrypt-auto.log
這樣每天都會檢查一次,只要有透過上述的方法安裝的憑證,都會自動每天檢查,方便吧!