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 金鑰管理員
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 節「金鑰環系統變數」。
此處的討論假設您熟悉 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,並將其以名為
CA.pem
的檔案儲存於ssl
目錄中。導覽至「安全性」>>「憑證要求」,並建立憑證。然後,您可以下載一個包含憑證 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 簽署的憑證。將已簽署的憑證複製到剪貼簿,然後將剪貼簿內容以名為
cert.pem
的檔案儲存在ssl
目錄中。(選用) 如果您想要為金鑰檔案設定密碼保護,請使用為 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
目錄中其他檔案相同的限制。