在 Nginx 中安裝 SSL certificate 及啟用 SPDY

(特色圖片取自 David Bleasdal

HTTP/2 最終草案於前些日子已拍板定案並送交 IETF 審核,其中最令人關注的技術便是 SPDY ,改善 HTTP 內容傳送方式。

如果你還不知道 SPDY 是什麼,可以參閱此篇文章,如果一個頁面須向伺服器發出 200 個請求才能完全載入,那 SPDY 比起傳統 HTTP/1.1 的多線程加上管線化方式大約可以快上 50% 左右。如果你想體驗一下 SPDY 有多快可以到 這裡,如果你想知道你的瀏覽器是否支援 SPDY 則可以到 這裡

 

環境

OS:Ubuntu 14.04 LTS

Web Server:nginx 1.6.2

 

準備工作

申請一個DV SSL (Domain Validated)憑證,便宜的方案可參考我使用的 starfieldtech 一年 USD 7.99

產生一組SHA-256 密鑰包含 公鑰.csr / 私鑰.key

openssl req -new -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl/domain.key -out /etc/nginx/ssl/domain.csr

過程有一些需填寫的地方

Country Name (2 letter code) [AU]: TW #國家名稱縮寫

State or Province Name (full name) [Some-State]:Taiwan #洲名或省名

Locality Name (eg, city) []:Taipei #城市名稱

Organization Name (eg, company) [Internet Widgits Pty Ltd]:Likol #單位名稱,可填個人名字

Organizational Unit Name (eg, section) []:Person #部門

Common Name (e.g. server FQDN or YOUR name) []:www.likol.idv.tw #使用憑證的網域名稱

Email Address []:. #可選填,打 . 留空

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: #在密鑰中加入密碼,可選填(如果填了 Nginx 每次重啟都會詢問你密碼)
An optional company name []: . #選填,打 . 留空

然後將產生出來的公鑰 .csr 內容發送給憑證服務公司,

如果純粹測試使用可直接產生自己簽發的根憑證

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

Upgrade Nginx

1.6.2 版本的 Nginx 對 SPDY的支援度較高又是穩定版本,先使用 nginx -v 指令檢查目前系統安裝的版本

nginx -v
nginx version: nginx/1.6.2

如果版本過舊使用下列指令升級

sudo apt-get install software-properties-common
sudo add-apt-repository ppa:nginx/stable
sudo apt-get update
sudi apt-get install nginx

升級前記得先備份原先的 nginx.conf 和站點的設定檔!

 

Install SSL certificate

在 nginx.conf 中加入下列設定

sudo nano /etc/nginx/nginx.conf
##
# SSL Settings
##
ssl_session_timeout 10m;
ssl_session_cache shared:SSL:20m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD$
ssl_prefer_server_ciphers on;

如果是測試用自簽的憑證,可直接在站點設定檔中加入前面產生的 SSL certificate

sudo nano /etc/nginx/sites-available/default
server {
                ...
                listen 443 ssl spdy;
                ssl_certificate /etc/nginx/ssl/nginx.crt;
                ssl_certificate_key /etc/nginx/ssl/nginx.key;
}

如果是服務憑證商簽發後寄給你的憑證需先將 bundle.crt 與 簽署過的公鑰 public.crt 做合併

cat bundle.crt public.crt >> domain_chain.crt

 

server {
                ...
                listen 443 ssl spdy;
                ssl_certificate /dir/domain_chain.crt;
                ssl_certificate_key /dir/domain.key;
}

完成!

sudo service nginx restart

接下來你如果你使用 Chrome 瀏覽器,可以到 商店頁面 安裝外掛程式偵測網站是否運行於 SPDY

螢幕截圖 2015-03-26 00.17.17

 

Likol

哈囉!

You may also like...

發佈留言