Heroku 教程:自定義域名配置 HTTPS

起源

自己 Heroku 的 app 域名是開始 SSL 的,可是由於他的域名爲 appname.herokuapp.com,沒有在國內備案,因此咱們須要綁定一個國內備案的域名到 Heroku 上面。因而就有了下面的文章。html

獲取 SSL 證書

能夠直接使用一些服務商購買域名 SSL 證書,或者用其餘的方式本身生成。下面咱們講解一下怎麼生成。node

生成私有 Key

系統 安裝方式
Mac OS X Homebrew: brew install openssl
Windows Windows complete package .exe installer
Ubuntu Linux apt-get install openssl

Heroku 只支持 RSA,下面咱們直接運行命令web

openssl genrsa -des3 -out server.pass.key 2048

輸入以下命令獲取server.keybash

openssl rsa -in server.pass.key -out server.key

生成 CSR

CSR是證書籤名請求,須要使用上一步生成的私有 Key 進行生成。這個時候須要輸入 Country Name 和 Common Name,格式以下服務器

字段 內容
Country Name ISO 3166 格式的簡碼
Common Name www.example.com,*.example.com 須要注意的是這個名字必須和使用的保持一致

輸入以下命令生成 CSR微信

openssl req -nodes -new -key server.key -out server.csr

生成 CRT

CRT 通常都是找簽發 SSL 的機構簽發,大部分是收費的,也有免費的,若是不找 SSL 機構簽發,能夠按照下面的方式本身生成,不過本身生成的證書可使用,只是默認是不信任的,須要用戶本身認證。一般狀況生成的證書爲 CRT 或者 PEM格式的。app

openssl req -new -x509 -key server.key -out ca.crt -days 3650

這個證書用來給本身的證書籤名,下面是建立服務器證書dom

openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey server.key -CAcreateserial -out server.crt

筆者購買的是阿里雲的域名,其默認支持生成3個免費的域名,並且使用他的生成,默認是信任的。直接經過阿里雲控制檯生成而後下載使用便可,能夠省略上面的步驟。curl

配置 Heroku

建立插件

heroku addons:create ssl:endpoint

添加證書

heroku certs:add server.crt server.key --type endpoint

運行完命令會爲你分配一個新的 SSL 域名,須要你後面作綁定使用。ui

appname now served by iiii-65701.herokussl.com

修改證書

若是後面更新了證書,可使用以下命令修改證書。

heroku certs:update server.crt server.key --endpoint example-2121.herokussl.com

配置域名

添加域名

直接使用以下命令配置剛纔你輸入的域名

heroku domains:add www.example.com

若是是配置域名,更多詳情能夠參照
Heroku 教程:綁定自定義域名

配置DNS

這個時候須要配置一下 DNS 建立一個 CNAME 指向 Heroku,這個時候就須要指向到咱們剛纔生成的,iiii-65701.herokussl.com

驗證

等待一下子之後可使用以下命令檢測一下是否配置成功

curl -kvI https://www.example.com
* About to connect() to www.example.com port 443 (#0)
*   Trying 50.16.234.21... connected
* Connected to www.example.com (50.16.234.21) port 443 (#0)
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using AES256-SHA
* Server certificate:
*    subject: C=US; ST=CA; L=SF; O=SFDC; OU=Heroku; CN=www.example.com
*    start date: 2011-11-01 17:18:11 GMT
*    expire date: 2012-10-31 17:18:11 GMT
*    common name: www.example.com (matched)
*    issuer: C=US; ST=CA; L=SF; O=SFDC; OU=Heroku; CN=www.heroku.com
*    SSL certificate verify ok.
GET / HTTP/1.1
User-Agent: curl/7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8r zlib/1.2.3
Host: www.example.com
Accept: */*
...

參考文檔

Heroku 官方配置

做者

本文做者麻醬,歡迎討論,指正和轉載,轉載請註明出處。
若是興趣能夠關注做者微信訂閱號:碼匠筆記
微信二維碼

相關文章
相關標籤/搜索