- rootCA、伺服器憑證
首先,憑證中的 rootCA 要是合法的憑證核發機構,但 Elasticsearch 可以用套件中的方法實作出 rootCA,就不需要再去給合法機構簽發
而 Elasticsearch、Kibana、Logstash 會依這張 rootCA 再去簽發伺服器憑證,原因是不該使用 rootCA 進行認證,有點像是保護的功能,若是伺服器憑證被破解,大不了再重產一張,但 rootCA 被破解,就是整個 ES 重產一張,這樣會很麻煩
然後還要產一張 Fleet-server 那邊專用的憑證,主要原因是通常 ELK + elastic-agent 的,如果全部共用一張時,當擴 ES 節點時,新節點無法被舊憑證所認可,因此要重新簽新憑證,但當 Elastic-agent 很多的時候,就會很麻煩,所以會是 Fleet-server 那裡自己一張
- 製作 rootCA
要先到安裝的 Elasticsearch 的那台上,我是使用 tarball 安裝,執行elasticsearch-certutil ,選擇 ca mode
# 產生一張 10 年效期的 rootCA
/home/elk/ES/bin/elasticsearch-certutil ca --days 3650
我的 workdir 在 /home/elk/ES 下,在其下會產生一個 zip 檔,可以解壓縮它,就拿到一個 p12 檔了
p12 檔是公鑰 + 私鑰,然後用 password 才能進行解碼,會建議在建 rootCA 時,先不設定密碼
然後是把 rootCA.p12 分解成 crt, key,會在後續用到,使用下方的 openssl 指令,p12 跟 crt 檔是後續需要的
# bash
openssl pkcs12 -in rootCA.p12 -out rootCA.crt -nokeys -clcerts
openssl pkcs12 -in rootCA.p12 -out rootCA.key -nocerts -nodes
- 製作 ELK 間的通訊 CA
接著,要根據 rootCA 建立 ELK 間的 TLS CA,至於為什麼是 TLS 會在其它文章說明
首先要先確認適用的網域,一般來說不知道的話就把 ELK 的 ip 都寫進去,按照 ELK 的官網的話,要先建立一個 yml,然後把 ELK 的對應 ip 或是 FQDN 都輸入進去
# ssl.yml
instances:
- name: "my-cluster"
ip:
- "172.16.1.205"
- "172.16.1.206"
- "172.16.1.207"
我只寫了 ES 節點的 IP,試想 Kibana 跟 Logstash 只是要跟 ES 溝通,但 ES 沒有請求 Kibana、Logstash 的需要,所以只要在 Kibana、Logstash請求時,能把 ES 節點認定為憑證認可的對象即可,所以才只寫 3 個 ES 節點
然後就是根據這個 yml 產出伺服器憑證,執行 elasticsearch-certutil ,選擇 cert mode,要選擇 ssl.yml,並帶入原本的 rootCA.p12
# 產出一張 10 年效期的伺服器憑證
/home/elk/ES/bin/elasticsearch-certutil cert -in /elk/ssl/ssl.yml --days 3650 --ca /home/elk/ES/config/certs/rootCA.p12
在 /home/elk/ES 的下面,一樣會有 p12 檔,將其分解成 crt, key
# bash
openssl pkcs12 -in elastic.p12 -out elastic.crt -nokeys -clcerts
openssl pkcs12 -in elastic.p12 -out elastic.key -nocerts -nodes
- Fleet-server 用憑證
使用下方指令來產生 Fleet-server 用 CA,執行 elasticsearch-certutil ,選擇 cert mode,並帶入 rootCA.crt, rootCA.key,這裡應該可以用 p12 檔去產,但沒有研究
我這裡裝在某個 ES 節點上是因為那個節點跟 Fleet-server共用,若是 Fleet-server 是其它台,就要填那台的 IP 跟 FQDN
# 產出一張 10 年效期的伺服器憑證
/home/elk/ES/bin/elasticsearch-certutil cert --name fleet-server --ca-cert /home/elk/ES/config/certs/rootCA.crt --ca-key /home/elk/ES/config/certs/rootCA.key –dns <FQDN> --ip 172.16.1.206 –pem –days 3650
在 /home/elk/ES 的下面,一樣會有 p12 檔,將其分解成 crt, key
# bash
openssl pkcs12 -in fleet-server.p12 -out fleet-server.crt -nokeys -clcerts
openssl pkcs12 -in fleet-server.p12 -out fleet-server.key -nocerts -nodes