教學目標

主要解決如何在 Linux 作業系統中,將 SSL 憑證和金鑰檔設定至 HAProxy 負載平衡伺服器,讓我們可以針對不同的服務模擬進行安全連線的問題。

重點概念

首先閱讀本篇之前,請先完成 HAProxy 的設定,請參考「問題解決 HAProxy (1)」 教學文章。

接著只要將 SSL 憑證和金鑰檔設定至 HAProxy 負載平衡伺服器中,就能夠讓我們針對不同的服務進行安全連線,其實只要簡單三個步驟就能夠完成初步實作,分別為;

  1. 建立 SSL 憑證和金鑰檔。
  2. 設定 HAProxy 伺服器。
  3. 測試與驗證。

建立 SSL 憑證和金鑰檔

建立 HAProxy 專屬 SSL 憑證的目錄 /etc/haproxy/ssl/ 中。

1
$ sudo mkdir /etc/haproxy/ssl/

產生一組沒有加密的 2048 bits 私密金鑰和憑證簽署請求。

  • Country 國別
  • State 州
  • Location 地區
  • Organization 組織
  • Organizational Unit 組織部門單位
  • Common Name 網域名稱
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/haproxy/ssl/server.key -out /etc/haproxy/ssl/server.crt
Generating a 2048 bit RSA private key
....+++
........+++
writing new private key to '/etc/haproxy/ssl/server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
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]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.myserver.com
Email Address []:

指令詳細說明:

  • openssl:主要是用於建立和管理憑證、金鑰、簽章請求、…等應用的工具。
  • req:主要是建立新的 X.509 憑證簽章請求,SSL 是使用 X.509 公開金鑰架構標準進行金鑰和憑證管理。
  • -x509:主要是設定我們自主簽署的憑證檔案取代一般憑證請求。
  • -nodes:主要是設定密碼保護金鑰檔的安全。
  • -days 365:主要是設定憑證有效期間為一年
  • -newkey rsa:2048:主要是同時建立憑證請求和新的私密金鑰,採用 2048 bits 的 RSA 金鑰。
  • -keyout:主要是設定私密金鑰檔的名稱。
  • -out:主要是憑證請求檔的名稱

產生 PEM 格式的憑證和金鑰合併檔案。

1
$ sudo cat /etc/haproxy/ssl/server.crt /etc/haproxy/ssl/server.key > /etc/haproxy/ssl/server.pem

設定 HAProxy 伺服器

開啟 HAProxy 伺服器的設定檔。

1
$ vi website.cfg

設定臨時產生 Diffie-Hellman 私密金鑰,主要會取決於 RSA 金鑰的加密大小,預設為 1024,因為我們是採用採用 2048 bits 的 RSA 金鑰,所以要設定為 2048。

1
2
3
4
global
daemon
maxconn 256
tune.ssl.default-dh-param 2048

設定 PEM 格式的憑證和金鑰合併檔案至 HAProxy 伺服器中,同時設定為 8443 網站連接埠和 https 協定。

1
2
3
4
5
listen http-in
bind *:8443 ssl crt /etc/haproxy/ssl/server.pem
reqadd X-Forwarded-Proto: https
server server1 127.0.0.1:8080 maxconn 32
server server2 127.0.0.1:8080 maxconn 32

測試與驗證

停止 HAProxy。

1
2
$ ps aux|grep haproxy
$ sudo kill -9 <PID>

執行 HAProxy。

1
$ haproxy -f website.cfg

開啟瀏覽器輸入以下網址進行測試與驗證。

1
$ firefox https://127.0.0.1:8443

總結在問題解決 HAProxy (1) 教學文章中讓我們透過 HAProxy 解決方案快速將能夠讓我們在三分鐘內啟用高可用性、負載平衡和代理網路應用程式的解決方案,接著只要再來透過本篇教學文章的簡單三步驟,就能夠完成 SSL/TLS 安全機制的連線直接應用至任何服務,同時概念性證明任何服務若其主要的負載平衡伺服器已經設定 SSL/TLS 安全機制的連線,則任何服務皆不用在設定 SSL/TLS 安全機制就已經能夠進行安全連線。

相關資源