簡介:本文詳細講解如何在 Kerberos 設置(IBM® Network Authentication Service)中啟用 並使用 “aes128-cts” 等非默認加密類型。還解釋執行每個步驟的原因。這些內容有助於 Kerberos 管 理員在 Kerberos 設置中使用任何非默認加密類型。
簡介
IBM Network Authentication Service(NAS)基於 Kerberos Version 5 的標准協議 Internet Engineering Task Force(IETF)Request for Comment(RFC)1510。Kerberos 是一種網絡身份驗證協 議。它的設計目的是,通過使用密鑰加密技術,為客戶端-服務器應用程序提供強大的身份驗證和加密通 信。IBM AIX 上支持 IBM NAS 服務器(KDC)。
Network File System(NFS)version 4 是 NFS 協議的最新版本,它定義新一代網絡文件系統。NFS V4 由 RFC 3530 詳細說明。NFS V4 的一個重要特性是滿足更高的安全標准。在這個協議中,使用 Kerberos、LIPKEY 和 SPKM-3 提供的 GSS-API 框架保護客戶端和服務器之間的交互。
IBM NFS V4 使用 IBM NAS 提供的 Kerberos 實現滿足它的安全需求。IBM NAS 用於身份驗證,也可 以用於 NFS 客戶端和服務器之間的消息加密。
IBM NAS 支持不同的加密類型。不同加密類型之間的差異在於算法的強度和使用的密鑰長度。算法和 密鑰長度的組合產生強加密、中等加密和弱加密。在 IBM NFS V4 之前,IBM AIX® V5.3L 和 6.1 能 夠使用 AES 加密(128 位和 256 位密鑰長度)。
IBM NAS 和 IBM NFS V4 支持的加密類型
IBM NAS 支持 Arcfour、DES、Triple-DES 和 AES 等加密算法。通過組合使用不同的密鑰長度和散列 算法,IBM NAS 提供表 1 所示的加密類型。
表 1. IBM NAS 支持的加密類型
加密類型 說明 配置文件中使用的名稱 ENCTYPE_AES128_CTS_HMAC_SHA1_96 AES-128 CTS 模式,96 位 SHA-1 HMAC "aes128-cts-hmac-sha1-96" / "aes128-cts" ENCTYPE_AES256_CTS_HMAC_SHA1_96 AES-256 CTS 模式,96 位 SHA-1 HMAC "aes256-cts-hmac-sha1-96" / "aes256-cts” ENCTYPE_DES_CBC_CRC DES cbc 模式,CRC-32 "des-cbc-crc" ENCTYPE_DES_CBC_MD4 DES cbc 模式,RSA-MD4 "des-cbc-md4" ENCTYPE_DES_CBC_MD5 DES cbc 模式,RSA-MD5 "des-cbc-md5" ENCTYPE_DES3_CBC_SHA1 Triple DES cbc 模式,HMAC/sha1 "des3-cbc-sha1" ENCTYPE_ARCFOUR_HMAC ArcFour,HMAC/md5 "arcfour-hmac" ENCTYPE_ARCFOUR_HMAC_EXP Exportable ArcFour,HMAC/md5 "arcfour-hmac-exp"IBM NFS V4 支持 表 1 中的一小部分加密類型。支持的加密算法是 DES、Triple-DES 和 AES。通過 組合使用不同的密鑰長度和散列算法,IBM NFS V4 支持以下加密類型:des–cbc–crc、 des–cbc–md4、des–cbc–md5、des3–cbc–sha1、aes128-cts、 aes256-cts。
使用哪種加密類型?
加密算法和密鑰長度的組合決定加密類型的強度。上面列出的加密類型的強度各不相同,其中 “ENCTYPE_AES256_CTS_HMAC_SHA1_96” 是最強的。相關聯的散列算法用來提供完整性服務。 通常情況下,越強的加密類型消耗的時間越多,但是私密性也越高。在訪問與財務相關的數據或需要高特 權的數據時,建議采用最強的加密類型;在訪問不太重要的數據和需要快速使用的數據時,建議使用強度 比較低的加密類型。
管理員/用戶根據所需的私密性水平決定使用哪種加密類型,並相應地配置 Kerberos 域。
默認配置的加密類型
一種簡單的 Kerberos 配置是一個域定義,其中包含 KDC 服務器、kadmind 服務器(可選)和客戶端 。配置信息采用配置文件的形式,即 “kdc.conf” 和 “krb5.conf”。並非所有 加密類型都包含在默認的 Kerberos 配置中。“krb5.conf” 文件和 “kdc.conf” 文件中的默認加密類型是 “des3-cbc-sha1”、“arcfour- hmac”、“aes256-cts”、“des-cbc-md5” 和 “des-cbc- crc”。
非默認加密類型的設置
圖 1 說明非默認加密類型的 Kerberos 域設置。這個設置涉及 Kerberos 服務器、Kerberos 客戶端 、NFS 服務器和 NFS 客戶端。
這裡有一些基本假設:
這個配置中使用的所有機器都是 IBM AIX 機器,使用 AIX 53L 或 AIX 61 或更高版本。
有一台 IBM NAS 服務器(KDC)。在同一台機器上,將運行另一個服務器(kadmind)。為了簡明,圖 中省略了它。
“fsaix.in.ibm.com” 是 NAS 服務器機器。
域中的所有其他機器都是客戶端。甚至 NFS 服務器(客戶端 E)也是一個 Kerberos 客戶端。
如圖所示,每個 Kerberos 客戶端被限制為只使用指定的加密類型。
省略 NFSv4 需要的配置步驟。
圖 1. 使用 IBM NAS 的 Kerberos 設置
在圖 1 中,Kerberos 客戶端需要的加密類型是 “aes256-cts”、“aes128- cts”、“des-cbc-crc” 和 “arcfour-hmac”。使用 IBM NAS 提供的 “config.krb5” 命令配置這個設置。更多信息請查閱 AIX Version 5.3/6.1 Expansion Pack 光盤附帶的 “IBM NAS Version 1.4 Administration Guide”(參見 參考資料)。
下面的步驟和清單說明服務器和客戶端所用的基本配置命令及其輸出。
服務器配置
清單 1. 使用 “config.krb5” 命令配置 Kerberos 服務器
bash-2.05b# hostname
fsaix.in.ibm.com
bash-2.05b# config.krb5 -S -d in.ibm.com -r MYREALM
Initializing configuration...
Creating /etc/krb5/krb5_cfg_type...
Creating /etc/krb5/krb5.conf...
Creating /var/krb5/krb5kdc/kdc.conf...
Creating database files...
Initializing database '/var/krb5/krb5kdc/principal' for realm 'MYREALM'
master key name 'K/M@MYREALM'
You are prompted for the database Master Password.
It is important that you DO NOT FORGET this password.
Enter database Master Password:
Re-enter database Master Password to verify:
WARNING: no policy specified for admin/admin@MYREALM;
defaulting to no policy. Note that policy may be overridden by
ACL restrictions.
Enter password for principal "admin/admin@MYREALM":
Re-enter password for principal "admin/admin@MYREALM":
Principal "admin/admin@MYREALM" created.
Creating keytable...
Creating /var/krb5/krb5kdc/kadm5.acl...
Starting krb5kdc...
krb5kdc was started successfully.
Starting kadmind...
kadmind was started successfully.
The command completed successfully.
下面是默認的配置文件。
清單 2. Kerberos 服務器上的 kdc.conf 文件
bash-2.05b# cat /var/krb5/krb5kdc/kdc.conf
[kdcdefaults]
kdc_ports = 88
[realms]
MYREALM = {
database_name = /var/krb5/krb5kdc/principal
admin_keytab = /var/krb5/krb5kdc/kadm5.keytab
acl_file = /var/krb5/krb5kdc/kadm5.acl
dict_file = /var/krb5/krb5kdc/kadm5.dict
key_stash_file = /var/krb5/krb5kdc/.k5.MYREALM
kadmind_port = 749
kdc_ports = 88
max_life = 24h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = des3-cbc-sha1
supported_enctypes = des3-cbc-sha1:normal arcfour-hmac:normal
aes256-cts:normal des-cbc-md5:normal des-cbc-crc:normal
}
清單 3. Kerberos 服務器上的 krb5.conf 文件
bash-2.05b# cat /etc/krb5/krb5.conf
[libdefaults]
default_realm = MYREALM
default_keytab_name = FILE:/etc/krb5/krb5.keytab
default_tkt_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5 des-cbc-crc
default_tgs_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts des-cbc-md5 des-cbc-crc
[realms]
MYREALM = {
kdc = fsaix.in.ibm.com:88
admin_server = fsaix.in.ibm.com:749
default_domain = in.ibm.com
}
[domain_realm]
.in.ibm.com = MYREALM
fsaix.in.ibm.com = MYREALM
[logging]
kdc = FILE:/var/krb5/log/krb5kdc.log
admin_server = FILE:/var/krb5/log/kadmin.log
default = FILE:/var/krb5/log/krb5lib.log
客戶端配置
清單 4. 使用 “config.krb5” 命令配置 Kerberos 客戶端
bash-2.05# config.krb5 -C -r MYREALM -d in.ibm.com \
-c fsaix.in.ibm.com -s fsaix.in.ibm.com
Initializing configuration...
Creating /etc/krb5/krb5_cfg_type...
Creating /etc/krb5/krb5.conf...
The command completed successfully.
清單 5 給出 Kerberos 客戶端上的配置文件。
清單 5. Kerberos 客戶端上的 krb5.conf 文件
bash-2.05# cat /etc/krb5/krb5.conf
[libdefaults]
default_realm = MYREALM
default_keytab_name = FILE:/etc/krb5/krb5.keytab
default_tkt_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts
des-cbc-md5 des-cbc-crc
default_tgs_enctypes = des3-cbc-sha1 arcfour-hmac aes256-cts
des-cbc-md5 des-cbc-crc
[realms]
MYREALM = {
kdc = fsaix.in.ibm.com:88
admin_server = fsaix.in.ibm.com:749
default_domain = in.ibm.com
}
[domain_realm]
.in.ibm.com = MYREALM
fsaix.in.ibm.com = MYREALM
[logging]
kdc = FILE:/var/krb5/log/krb5kdc.log
admin_server = FILE:/var/krb5/log/kadmin.log
default = FILE:/var/krb5/log/krb5lib.log
在所有機器(圖 1 中的 A、B、C、D 和 E)上配置 Kerberos 客戶端之後,所有機器上都有相同的 “krb5.conf” 文件。“krb5.conf” 文件中的 “default_tkt_enctypes” 和 “default_tgs_enctypes” 關系決定客戶端使用 的加密類型。很明顯,所有客戶端上的配置都與設置不一樣。下一節說明所有客戶端上需要的修改。
Kerberos 客戶端上的配置修改
一般情況下,必須修改 /etc/krb5/krb5.conf 文件來反映所需的加密類型。default_tkt_enctypes 和 default_tgs_enctypes 關系會反映出修改。這些關系分別控制獲取 TGT(Ticket Granting Ticket) 和 TGS(Ticket Granting Service)所用的加密類型。在 圖 1 中,客戶端 A、B、C 和 D 使用一種加 密類型,而客戶端 E 使用兩種加密類型。
現在,所有這些客戶端都需要修改 krb5.conf 文件。下面的清單給出幾個修改後的配置文件。
清單 6. 修改後的客戶端 A krb5.conf 文件
bash-2.05# cat /etc/krb5/krb5.conf
…
…
default_tkt_enctypes = arcfour-hmac
default_tgs_enctypes = arcfour-hmac
…
…
清單 7. 修改後的客戶端 C krb5.conf 文件
bash-2.05# cat /etc/krb5/krb5.conf
…
…
default_tkt_enctypes = aes128-cts
default_tgs_enctypes = aes128-cts
…
…
清單 8. 修改後的客戶端 E krb5.conf 文件
bash-2.05# cat /etc/krb5/krb5.conf
…
…
default_tkt_enctypes = des-cbc-crc aes128-cts
default_tgs_enctypes = des-cbc-crc aes128-cts
…
…
除了客戶端 C 和 E 之外,其他所有客戶端都可以與 Kerberos 服務器通信,不需要任何修改。
當客戶端 C 嘗試獲取一個 Kerberos 票證(TGT)時,會發生以下錯誤:
清單 9. 在客戶端 C 上獲取加密類型為 “aes128-cts” 的 TGT 時發生的錯誤
-bash-2.05b# kinit admin/admin
Unable to obtain initial credentials.
Status 0x96c73a0e - KDC has no support for encryption type.
顯然,這說明需要在服務器端(KDC)做一些修改。下一節解釋這些修改。
Kerberos 服務器上的配置修改
編輯 kdc.conf 文件
在創建主體(principal)時,KDC 使用 kdc.conf 文件中指定的加密類型。因此,如果一個主體需要 支持非默認加密類型 “aes128-cts”,就需要在 kdc.conf 文件中設置這個加密類型。
編輯 kdc.conf 文件,反映所有客戶端和相關主體所需的加密類型。修改這個文件中的 “supported_enctypes” 部分。
清單 10. 修改 Kerberos 服務器上的 kdc.conf 文件
bash-2.05b# hostname
fsaix.in.ibm.com
bash-2.05b# cat /var/krb5/krb5kdc/kdc.conf
…
…
supported_enctypes = arcfour- hmac:normal aes256-cts:normal
des-cbc-crc:normal aes128-cts:normal
}
重新啟動 Kerberos 服務器(KDC 和 Kadmind)
在修改 kdc.conf 文件之後,必須重新啟動 Kerberos 服務器。服務器在啟動時讀取 kdc.conf 文件 ,因此必須重新啟動服務器,kdc.conf 文件中的修改才會生效。
清單 11. 重新啟動 IBM NAS 服務器
-bash-2.05b# stop.krb5; start.krb5
Stopping /usr/krb5/sbin/krb5kdc...
/usr/krb5/sbin/krb5kdc was stopped successfully.
Stopping /usr/krb5/sbin/kadmind...
The command completed successfully.
Starting krb5kdc...
krb5kdc was started successfully.
Starting kadmind...
kadmind was started successfully.
The command completed successfully.
重新創建服務主體 “krbtgt/<realm_name>”
如果對應的服務實體支持客戶端所請求的加密類型(由 krb5.conf 文件控制),那麼 KDC 就會發出 這種加密類型的票證(TGT 和 TGS)。
如前一節所示,來自客戶端 C 的 TGT 請求被拒絕了,因為 KDC 不支持這種加密類型。即使在修改 kdc.conf 文件之後,這個錯誤仍然會出現。這是因為票證授予服務 “krbtgt/MYREALM” 在 默認情況下沒有用於 aes128-cts 加密類型的密鑰。看一下以下信息:
清單 12. 主體 “krbtgt/MYREALM” 的信息
bash-2.05b# kadmin.local
kadmin.local: getprinc krbtgt/MYREALM
Principal: krbtgt/MYREALM@MYREALM
Expiration date: [never]
Last password change: [never]
Password expiration date: [none]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: Tue Apr 22 10:51:04 CDT 2008 (db_creation@MYREALM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 5
Key: vno 1, Triple DES cbc mode with HMAC/sha1,
no salt
Key: vno 1, ArcFour with HMAC/md5,
no salt
Key: vno 1, AES-256 CTS mode with 96-bit SHA-1 HMAC,
no salt
Key: vno 1, DES cbc mode with RSA-MD5,
no salt
Key: vno 1, DES cbc mode with CRC-32,
no salt
Attributes:
REQUIRES_PRE_AUTH
Policy: [none]
解決這個問題的方法是把加密類型 “aes128-cts” 的密鑰與主體 “krbtgt/MYREALM” 關聯起來。這需要刪除主體 “krbtgt/MYREALM” 並重新創 建它。
因為 kdc.conf 文件中有 “aes128-cts:normal” 加密類型的條目,所以在重新創建主體 “krbtgt/MYREALM” 時,也會創建這種加密類型的密鑰。
清單 13. 重新創建主體 “krbtgt/MYREALM”
kadmin.local: delprinc krbtgt/MYREALM
Are you sure you want to delete the principal "krbtgt/MYREALM@MYREALM"? (yes/no): y
Principal "krbtgt/MYREALM@MYREALM" deleted.
Make sure that you have removed this principal from all ACLs before reusing.
kadmin.local: addprinc -randkey +requires_preauth krbtgt/MYREALM
WARNING: no policy specified for krbtgt/MYREALM@MYREALM;
defaulting to no policy. Note that policy may be overridden by
ACL restrictions.
Principal "krbtgt/MYREALM@MYREALM" created.
kadmin.local: getprinc krbtgt/MYREALM
Principal: krbtgt/MYREALM@MYREALM
Expiration date: [never]
Last password change: Tue Apr 22 10:52:46 CDT 2008
Password expiration date: [none]
Maximum ticket life: 1 day 00:00:00
Maximum renewable life: 7 days 00:00:00
Last modified: Tue Apr 22 10:52:46 CDT 2008 (root/admin@MYREALM)
Last successful authentication: [never]
Last failed authentication: [never]
Failed password attempts: 0
Number of keys: 4
Key: vno 2, ArcFour with HMAC/md5,
no salt
Key: vno 2, AES-256 CTS mode with 96-bit SHA-1 HMAC,
no salt
Key: vno 2, DES cbc mode with RSA-MD5,
no salt
Key: vno 2, AES-128 CTS mode with 96-bit SHA-1 HMAC,
no salt
Attributes:
REQUIRES_PRE_AUTH
Policy: [none]
現在,Kerberos 設置(IBM NAS 設置)已經可以使用了(見 圖 1)。從現在開始,管理員可以執行 NFS 服務器和 NFS 客戶端設置所需的步驟。
注意,建議只在服務器停機維護期間執行這些步驟。
結束語
本文詳細描述了 IBM NAS 和 IBM NFS V4 支持的不同加密類型,強調了這些加密類型的重要性,給出 了使用建議。還提供了詳細的示例,從而指導 IBM NAS 管理員為 IBM Network Authentication Service 啟用非默認加密類型。