2017年2月12日 星期日

申請免費的Cloudflare SSL搭架Lighttpd Proxy為網站加密

enter image description here

環境參數:

  • 前端: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目的。

Created with Raphaël 2.1.2架構概念圖domain.com.tw(SRV1前端Lighttpd)domain.com.tw(SRV1前端Lighttpd)domain.com.tw(SRV2後端Lighttpd)domain.com.tw(SRV2後端Lighttpd)-> 透過Lighttpd proxy

製作主機憑証

依序製作好rootca.keyrootca.reqrootca.crt,先搞懂req(申請書,即request)及crt(証書,即Certificate),才不會延伸檔名一大堆,保証搞到錯亂。
主機歸主機,就是一台機器;伺服器是Apache、Nginx或Lighttpd。

如何製作主機憑証教學

非常仔細的教學,照著作即可
準備好這3個檔案才能進行CloudFlare提供的免費SSL服務。

Created with Raphaël 2.1.2a1.自建最高憑証主機→/etc/ssl/rootca.keya2.向自己提出申請→/etc/ssl/rootca.reqa3.得到了主機証書→/etc/ssl/rootca.crtb1.產生伺服器憑証→/etc/ssl/domain.com.tw.keyb2. 製作伺服器申請書→/etc/ssl/domain.com.tw.reqb3.得到伺服器証書→/etc/ssl/domain.com.tw.crt轉移NS至CloudFlare代管向CloudFlare申請SSL設定前端SRV1設定後端SRV1完成

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簽發憑証手續更完成。
enter image description here
CloudFlare也提供了自動產生req及crt的機制,也可以參照使用,不過在此還是使用我們自己辛苦做的吧!
enter image description here
不過,經由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檔案才行。

Created with Raphaël 2.1.2以訪客的角度來看訪客訪客CloudFlareCloudFlare主機SRV1+SRV2主機SRV1+SRV2真正SSL經認証加密只有這段CDN機制這段是沒有認証加密的(私人加密)

設定伺服器

以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