Chapter 1 Securing Your Server and Network(9):使用Kerberos用於身分識別驗證,securingkerberos

來源:互聯網
上載者:User

Chapter 1 Securing Your Server and Network(9):使用Kerberos用於身分識別驗證,securingkerberos
原文出處:http://blog.csdn.net/dba_huangzj/article/details/38332605,專題目錄:http://blog.csdn.net/dba_huangzj/article/details/37906349

未經作者同意,任何人不得以“原創”形式發布,也不得已用於商業用途,本人不負責任何法律責任。

        前一篇:http://blog.csdn.net/dba_huangzj/article/details/38263043

 

前言:

 

在活動目錄(Active Directory)中,有兩種身分識別驗證機制:NTLM和Kerberos。其中NTLM(NT LAN Manager)是基於舊版加密方式的授權協議,微軟不建議再使用。詳情可見:http://msdn.microsoft.com/en-us/library/cc236715.aspx

Kerberos是一個免費的軟體協議,有MIT(麻省理工)首先開發出來,並從Windows 2000開始引入。通過secured tickets(暫時未發現專業術語)的轉換對用戶端和伺服器進行安全識別。相對於使用雜湊密碼,Kerberos通過共用安全加密金鑰來管理身分識別驗證。用戶端和驗證伺服器共用一個對稱金鑰,。其中驗證伺服器成為KDC(Key Distributor Center,密鑰分發中心),並且作為網域控制站的服務運行。

在登入時,用戶端會從KDC中請求一個Ticket Grant Ticket (TGT) ,然後KDC建立一個包含用戶端標識的TGT,並連同把帶有密鑰的會話返回給用戶端。TGT的壽命不長,通常只有8~10小時。過時之後,用戶端不能在訪問資源。

服務標籤(Service ticket)必須包含目標資源(如SQL Server執行個體)的Service Principal Name(SPN,服務主體名稱)。當KDC接收到請求,會回送服務標籤。這個標籤會在後續用於用戶端請求訪問伺服器之用。更多資訊可以訪問:http://technet.microsoft.com/en-us/library/cc772815.aspx

 

實現:

 

使用Kerberos,需要在域環境中,並且伺服器的SPN必須已經註冊到Active Directory。如果滿足這些條件,那麼Kerberos應該預設已經使用,可以在SQL Server中檢查:

SELECT auth_scheme, net_transport, client_net_address FROM sys.dm_exec_connections;


如果串連是來自同一個域或者使用NTLM授權的可信任域,需要研究為什麼沒有使用Kerberos。當SQL Server啟動時,會嘗試自動註冊自己的SPN到Active Directory中,如果SQL Server服務帳號沒有許可權,那麼SPN就不能建立,並且Kerberos授權也將不能使用。

檢查SPN是否已經註冊,可以在cmd或者PowerShell中輸入下面的命令:

setspn.exe -L DOMAIN\<SQL service Account>


本人環境下

應該要看到其中一個資訊:

MSSQLSvc/SQL-A.Contoso.com:1433  --格式為:MSSQLSvc/<SQL Server機器名>.<網域名稱>.com:<連接埠號碼>

檢查可見沒有這個資訊,證明沒有成功,所以再上一個圖的結果周鞥只有NTLM授權。通常是因為這個帳號沒有"write public information"  許可權。預設情況下,SQL Server服務帳號如果是一個域使用者安裝的,將沒有這個許可權。

現在把SQL Server服務帳號換成網域系統管理員,再次檢查可見已經得到期待結果了:

 

如果發現沒有註冊SPN,可以使用下面步驟實現:

1. 在網域控制站的【管理工具】中,選擇【ADSI 編輯器】:

 

2.串連到【預設命名內容】,尋找服務帳號並且右鍵【屬性】,然後選擇【安全】頁:

 

3. 對SELF授予【寫入 公用 資訊】,並重啟SQL Server服務:

注意,本機是用contoso\mirroradmin安裝和啟動並執行,所以這裡選擇這個帳號授權。授權完畢之後,重新查詢,可以見到已經有Kerberos連進了了。

  原理:

 

SPN是執行個體的唯一標識,沒有合適的SPN,Kerberos不能驗證一個服務並提供服務標籤來允許用戶端訪問。所以如果沒有SPN,用戶端唯一能用的驗證方式是NTLM,而SPN必須安裝在活動目錄,並且有KDC角色。

SPN的固定格式:<service>/<host>:<port/name>。其中host是完全合格網域名稱(Fully Qualified Domain Name  ,FQDN)。


 

更多資訊:

 

如果不想授予【寫入公用資訊】到AD上,或者某些原因SPN不能註冊,可以手動執行下面語句建立:

setspn.exe -A MSSQLSvc/SQL-A.Contoso.com:<port> Contoso\SQL-A  --其中SQL-A是機器名,contoso是網域名稱


 

對於Kerberos問題偵測可以閱讀下面文章:

http://blogs.technet.com/b/askds/archive/2008/05/14/troubleshooting-kerberos-authentication-problems-name-resolution-issues.aspx




相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.