keyring_okv
外掛程式是包含在 MySQL 企業版中的擴充功能,這是一個商業產品。若要深入瞭解商業產品,請參閱 https://mysql.dev.org.tw/products/。
金鑰管理互通協定 (KMIP) 可讓金鑰管理伺服器及其用戶端之間進行加密金鑰的通訊。keyring_okv
金鑰環外掛程式使用 KMIP 1.1 通訊協定,以安全方式作為 KMIP 後端的用戶端進行通訊。金鑰環資料完全由後端產生,而非由 keyring_okv
產生。此外掛程式可與這些與 KMIP 相容的產品搭配運作
Oracle Key Vault
Gemalto SafeNet KeySecure 設備
Townsend Alliance Key Manager
Entrust KeyControl
每個 MySQL 伺服器執行個體都必須單獨註冊為 KMIP 的用戶端。如果兩個或多個 MySQL 伺服器執行個體使用相同的認證集,則它們可能會干擾彼此的功能。
keyring_okv
外掛程式支援構成標準 MySQL 金鑰環服務介面的函數。這些函數執行的金鑰環操作可在兩個層級存取
SQL 介面:在 SQL 陳述式中,呼叫 第 8.4.4.12 節「通用金鑰環金鑰管理函數」中描述的函數。
C 介面:在 C 語言程式碼中,呼叫 第 7.6.9.2 節「金鑰環服務」中描述的金鑰環服務函數。
範例(使用 SQL 介面)
SELECT keyring_key_generate('MyKey', 'AES', 32);
SELECT keyring_key_remove('MyKey');
如需有關 keyring_okv
允許的金鑰值特性的資訊,請參閱第 8.4.4.10 節「支援的金鑰環金鑰類型和長度」。
若要安裝 keyring_okv
,請使用 第 8.4.4.3 節「金鑰環外掛程式安裝」中找到的一般指示,以及此處找到的 keyring_okv
特定組態資訊。
無論 keyring_okv
外掛程式使用哪個 KMIP 後端進行金鑰儲存,keyring_okv_conf_dir
系統變數都會配置 keyring_okv
用於其支援檔案的目錄位置。預設值為空,因此您必須將變數設定為已正確配置的目錄名稱,外掛程式才能與 KMIP 後端通信。除非您這麼做,否則 keyring_okv
會在伺服器啟動期間向錯誤日誌寫入訊息,指出無法通信
[Warning] Plugin keyring_okv reported: 'For keyring_okv to be
initialized, please point the keyring_okv_conf_dir variable to a directory
containing Oracle Key Vault configuration file and ssl materials'
keyring_okv_conf_dir
變數必須指定一個包含以下項目的目錄
okvclient.ora
:一個檔案,包含keyring_okv
與之通信的 KMIP 後端的詳細資訊。ssl
:一個目錄,包含與 KMIP 後端建立安全連線所需的憑證和金鑰檔案:CA.pem
、cert.pem
和key.pem
。如果金鑰檔案受密碼保護,ssl
目錄可以包含一個名為password.txt
的單行文字檔案,其中包含解密金鑰檔案所需的密碼。
為了讓 keyring_okv
正常工作,okvclient.ora
檔案以及包含憑證和金鑰檔案的 ssl
目錄都是必要的。使用這些檔案填入配置目錄的程序取決於與 keyring_okv
一起使用的 KMIP 後端,如其他地方所述。
keyring_okv
用於其支援檔案位置的配置目錄應具有限制模式,並且只能由用於執行 MySQL 伺服器的帳戶存取。例如,在 Unix 和類 Unix 系統上,若要使用 /usr/local/mysql/mysql-keyring-okv
目錄,以下命令(以 root
身分執行)會建立目錄並設定其模式和所有權
cd /usr/local/mysql
mkdir mysql-keyring-okv
chmod 750 mysql-keyring-okv
chown mysql mysql-keyring-okv
chgrp mysql mysql-keyring-okv
為了在伺服器啟動過程中可用,必須使用 --early-plugin-load
選項載入 keyring_okv
。此外,設定 keyring_okv_conf_dir
系統變數,以告知 keyring_okv
在哪裡找到其配置目錄。例如,在伺服器 my.cnf
檔案中使用以下行,並根據您的平台調整 .so
後綴和目錄位置
[mysqld]
early-plugin-load=keyring_okv.so
keyring_okv_conf_dir=/usr/local/mysql/mysql-keyring-okv
有關 keyring_okv_conf_dir
的其他資訊,請參閱第 8.4.4.16 節,「Keyring 系統變數」。
此處的討論假設您熟悉 Oracle Key Vault。一些相關的資訊來源
在 Oracle Key Vault 術語中,使用 Oracle Key Vault 來儲存和檢索安全物件的用戶端稱為端點。為了與 Oracle Key Vault 通信,必須註冊為端點,並透過下載和安裝端點支援檔案來註冊。請注意,您必須為每個 MySQL 伺服器執行個體註冊一個單獨的端點。如果兩個或多個 MySQL 伺服器執行個體使用相同的端點,它們可能會相互干擾對方的功能。
以下程序簡要總結了設定 keyring_okv
以與 Oracle Key Vault 一起使用的過程
建立
keyring_okv
外掛程式要使用的配置目錄。向 Oracle Key Vault 註冊一個端點以取得註冊權杖。
使用註冊權杖取得
okvclient.jar
用戶端軟體下載。安裝用戶端軟體以填入包含 Oracle Key Vault 支援檔案的
keyring_okv
配置目錄。
使用以下程序配置 keyring_okv
和 Oracle Key Vault 以協同工作。此描述僅總結如何與 Oracle Key Vault 互動。有關詳細資訊,請訪問Oracle Key Vault 網站並查閱《Oracle Key Vault 管理員指南》。
建立包含 Oracle Key Vault 支援檔案的配置目錄,並確保已將
keyring_okv_conf_dir
系統變數設定為命名該目錄(有關詳細資訊,請參閱通用 keyring_okv 配置)。以具有系統管理員角色的使用者身分登入 Oracle Key Vault 管理控制台。
選取「端點」索引標籤以進入「端點」頁面。在「端點」頁面上,按一下「新增」。
提供必要的端點資訊,然後按一下「註冊」。端點類型應為「其他」。成功註冊會產生註冊權杖。
從 Oracle Key Vault 伺服器登出。
再次連線至 Oracle Key Vault 伺服器,這次不登入。使用端點註冊權杖註冊並要求下載
okvclient.jar
軟體。將此檔案儲存至您的系統。使用以下命令安裝
okvclient.jar
檔案(您必須具有 JDK 1.4 或更高版本)java -jar okvclient.jar -d dir_name [-v]
選項
-d
後面的目錄名稱是要安裝解壓縮檔案的位置。如果給定選項-v
,則會產生記錄資訊,如果命令失敗,此資訊可能會很有用。當命令要求 Oracle Key Vault 端點密碼時,請勿提供。而是按 Enter。(結果是當端點連線至 Oracle Key Vault 時,不需要密碼。)
前面的命令會產生
okvclient.ora
檔案,該檔案應位於先前 java -jar 命令中選項-d
指定的目錄下的此位置install_dir/conf/okvclient.ora
預期的檔案內容包括如下所示的行
SERVER=host_ip:port_num STANDBY_SERVER=host_ip:port_num
SERVER
變數是強制性的,而STANDBY_SERVER
變數是選用的。keyring_okv
外掛程式會嘗試與SERVER
變數命名的主機上執行的伺服器通信,如果該伺服器失敗,則會回復為STANDBY_SERVER
。注意如果現有檔案不是此格式,請建立一個新檔案,其中包含先前範例中顯示的行。此外,在執行 okvutil 命令之前,請考慮備份
okvclient.ora
檔案。根據需要還原檔案。您可以指定多個備用伺服器 (最多 64 個)。如果您這麼做,
keyring_okv
外掛程式會逐一處理這些伺服器,直到可以建立連線為止,如果無法建立連線,則會失敗。若要新增額外的備用伺服器,請編輯okvclient.ora
檔案,以在STANDBY_SERVER
變數的值中指定伺服器的 IP 位址和連接埠號碼 (以逗號分隔的清單)。例如STANDBY_SERVER=host_ip:port_num,host_ip:port_num,host_ip:port_num,host_ip:port_num
確保備用伺服器的清單保持簡短、準確且最新,並刪除不再有效的伺服器。每次連線嘗試都有 20 秒的等待時間,因此存在長串無效的伺服器可能會顯著影響
keyring_okv
外掛程式的連線時間,進而影響伺服器啟動時間。前往 Oracle Key Vault 安裝程式目錄,然後執行此命令來測試設定
okvutil/bin/okvutil list
輸出應如下所示
Unique ID Type Identifier 255AB8DE-C97F-482C-E053-0100007F28B9 Symmetric Key - 264BF6E0-A20E-7C42-E053-0100007FB29C Symmetric Key -
對於新的 Oracle Key Vault 伺服器(其中沒有任何金鑰的伺服器),輸出會改為如下所示,表示保管庫中沒有金鑰
no objects found
使用此命令從
okvclient.jar
檔案中擷取包含 SSL 資料的ssl
目錄jar xf okvclient.jar ssl
將 Oracle Key Vault 支援檔案(
okvclient.ora
檔案和ssl
目錄)複製到配置目錄中。(選用)如果您希望以密碼保護金鑰檔案,請使用密碼保護 keyring_okv 金鑰檔案中的說明。
完成上述程序後,重新啟動 MySQL 伺服器。它會載入 keyring_okv
外掛程式,而 keyring_okv
會使用其配置目錄中的檔案與 Oracle Key Vault 通信。
Gemalto SafeNet KeySecure 設備使用 KMIP 通訊協定(1.1 或 1.2 版)。keyring_okv
金鑰環外掛程式(支援 KMIP 1.1)可以使用 KeySecure 作為其用於金鑰環儲存的 KMIP 後端。
使用以下程序配置 keyring_okv
和 KeySecure 以協同工作。描述僅總結如何與 KeySecure 互動。有關詳細資訊,請查閱《KeySecure 使用者指南》中名為「新增 KMIP 伺服器」的章節。
建立包含 KeySecure 支援檔案的配置目錄,並確保已將
keyring_okv_conf_dir
系統變數設定為命名該目錄(有關詳細資訊,請參閱通用 keyring_okv 配置)。在配置目錄中,建立一個名為
ssl
的子目錄,用於儲存所需的 SSL 憑證和金鑰檔案。在配置目錄中,建立一個名為
okvclient.ora
的檔案。它應具有以下格式SERVER=host_ip:port_num STANDBY_SERVER=host_ip:port_num
舉例來說,如果 KeySecure 在主機 198.51.100.20 上執行,並監聽埠號 9002,同時也在備用主機 203.0.113.125 上執行,並監聽埠號 8041,則
okvclient.ora
檔案看起來會像這樣SERVER=198.51.100.20:9002 STANDBY_SERVER=203.0.113.125:8041
您可以指定多個備用伺服器 (最多 64 個)。如果您這麼做,
keyring_okv
外掛程式會逐一處理這些伺服器,直到可以建立連線為止,如果無法建立連線,則會失敗。若要新增額外的備用伺服器,請編輯okvclient.ora
檔案,以在STANDBY_SERVER
變數的值中指定伺服器的 IP 位址和連接埠號碼 (以逗號分隔的清單)。例如STANDBY_SERVER=host_ip:port_num,host_ip:port_num,host_ip:port_num,host_ip:port_num
確保備用伺服器的清單保持簡短、準確且最新,並刪除不再有效的伺服器。每次連線嘗試都有 20 秒的等待時間,因此存在長串無效的伺服器可能會顯著影響
keyring_okv
外掛程式的連線時間,進而影響伺服器啟動時間。以具備憑證授權單位存取權限的管理員身分,連線至 KeySecure 管理主控台。
導覽至「安全性」>>「本機 CA」,並建立本機憑證授權單位 (CA)。
前往「信任的 CA 清單」。選取「預設」,然後按一下「內容」。接著選取「編輯信任的憑證授權單位清單」,並加入剛建立的 CA。
下載 CA,並將其儲存至
ssl
目錄中,檔案名稱為CA.pem
。導覽至「安全性」>>「憑證請求」,並建立憑證。然後您可以下載包含憑證 PEM 檔案的壓縮 tar 檔案。
從下載的檔案中解壓縮 PEM 檔案。例如,如果檔案名稱為
csr_w_pk_pkcs8.gz
,請使用此命令解壓縮並解開它tar zxvf csr_w_pk_pkcs8.gz
解壓縮操作會產生兩個檔案:
certificate_request.pem
和private_key_pkcs8.pem
。使用此 openssl 命令解密私密金鑰,並建立名為
key.pem
的檔案openssl pkcs8 -in private_key_pkcs8.pem -out key.pem
將
key.pem
檔案複製到ssl
目錄中。將
certificate_request.pem
中的憑證請求複製到剪貼簿。導覽至「安全性」>>「本機 CA」。選取您先前建立的相同 CA(您下載以建立
CA.pem
檔案的 CA),然後按一下「簽署請求」。從剪貼簿貼上憑證請求,選擇「用戶端」的憑證用途(金鑰環是 KeySecure 的用戶端),然後按一下「簽署請求」。結果會在新的頁面中顯示使用選定 CA 簽署的憑證。將已簽署的憑證複製到剪貼簿,然後將剪貼簿內容儲存為
ssl
目錄中名為cert.pem
的檔案。(選用)如果您希望以密碼保護金鑰檔案,請使用密碼保護 keyring_okv 金鑰檔案中的說明。
完成上述程序後,重新啟動 MySQL 伺服器。它會載入 keyring_okv
外掛程式,而 keyring_okv
會使用其設定目錄中的檔案與 KeySecure 通訊。
Townsend Alliance Key Manager 使用 KMIP 通訊協定。keyring_okv
金鑰環外掛程式可以使用 Alliance Key Manager 作為其金鑰環儲存的 KMIP 後端。如需其他資訊,請參閱適用於 MySQL 的 Alliance Key Manager。
Entrust KeyControl 使用 KMIP 通訊協定。keyring_okv
金鑰環外掛程式可以使用 Entrust KeyControl 作為其金鑰環儲存的 KMIP 後端。如需其他資訊,請參閱Oracle MySQL 和 Entrust KeyControl 與 nShield HSM 整合指南。
您可以選擇性地使用密碼保護金鑰檔案,並提供包含密碼的檔案,以啟用金鑰檔案的解密。若要這麼做,請將位置變更至 ssl
目錄,並執行下列步驟
加密
key.pem
金鑰檔案。例如,使用如下的命令,並在提示時輸入加密密碼$> openssl rsa -des3 -in key.pem -out key.pem.new Enter PEM pass phrase: Verifying - Enter PEM pass phrase:
將加密密碼儲存至
ssl
目錄中名為password.txt
的單行文字檔案中。使用以下命令驗證加密的金鑰檔案是否可以解密。解密後的檔案應顯示在主控台上
$> openssl rsa -in key.pem.new -passin file:password.txt
移除原始
key.pem
檔案,並將key.pem.new
重新命名為key.pem
。變更新
key.pem
檔案和password.txt
檔案的所有權和存取模式,以確保它們與ssl
目錄中的其他檔案具有相同的限制。