本檔案介紹Kerberos驗證的基本知識以及解決安全Web裝置(SWA)中Kerberos驗證問題的步驟。
思科建議您瞭解以下主題:
本文件所述內容不限於特定軟體和硬體版本。
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
影象:Kerberos網路流示例
以下是在Kerberized環境中進行身份驗證的基本步驟:
1.客戶端從KDC請求TGT。
2. KDC驗證客戶端電腦使用者憑證,並傳送回加密的TGT和會話金鑰。
3. TGT使用TGS金鑰加密。
4.客戶端儲存TGT並在到期時自動請求新的TGT。
要訪問服務或資源,請執行以下操作:
1.客戶端將TGT與所需資源的SPN一起傳送到TGS。
2. KDC驗證TGT並檢查使用者客戶端電腦訪問許可權。
3. TGS向客戶端傳送服務特定的會話金鑰。
4.客戶端為服務提供會話金鑰以證明訪問,並且服務授予訪問許可權。

1.客戶端請求通過SWA訪問www.google.com。
2. SWA以HTTP 407狀態響應,請求身份驗證。
3.客戶端使用加入域時獲得的TGT向AD伺服器請求HTTP/SWA.domain.com服務的服務票證。
4.AD伺服器驗證客戶端並發出服務票證,如果成功並找到SWA的SPN,則繼續下一步。
5.客戶端將此票證傳送到SWA。
6. SWA對票證進行解密並檢查身份驗證。
7.如果身份驗證成功,SWA將驗證策略。
8.如果允許事務,SWA將向客戶端傳送HTTP 200 OK響應。
SPN唯一標識Kerberos身份驗證中的服務例項。它將服務例項連結到服務帳戶,允許客戶端在沒有帳戶名稱的情況下請求對服務的身份驗證。KDC實施中的每個帳戶(如AD或OpenLDAP)都有一個SPN。雖然SPN嚴格標識服務,但在服務也充當客戶端的場景中,有時會錯誤地使用它來引用客戶端名稱(UPN)。
在Kerberos中,SPN唯一地標識網路中的服務例項。它允許客戶端請求特定服務的身份驗證。SPN將服務例項連結到其帳戶,使Kerberos能夠正確驗證和授權對該服務的訪問請求。
1.建立新使用者帳戶或選擇要使用的現有使用者帳戶。
2.註冊要用於所選使用者帳戶的SPN。
3.確保未註冊重複的SPN。
提示:Kerberos與SWA在負載平衡器或流量管理器/流量整形器之後有何不同?
可以找到實施Kerberos的最佳實踐:
這是一個在Kerberos環境中管理SPN的有用setspn命令的清單。在Windows環境中,這些命令通常從具有管理許可權的命令列介面運行。
| 列出特定帳戶的SPN: |
列出為指定帳戶註冊的所有SPN。 |
| 向帳戶新增SPN: |
將指定的SPN新增到給定帳戶。 |
| 從帳戶中刪除SPN: |
從給定帳戶中刪除指定的SPN。 |
| 驗證SPN是否已註冊: |
檢查指定的SPN是否已在域中註冊。 |
| 列出域中的所有SPN |
列出域中的所有SPN。 |
| 為電腦帳戶設定SPN: |
向電腦帳戶新增SPN,確保沒有重複的條目。 |
| 重置特定帳戶的SPN: |
重置指定帳戶的SPN,有助於解決重複的SPN問題。 |
提供的示例演示了以下用途:
檢查SPN是否已與使用者帳戶關聯:
setspn -q
setspn -q http/proxyha.localdomain


setspn -s
舉例來說:
setspn -s http/proxyha.localdomain vrrpserviceuser

setspn -d
舉例來說:
setspn -d http/proxyha.localdomain pod1234-wsa0

確保HA虛擬主機名沒有重複的SPN,因為以後可能會發生故障。
setspn –x
因此,未向客戶端提供Kerberos服務票證,並且Kerberos身份驗證失敗。

注意:如果找到重複項,請刪除運行setspn -d命令的重複項。
setspn –l
舉例來說:
setspn –l vrrpserviceuser

疑難排解Kerberos驗證問題時,思科支援所需的資訊:
server IP address = %k, Client IP address= %a, Auth-Mech = %m, Auth_Type= %m, Auth_group= %g, Authenticated_Username= %A, Date= %L, Transaction_ID= %I Auth response = %:a;

一個常見的錯誤情況是Web請求失敗,出現「Server not found in Kerberos database」:
curl -vx proxyha.local:3128 --proxy-negotiate -u: http://www.cisco.com/
* About to connect() to proxy proxyha.localdomain port 3128 (#0)
* Connected to proxyha.local (10.8.96.30) port 3128 (#0)
< HTTP/1.1 407 Proxy Authentication Required
< Via: 1.1 pod1234-wsa02.local:80 (Cisco-SWA/10.1.2-003)
< Content-Type: text/html
gss_init_sec_context() failed: : Server not found in Kerberos database
< Proxy-Authenticate: Negotiate
< Connection: close
* HTTP/1.1 proxy connection set close!
在這種情況下,錯誤表示與代理地址值proxyha.local對應的服務主體名稱未在Active Directory伺服器上註冊。要解決此問題,需要確認SPN http/proxyha.local已在AD DC上註冊並新增到正確的服務帳戶。
| 修訂 | 發佈日期 | 意見 |
|---|---|---|
3.0 |
22-Oct-2026
|
已更新拼寫、語法、間距、插入水平線以分隔各個部分,以實現可讀性、固定URL。 |
2.0 |
01-Apr-2025
|
新增了一個替代文字、固定格式和標點符號、語法。 |
1.0 |
24-Mar-2025
|
初始版本 |