環境參數:
- 前端:lighttpd-1.4.41
- Hostname:SRV1
- IP:10.11.11.1
- 後端:lighttpd-1.4.41
- Hostname:Srv2
- IP:10.11.11.2
- 加密網址:domain.com.tw
前後端都利用 Lighttpd 來達成 SSL Reverse Proxy目的。
製作主機憑証
依序製作好rootca.key、rootca.req及rootca.crt,先搞懂req(申請書,即request)及crt(証書,即Certificate),才不會延伸檔名一大堆,保証搞到錯亂。
主機歸主機,就是一台機器;伺服器是Apache、Nginx或Lighttpd。
如何製作主機憑証教學
非常仔細的教學,照著作即可
準備好這3個檔案才能進行CloudFlare提供的免費SSL服務。
Key(私鑰)、Req(申請書)及Crt(憑証証書) 檔名概要
檔案名稱 | 功能意義 | |
---|---|---|
主機憑証 | /etc/ssl/rootca.key | a1 在自己Server產生的 Private Key,自己就是最高憑証中心 |
/etc/ssl/rootca.req | a2 要向憑証中心提出申請的檔案 | |
/etc/ssl/rootca.crt | a3 憑証中心所簽發簽發的憑證 | |
伺服器憑証 | /etc/ssl/domain.com.tw.key | b1 以網址為準則所產生的憑証 |
/etc/ssl/domain.com.tw.req | b2 伺服器要向憑証中心提出申請的檔案 | |
/etc/ssl/domain.com.tw.crt | b3 憑証中心所簽發簽發給伺服器的憑證 |
完成了這些步驟,就可以啟用SSL加密,不過是非經認可的加 ,自己在家裡試驗即可。若要應用在公開的網站,那麼就要經權威認証機構簽發給您Crt,才能獲得來訪網站者的信任。
SSL憑証服務商有很多選擇,在此不贅述,只介紹免費的CloudFalre。
申請CloudFlare免費的SSL
變更NS由CloudFlare代管
要免費的SSL服務,就先得將Domain Name的NS指向到CloudFlare,申請CloudFlare帳號後,按照說明即可很輕鬆的將網域轉入,交由CloudFlare代管。
上傳申請書
在製作SSL過程 b2中會得到domain.com.tw.req申請書,直接把內容向CloudFlare提出申請即可,只要在這裡上傳後,SSL簽發憑証手續更完成。
CloudFlare也提供了自動產生req及crt的機制,也可以參照使用,不過在此還是使用我們自己辛苦做的吧!
不過,經由CloudFlare得到的免費SSL憑証,其實並非全程加密,如果是商業網站,還是乖乖的提撥費用向認証機構申請方為妥當。
CloudFlare既然代管了您的網址,那麼所有的流量會先指向到CloudFlare的IP,再轉向到您的主機,有此概念後,再進行主機設定就順利多了。
下載証書
上傳申請書後,立即下戴cloudflare的証書檔案存成 /usr/local/etc/lighttpd/ssl/domain.com.tw.crt。
關於domain.com.tw.crt
仔細看看,到此為止共出現了2個domain.com.tw.crt証書,一個是我們自行簽發的 /etc/ssl/domain.com.tw.crt,這只能在家裡用。要公開就得使用由CloudFlare發給的crt檔案才行。
設定伺服器
以Lighttpd mod_proxy的方式,由前端SRV1當防護主機,再將真正的流量導到內部的SRV2。
準備 pem 檔案
Lighttpd要執行ssl加密設定,要準備好pem檔案:
cat /etc/ssl/domain.com.tw.key /usr/local/etc/lighttpd/ssl/domain.com.tw.crt > /usr/local/etc/lighttpd/ssl/domain.com.tw.pem
domain.com.tw.pem要同時存放在SRV1及SRV2主機中。
前端SRV1(Lighttpd)
由於要與CloudFlare接口,所以自己的第一台主機SRV1端口要設定為HTTP 80,再跳轉SRV2的HTTP 443。
$ sudo vi /usr/local/etc/lighttpd/lighttpd.conf
## domain.com.tw
##______________________________
$HTTP["host"] == "domain.com.tw" {
ssl.engine = "enable"
ssl.pemfile = "/usr/local/etc/lighttpd/ssl/domain.com.tw.pem"
# Proxy to SRV2:10.11.11.2
proxy.server = ( "" =>((
"host" => "10.11.11.2",
"port" => 443
)))
}
}
$ sudo /usr/local/etc/rc.d/lighttpd restart
如果前端喜歡用Apache,那參考以下設定:
<VirtualHost *:80>
ServerName domain.com.tw
SSLEngine on
SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:!DH:!EXPORT:!RC4:+HIGH:+MEDIUM:!LOW:!aNULL:!eNUL
SSLCertificateFile /usr/local/etc/ssl/domain.com.tw.crt
SSLCertificateKeyFile /usr/local/etc/ssl/domain.com.tw.key
SSLCertificateChainFile /usr/local/etc/apache24/ssl/1_root_bundle.crt
ProxyPass / https://10.11.11.2/
ErrorLog "/var/logs/domain.com.tw-error.log"
CustomLog "/var/logs/domain.com.tw-access.log" combined
<Proxy *>
Order Allow,Deny
Allow from all
</Proxy>
</VirtualHost>
後端SRV2
$ sudo vi /usr/local/lighttpd/lighttpd.conf
$SERVER["socket"] == "10.11.11.2:443" {
ssl.engine = "enable"
ssl.pemfile = "/usr/local/etc/lighttpd/ssl/domain.com.tw.pem"
server.document-root = "/htdocs/domain.com.tw"
}
$ sudo /usr/local/etc/rc.d/lighttpd restart
若想直接在第一台主機SRV1運行https機制,那麼就將後端SRV2的lighttpd設定複製到SRV1即可。
恭喜,大功告成了!訪問 https://domain.com.tw,享受成果。
EmoticonEmoticon