作為全球最大最有影響力的搜尋器 – Google,它的一舉一動都關乎網站的人流,而 Google 自從更改演算法,支援 SSL 的網站會有較佳排名,各站長就不得不留意了。
SSL 的誤會
- 有不少人認為 SSL 很貴,但其實暫時企企見到最平的 SSL 已經低至 US$3.5 一年(不過需要一次過交 5 年費用),而逐年繳交的貴一些,但也只需要 $3.88 一年,和一個 domain 價錢差不多。
- 而有些人認為 SSL 會拖慢網站速度,但其實現在兩者已經相差不大,而且已經有 spdy 等新 protool,需要 SSL 才能支援。
- 還有一些人以為使用 SSL 後用戶端就不會有緩存,但其實會否緩存是由 cache-control header 控制,而 http 和 https 只是傳送方式的分別,並不影響緩存。
- 有些朋友以為 SSL CERTIFICATE 一定要獨立 IP 才可以申請,其實並不需要,一般 web hosting 都可以申請。
安裝 openssl
首先用戶需要準備一條 private key,如果在 ubuntu,只要安裝 sudo apt-get openssl 安裝就可以了。
windows 用戶在這裏下載 win32/64 版本的 openssl – http://indy.fulgan.com/SSL/
製作 private key
輸入 “openssl genrsa -out example.com.key 2048
”
制作 key 後再制作 csr
openssl req -new -key example.com.key -out example.com.csr
填入有關資料,而最重要的是 Common Name (eg, YOUR name) []:
需要填寫你網站的資料,就本站來說,就是 enterpr1se.info,一般 CA 都會連 www 的網址給你,即是可以在 enterpr1se.info 和 enterpr1se.info 上用。
申請 SSL cert
今次使用了免費 90 days 的 COMODO SSL cert 來示範,首先到 https://secure.instantssl.com/products/SSLIdASignup1a signup 和填寫 private key 的資料。
如果在 linux 上可以用指令 cat example.com.key 來看,在 Windows 上面用 notepad 就可以了。
而 private key 的內容格式類似這樣,將全部內容抄在網頁上
—–BEGIN CERTIFICATE REQUEST—–
MIIDUDCCArkCAQAwdTEWMBQGA1UEAxMNdGVzdC50ZXN0LmNvbTESMBAGA1UECxMJ
TWFya2V0aW5nMREwDwYDVQQKEwhUZXN0IE9yZzESMBAGA1UEBxMJVGVzdCBDaXR5
(more encoded data)…….
Rq+blLr5X5iQdzyF1pLqP1Mck5Ve1eCz0R9/OekGSRno7ow4TVyxAF6J6ozDaw7e
GisfZw40VLT0/6IGvK2jX0i+t58RFQ8WYTOcTRlPnkG8B/uV
—–END CERTIFICATE REQUEST—–
COMODO 會 send email 給用戶以確認 domain,只要依指示認証就可以了。
制作 .crt cert
COMODO 會寄 email 給入面,入面應該有4 個檔案,如下圖:
解壓後,在 linux 可以輸入以下指令 (enterpr1se_info.crt 請自行更改)
cat enterpr1se_info.crt ComodoHigh-AssuranceSecureServerCA.crt AddTrustExternalCARoot.crt > ssl-bundle.crt
完成後會有一個叫 ssl-budle.crt 的檔案。
在 Winodws 上面則只要用 notepad 將上述四個檔案的內容抄進一個檔案上就好了。
設定 nginx
在 /etc/nginx/site-available 內,vim 你網站的設定檔。
將內容改成 (example.com 改為用戶自己的網址)
server { listen 443; server_name example.com; ssl on; ssl_certificate /var/www/example.com/cert/ssl-bundle.crt; ssl_certificate_key /var/www/example.com/cert/example.com.key; #... other stuff }
如果 nginx 支援 spdy 的話可以改為
listen 443 ssl spdy;
再將 port 80 HTTP 的內容自動 redirect 去 HTTPS SSL,在檔案最後加上
server { listen 80; server_name example.com; return 301 https://example.com$request_uri; }
另外在 nginx 設定開啓 SSL session cache 加速 SSL
在 http 內容加上
http { ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; #... other stuff }
最後 restart nginx sudo service nginx restart
設定 Apache
在 ubuntu 內,一般安裝 apache 都已經安裝了 mod_ssl
如果真的沒有的話可以這樣安裝
sudo apt-get install apache2-common
其他 linux 可以這樣安裝
yum install mod_ssl
安裝後有機會需要啓用 SSL 模組 (optional)
sudo a2enmod ssl
之後設定 apache,一般來說 apache SSL 的設定位置多數名稱是
- httpd-ssl.conf
- ssl.conf
- 在 /etc/apache2/sites-enabled/ folder 內.
在 virstual host 下,Apache 預設網站名稱是 default-ssl.conf,其他 virtual host 名稱多數和 domain name 相同,如 enterpr1se.info.conf 或者 enterpr1se_info.conf 等。
下面以 example.com.conf 為例子,其他 virtual host 都是大同小異。
<VirtualHost www.example.com:443> SSLEngine On SSLCertificateFile /etc/apache2/ssl/example.com.crt SSLCertificateKeyFile /etc/apache2/ssl/example.com.key SSLCertificateChainFile /etc/ssl/ssl.crt/ssl-bundle.crt ServerAdmin [email protected] ServerName www.example.com DocumentRoot /var/www/example.com/public_html/ ErrorLog /var/www/example.com/logs/error.log CustomLog /var/www/example.com/logs/access.log combined </VirtualHost>
最後只要 restart apache 就可以 sudo service apache2 restart
將所有連線都以 https 進行
如果想將所有 http 連線都轉為 https
只要在根目錄 (root) 上的 .htaccess 加上
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]