SSL (Secure Sockets Layer) 是網頁伺服器和瀏覽器之間以加解密方式溝通的安全技術標準,這個溝通過程確保了所有在伺服器與瀏覽器之間通過資料的私密性與完整性,我們的網站如果有使用 SSL 除了可以增加資訊安全之外,還可以提升 Google 搜尋引擎的排名喔!

在以前網站要使用 SSL 除了要付費購買憑證之外,還需要有自己的獨立 IP,大部分的小型網站都是租用虛擬主機,如果要配獨立 IP 可是要多付不少費用,再加上憑證的費用,一年下來也是一筆不小的負擔,不過這都是過去式了。

現在我們只要透過 Let’s Encrypt 就可以完全免費的使用 SSL,Let’s Encrypt 是由許多大公司以及各大非營利團體為了推廣 HTTPS 而贊助的一家免費發佈 SSL 憑證 的 Certiciate Authority,採用 SNI 技術,所以使用 Let’s Encrypt 的憑證免申請獨立 IP,當然免費的憑證跟付費的憑證還是有一些差異,如果是正式的電商環境需要跟銀行申請金流串接,可能還是需要申請專用的憑證比較好喔。

所以為了我們網站的安全,還有一點提升排名的可能,一定要幫網站加上 SSL 喔,這裡提供三種方式來使用 Let’s Encrypt 的憑證:

1. 正準備架設網站:如果你打算用 WordPress 架設網站,租我們 iCorp 的 WPH 當然是最好的選擇囉!更何況我們也有提供免費方案,你只要花註冊網址的錢,其他一毛錢不用就可以開始製作自己的網站了!請這邊申請

2. 已經租了虛擬空間:你已經有租虛擬空間了,如果使用cPanel、Plesk 等控制台的話,你可以使用 SSL For Free 線上工具,一樣可以簡單的導入 Let’s Encrypt 的憑證,詳細教學可以參考這篇:SSL For Free 免費 SSL 憑證申請,使用 Let’s Encrypt 最簡單方法教學!

3. 自己架設主機:如果你是自行架設主機,且使用 CentOS 系統,請參考我為你準備的筆記:

作業系統:CentOS 6.6

記得先安裝 curl / mod_ssl

yum install curl mod_ssl

Git 最新版本下來

curl -LO https://raw.githubusercontent.com/lukas2511/dehydrated/master/dehydrated

把程式安裝到 /etc/dehydrated/ 下:

mkdir /etc/dehydrated/
cp dehydrated /etc/dehydrated/
cmod 744 /etc/dehydrated/dehydrated

設定 config.sh 並且建立對應的目錄 (最新版本的檔案名稱變成 config):

echo "WELLKNOWN=/var/www/dehydrated" > /etc/dehydrated/config
mkdir -p /var/www/dehydrated/

Apache 驗證設定,在 /etc/httpd/conf/httpd.conf 要認證的 virtual host 裡加上:

Alias /.well-known/acme-challenge/ /var/www/dehydrated/

產生 SSL certificate,請更換成你的網域名稱:

/etc/dehydrated/dehydrated -c -d mamu.com.tw

成功的話會有類似的輸出:

# INFO: Using main config file /etc/dehydrated/config.sh
Processing letsencrypt.tw
+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting challenge for letsencrypt.tw...
+ Responding to challenge for letsencrypt.tw...
+ Challenge is valid!
+ Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
+ Done!

成功後產生的檔案都在 /etc/dehydrated/certs/icorp.com.tw/ 裡

設定 Apache 的 SSL,編輯 /etc/httpd/conf.d/ssl.conf 修改憑證位置

SSLCertificateFile /etc/dehydrated/certs/icorp.com.tw/cert.pem

SSLCertificateChainFile /etc/dehydrated/certs/icorp.com.tw/chain.pem

SSLCertificateKeyFile /etc/dehydrated/certs/icorp.com.tw/privkey.pem

同時在 VirtualHost 標籤內設定 HTST:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

參考資料:Configure HSTS (HTTP Strict Transport Security) for Apache/Nginx

打開 Mod_rewrite 將 http 轉到 https

RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

重新啟動 Apache

service httpd restart

在 CronJob 中增加定時執行,每天一次吧:

/etc/dehydrated/dehydrated -c -d mamu.com.tw.tw -d www.mamu.com.tw; /etc/init.d/httpd reload

Apache 的 SSL 安全性設定,編輯 /etc/httpd/conf.d/ssl.conf 修改以下兩行:

SSLProtocol All -SSLv2 -SSLv3
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"

設定 /etc/sysconfig/httpd 關閉 SSLCompression

OPENSSL_NO_DEFAULT_ZLIB=1

重新啟動 Apache

service httpd restart

去這邊做 SSL 安全測試:www.ssllabs.com

正常來說你會取得一張漂亮的 A+ 恭喜!

2016-9-27-%e4%b8%8b%e5%8d%88-11-04-38