有了 < a href="/post/2013/06/purchase-rapidssl-certificate-from-cheapssls/"> 服務器憑證 後,自然就是使用它了。在影化身的應用中,我們使用 HTTPS 來確保客戶端的 JavaScript 程式不會再傳輸過程中被修改,本文會說明如何設定 Heroku 來支援 HTTPS 傳輸協定。

Heroku 的 SSL 支援是要付費的,撰寫本文時,費用是每月 20 塊美金。對於如何設定 SSL endpoint, Heorku 已經有很好的 < a href="https://devcenter.heroku.com/articles/ssl-endpoint" target="_blank" rel="noopener"> 說明文件 。下列總結一下步驟:

新增 SSL Endpoint

透過命令列,在本地 Heroku 應用的目錄中,使用下列指令新增 SSL endpoint:

1
2
$ heroku addons:add ssl:endpoint
Adding ssl:endpoint on example... done, v1 ($20/mo)

準備憑證機構憑證包

由於瀏覽器大部份都只有預裝根憑證機構的憑證,中繼憑證機構的則未安裝。如果只是設定根以及服務器用的憑證,瀏覽器並無法正確辨識認證。為了解決這個問題,需要把根憑證與中繼憑證合併成一個憑證包。 山姆鍋使用的是 RapidSSL 剛好有已經準備好的 < a href="https://knowledge.rapidssl.com/library/VERISIGN/ALL_OTHER/RapidSSL%20Intermediate/RapidSSL_CA_bundle.pem" target="_blank" rel="noopener"> 憑證包 。 對於其他憑證機構,則需要透過下列指令將它們串接在一起:

1
cat 中繼憑證. crt 根憑證. crt > bundle.pem

安裝憑證

1
2
3
4
5
6
7
8
$ heroku certs:add server.crt bundle.pem myserver.key
Adding SSL Endpoint to example... done
example now served by tokyo-2121.herokussl.com.
Certificate details:
Expires At: 2012-10-31 21:53:18 GMT
Issuer: C=US; ST=CA; L=SF; O=Heroku; CN=www.example.com
Starts At: 2011-11-01 21:53:18 GMT
...

注意當中的’tokyo-2121.herokussl.com’ 是 Heroku 配給你的 SSL 域名 ;server.crt 是由憑證供應商提供給你的憑證擋。SSL 域名在設定 DNS 會用到。

設定 DNS

為了讓使用者可以使用 ‘https://www.eavatar.com’這樣的 URL 來存取網站,需要設定 DNS 的 CNAME 紀錄。如何設定會依照 DNS 服務供應商而不同,本文就不詳述。 只要設定好一個 CNAME 來把 ‘www.example.com’ 對應到 ‘tokyo-2121.herokussl.com’,等一段時間後應該就可以使用。本文假設憑證所指定的域名是: ‘www.example.com’; 而 Heroku 配置給你的 SSL 域名是’tokyo-2121.herokussl.com’。這兩個都要根據你自己的實際值來修改。

看到瀏覽器位址列出現一把關閉的鎖就表示它能夠正確驗證服務器憑證。