屬性加密可保護目錄中所儲存之機密資料的安全性。屬性加密可讓您指定項目的某些屬性必須以加密格式儲存。如此可防止儲存在資料庫檔案、備份檔案與匯出的 LDIF 檔案中的資料遭讀取。
使用此功能時,屬性值在儲存至目錄伺服器資料庫之前會先進行加密,並在傳回至用戶端之前解密回原始值。您必須使用存取控制以防止用戶端在無權限的情況下存取此類屬性,並在屬性值傳輸於用戶端與目錄伺服器之間時,使用 SSL 為屬性值加密。如需資料安全性的一般架構性簡介與屬性加密的特定架構性簡介,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 Reference」。
必須在伺服器上配置 SSL 並加以啟用,屬性加密方可運作。但依預設所有屬性皆不會加密。屬性加密配置於尾碼層級,這表示屬性會在尾碼中含有該屬性的每個項目中加密。若要為整個目錄中的某一屬性加密,您必須在每個尾碼中啟用該屬性的加密。
屬性加密會影響所有與尾碼相關的資料及索引檔案。若要修改現有尾碼的加密配置,您必須先匯出其內容,並在變更配置後重新匯入內容。DSCC 可協助您執行這些步驟。如需有關使用 DSCC 的更多資訊,請參閱目錄服務控制中心介面。
為進一步確保安全性,只要您開啟屬性加密,即應手動刪除仍可能含有未加密值的資料庫快取檔案與資料庫記錄檔。如需刪除這些檔案的程序,請參閱配置屬性加密。
您應在載入或建立新尾碼中的資料之前啟用加密屬性。
若您選擇加密被某些項目做為命名屬性的屬性,DN 中所出現的值將不會加密。儲存於項目中的值將會加密。
雖然您在配置加密時可以選取 userPassword 屬性,但除非遇到密碼必須以純文字格式儲存的情況,否則安全性並不會因此有任何提昇。DIGEST-MD5 SASL 認證也是如此。若密碼已在其密碼策略中定義了加密機制,則進一步的加密所增添的安全性將極其有限,且反而會影響每個連結作業的效能。
在儲存時,加密屬性的開頭會加上密碼標記,表示其使用了加密演算法。使用 DES 加密演算法的加密屬性將如下所示:
{CKM_DES_CBC}3hakc&jla+=snda% |
當您從線上匯入資料而在檢視時為資料加密後,您即已提供對伺服器進行認證的金鑰資料庫密碼,往後將不會再出現此提示。若您進行離線資料匯入,目錄伺服器則會先提示您提供密碼,始允許您為匯入的資料加密。為資料解密時 (此作業需要更高的安全性),無論此匯出作業是線上或是離線,目錄伺服器都會自動提示您提供金鑰資料庫密碼。如此將可進一步確保安全性。
只要憑證或私密金鑰未變更,伺服器就會繼續產生相同的金鑰。因此,只要兩個伺服器實例使用相同的憑證,資料即可從一個伺服器實例傳輸 (匯出並匯入) 至另一個實例。
屬性加密雖然可提昇資料安全性,但也會影響系統效能。請仔細評估哪些屬性需要加密,而僅就您認為特別機密的屬性進行加密。
由於機密資料可透過索引檔案直接存取,因此對應於加密屬性的索引鍵必須進行加密,使屬性受到完整的保護。在索引已對目錄伺服器效能造成影響 (尚未納入索引鍵加密所造成的影響) 的情況下,請在首次將資料匯入或增加到資料庫之前,先配置屬性加密。此程序可確保加密屬性的索引具有先佔性。
實作屬性加密功能時,請考量下列事項:
一般而言,在修改屬性加密配置時,最理想的做法是先匯出資料,再進行配置變更,然後匯入新配置的資料。
如此可確保所有配置變更均能保有其完整性,而不會有功能上的缺失。否則,某些功能可能會有所缺失,而破壞資料的安全性。
在現有的資料庫上修改屬性加密配置,可能會對系統效能造成嚴重的影響。
例如,假設您有一個含有現行資料的資料庫實例。此資料庫含有先前所儲存之具有 mySensitiveAttribute 屬性的項目。此屬性的值以純文字格式儲存於資料庫與索引檔案中。若您日後決定為 mySensitiveAttribute 屬性加密,則資料庫實例中所有的資料皆必須先匯出再重新匯入資料庫,以確保伺服器能夠使用屬性加密配置,更新資料庫與索引檔案。若能一開始就為屬性加密,即可避免此時所造成的效能影響。
以解密格式匯出資料時若使用了錯誤的密碼,匯出即會遭到拒絕。
若使用者要以解密格式匯出資料,伺服器將依其安全機制提示使用者提供密碼。若使用者所提供的密碼不正確,伺服器即會拒絕解密匯出作業。您可以直接輸入密碼,或提供密碼所在檔案的路徑。請注意,此檔案具有與 SSL 密碼檔案相同的語法。請參閱配置憑證資料庫密碼。
演算法可進行變更,但若變更過程有誤,結果中的索引功能即可能有所缺失。
若要變更用以加密資料的演算法,請匯出資料、修改屬性加密配置,再匯入資料。若未遵循此程序,依據初始加密演算法所建立的索引將會無法運作。
因為加密屬性的開頭會加上密碼標記以表示其已使用加密演算法,所以匯入資料的動作將由內部伺服器作業負責。因此,目錄伺服器可讓您在變更演算法之前以加密格式匯出資料。
變更伺服器的 SSL 憑證會使您無法將加密的資料解密。
屬性加密功能會使用伺服器的 SSL 憑證產生本身的金鑰,用以執行後續的加密與解密作業。因此,對加密的資料進行解密時,SSL 憑證是不可或缺的項目。若未先將資料解密即變更憑證,即無法進行資料解密。為避免陷入此窘境,請先以解密格式匯出資料,然後在變更憑證後重新匯入資料。
若要以加密格式傳輸資料,亦即在兩個伺服器實例間匯出及匯入資料,則兩個伺服器實例皆必須使用相同的憑證。
如需相關資訊,請參閱「Sun Java System Directory Server Enterprise Edition 6.2 管理指南」中的「Encrypting Attribute Values」。
您可以使用 DSCC 執行此作業。如需相關資訊,請參閱目錄服務控制中心介面與 DSCC 線上說明。
如果要配置屬性加密的尾碼中含有任何項目,即須先將該尾碼的內容匯出至 LDIF 檔案。
若尾碼中含有加密屬性,而您想要使用匯出的 LDIF 檔案重新初始化尾碼,可以讓屬性以匯出的 LDIF 保持加密形式。
若要啟用屬性加密,請使用此指令:
$ dsconf create-encrypted-attr -h host -p port suffix-DN attr-name cipher-name |
其中 cipher-name 為下列其中一項:
des - DES 區塊密碼
des3 - Triple-DES 區塊密碼
rc2 - RC2 區塊密碼
rc4 - RC4 串流密碼
例如:
$ dsconf create-encrypted-attr -h host1 -p 1389 dc=example,dc=com uid rc4 |
若要將加密屬性回復為其原始狀態,請使用此指令:
$ dsconf delete-encrypted-attr -h host -p port suffix-DN attr-name |
若您變更了配置而為一或多個屬性加密,且這些屬性在匯入作業之前即有值,請清除資料庫快取並移除記錄。
在資料庫快取與資料庫記錄中,不會顯示任何未加密的值。
若是刪除這些檔案,則會遺失某些追蹤資訊。此外,當您刪除這些檔案後,伺服器將處於回復模式,而需要很長的時間才能重新啟動。
若要清除資料庫快取及移除記錄,請執行以下作業:
停止目錄伺服器,如啟動、停止與重新啟動目錄伺服器實例中所述。
以超級使用者或具有管理員權限的使用者身份,從檔案系統中刪除資料庫快取檔案。
# rm instance-path/db/__db.* |
從檔案系統中刪除資料庫記錄檔。
# rm instance-path/db/log.0000000001 |
重新啟動目錄伺服器。
伺服器會自動建立新的資料庫快取檔案。在重新填入快取前,此尾碼中的作業效能可能會略受影響。
以 LDIF 檔案初始化尾碼,如初始化尾碼中所述。
載入檔案且建立對應的索引時,指定屬性的所有值均將加密。