SAS 資訊安全 (18)

教學目標

初步了解 SAS Viya 平台加密技術的基本概念。

重點概念

首先 Apache HTTP Server 是 SAS Viya 使用者主要的進入點,然而 SAS Viya 部署時預設會自動產生簽署憑證,此時我們是否能夠設定為客製產生的憑證呢?答案是可以的,但是必須先請客戶確認憑證是否正確被客戶端所信任,所謂客戶端主要包括瀏覽器、行動裝置和 REST API 客戶端。

接著設定主要可以分為事先設定和事後設定,建議透過事先進行設定,並且透過 Ansible 進行自動化部署,相關步驟分別為:

  1. 安裝 Apache HTTP Server 和 mod-ssl。
  2. 使用 OpenSSL 工具建立私密金鑰。
  3. 使用 OpenSSL 工具建立憑證請求檔。
  4. 透過憑證請求檔取得被簽署的憑證。
  5. 部署被簽署的憑證和更新 Apache HTTP Server 相關設定。
  6. 重新啟動 Apache HTTP Server 和驗證 HTTPS 相關設定。

安裝 Apache HTTP Server 和 mod-ssl

1
$ sudo yum install -y httpd mod_ssl

使用 OpenSSL 工具建立私密金鑰

1
$ openssl genrsa -out /etc/pki/tls/private/web_server_key.pem 2048

使用 OpenSSL 工具建立私密金鑰

1
$ openssl req -new -key /etc/pki/tls/private/web_server_key.pem -out /etc/pki/tls/certs/web_server_csr.pem

其中憑證請求檔主要用於組織內部簽署或商業憑證頒發機構外簽署,當內部簽署時將會非常快速且有效率,反之採用外部簽署時將會花費許多成本和時間。請注意為了確保憑證能夠正確被瀏覽器處理,所以被簽署的憑證中的 Subject Alternate Names 需要為對應的完整主機名稱,但也有可能是包括 IP 位址的資訊。

再來若是 Linux 作業系統則建議部署 SAS Viya 之前就先進行設定,主要會透過 Ansible 部署與 Apache HTTP Server 和 mod-ssl 等套件進行連結,請注意我們必須在進行 Ansible 部署之前,先確認相關套件的安裝、設定和測試是否正確,並且更新的 vars.yml 設定檔中的 HTTPD_CERT_PATH 屬性值指向 CA 憑證鏈檔,此憑證鏈檔主要包括 CA 根憑證和 CA 中繼憑證,但若是 Apache HTTP Server 已經包括完整的憑證鏈,則就不需要進行設定。當確認無誤之後執行 Ansible 將會增加 CA 憑證錄檔案至「/opt/sas/viya/config/etc/SASSecurityCertificateFramework/cacerts/」目錄中,並且命名為 httpproxy-XXX-ca.crt,其中 XXX 主要為 inventory.ini 設定檔中定義的主機名稱,以及將 CA 憑證鏈加入至 Trust Stores 中,至於 Ansible HTTP Server 憑證將會被儲存在 SAS Configuration Server 中,以利確保 Apache HTTP Server 憑證皆有皆加至所有 Trust Stores 中。

最後我們當然也能夠在部署 SAS Viya 之後再取代預設的伺服器憑證檔「/etc/pki/tls/certs/localhost.crt」和私密金鑰「/etc/pki/tls/private/localhost.key」,以及更新 Apache HTTP Server 憑證設定,主要修改伺服器憑證選項「SSLCertificateFile」和私密金鑰選項「SSLCertificateKeyFile」,當確認無誤之後必須重新啟動 httpproxy 和 httpd 服務才會生效。除此之外我們還必須手動更新 CA 憑證鍵至 Trust Stores 中,主要修改 vars.yml 中屬性值「HTTPD_CERT_PATH」指定憑證鏈,請注意必須設定 Apache HTTP Server 而非 Ansible Controller 的主機伺服器,設定完成之後必須使用 Ansible Playbook 發佈 CA 憑證鏈和更新 Trust Stores,主要指令為「ansible-playbook -i inventory.ini utility/distribute-httpd-certs.yml」,當確認無誤之後必須重新啟動所有服務才會生效。

相關資源