数字证书、ssl、sasl(GSSAPI,Kerberos)、jaas简单解释
GSS-API 與Kerberos 的關系
Kerberos 是GSS-API 的實現,當然也有其他的實現如NTLm,dce之類的,如下圖所適:
?-----------------------------------
???????? 應用程序(APP)
-----------------------------------
??????? RPC(可選)
------------------------------------
???????? ?GSS API
------------------------------------
????? ?PROVIDER(提供商實現api)
------------------------------------
?????? kerberos / ntlm / dce
-------------------------------------
?
?
# JAAS/GSS-API/SASL/Kerberos簡介
如果將Kerberos引入到一個分布式系統中提供身份認證與服務授權時,還涉及到一系列與安全有關的框架技術與接口協議,包括:如何對認證的對象或訪問的資源進行抽象?應用通過什么樣的接口進行Kerberos認證?如何保障跨節點通信時的安全傳輸?Java Security中均提供了現成的實現。
JAAS
JAAS是Java Authentication and Authorization Service的縮寫,提供了認證與授權相關的服務框架與接口定義:
- 認證:認證主要是驗證一個用戶的身份。
- 授權:授權用戶訪問或操作某些敏感的資源。
前一篇文章<Java認證與授權服務JAAS基礎概念>已經做了詳細的介紹。
2. GSS-API
Java GSS-API是 Generic Security Services Application Program Interface的縮寫,主要應用于跨應用程序之間的安全信息交換(secure message exchanges),?RFC 2853提供了詳細的接口協議定義。應用程序可以通過GSS-API訪問Kerberos服務。
JAAS的認證請求,通常先于GSS-API的調用。也就是說,先通過JAAS的接口完成登錄認證,而后通過GSS-API來確保后面交換信息的安全性。兩者經常被聯合一起使用,但也可以單獨使用,例如,基于JAAS也可以完成一些簡單的認證與授權,一些別的場景下,也可以只使用GSS-API而不使用JAAS。
2.1 使用 GSS-API 的應用程序的可移植性
GSS-API 為應用程序提供了以下幾種類型的可移植性:
-
機制無關性。GSS-API 提供了一個用于實現安全性的通用接口。通過指定缺省的安全機制,應用程序無需了解要應用的機制以及該機制的任何詳細信息。
-
協議無關性。GSS-API 與任何通信協議或協議套件均無關。例如,GSS-API 可用于使用套接字、RCP 或 TCP/IP 的應用程序。
RPCSEC_GSS 是用于將 GSS-API 與 RPC 順利集成的附加層。有關更多信息,請參見使用 GSS-API 的遠程過程調用。
-
平臺無關性。GSS-API 與運行應用程序的操作系統的類型無關。
-
保護質量無關性。保護質量 (Quality of Protection, QOP) 是指一種算法類型,用于加密數據或生成加密標記。通過 GSS-API,程序員可使用 GSS-API 所提供的缺省設置忽略 QOP。另一方面,應用程序可以根據需要指定 QOP。
2.2 GSS-API 中的安全服務
GSS-API 提供了三種類型的安全服務:
-
驗證-驗證是 GSS-API 提供的基本安全性。驗證是指對身份進行驗證。如果用戶通過了驗證,則系統會假設其有權以該用戶名進行操作。
-
完整性-完整性是指對數據的有效性進行驗證。即使數據來自有效用戶,數據本身也可能會損壞或遭到破壞。完整性可確保消息與預期的一樣完整(未增減任何內容)。GSS-API 提供的數據附帶有一個名為消息完整性代碼 (Message Integrity Code, MIC) 的加密標記。MIC 可用于證明收到的數據與發送者所傳送的數據是否相同。
-
保密性-保密性可確保攔截了消息的第三方難以閱讀消息內容。驗證和完整性機制都不會修改數據。如果數據由于某種原因而被攔截,則其他人可以閱讀該數據。因此,可通過 GSS-API 對數據進行加密,前提是提供了支持加密的基礎機制。這種數據加密稱為保密性。
SASL
SASL是_Simple Authentication and Security Layer_的縮寫,主要應用于跨節點通信時的認證與數據加密,如Client與Server基于RPC進行通信時,可以基于SASL來提供身份認證以及數據加密能力。
當SASL中使用Kerberos服務時,也需要使用到GSS-API來與Kerberos之間進行安全信息交換。
Kerberos
回憶一下之前一篇文章<圖解Kerberos協議原理>中講到的Kerberos認證與授權的幾個關鍵步驟:
第1步,在Client端完成對密碼信息的單向加密。
第2步,基于JAAS進行認證。
第3,4步,則基于GSS-API進行交互。
第4,5步建立連接與發送服務請求的過程,則通?;?strong>SASL框架。
總結
本文主要介紹了在一個分布式系統中引入Kerberos認證時所涉及到的框架技術,簡要總結如下:
- JAAS?認證與授權服務框架與接口定義
- GSS-API 跨應用程序之間的安全信息交換,如Kerberos授權時Client與TGS/SS之間的信息交換。
- SASL 主要應用于跨節點通信時的認證與數據加密。
===================================================================================================
?
數字證書: 由CA(大家都信賴的第三方機構)派發,內容包括:
? ? ? ?(1).Common Name(證書所有人姓名,簡稱CN,其實就是證書的名字)
(2).Version(版本,現在一般是V3了)
(3).Issuer(發證機關)
(4).Validity(有效日期)
(5).Subject(證書信息,你會發現它和Issuer里面的內容是一樣的)
(6).Subject's Public Key Info(證書所有人的公鑰)
(7).Extension(擴展信息)
(8).Certificate Signature Algorithm(公鑰加密算法)
? ? ? ?(9).證書的數字簽名(生成步驟是: 先將證書內容hash,再對hash結果用CA的私鑰和證書中的加密算法加密,得到的就是數字簽名)
?
驗證證書是否為真的方法(這個驗證是為了保證證書的內容真的是CA所寫,而不是偽造的,比如說證書的內容上寫了允許xx使用xx公司的xx功能):
將證書里的數字簽名使用CA的公鑰解密得到A,同時對證書內容進行hash得到B,比對A和B是否一致,如果一致,則認為證書是CA頒發的,即真的,
所以說數字簽名的作用是用來驗證證書是否為真(證書為真即代表里面的內容都是真的,包括證書所有人公鑰等)
?
驗證證書持有人是否為本人的方法(為了避免真的證書被人盜用,所以也需要這個驗證):
驗證方使用證書中的公鑰加密一段信息發給 證書持有人,如果證書持有人是本人,那他肯定有證書中公鑰對應的私鑰,那他就肯定能解密這段信息,
只要把解密的信息再發給驗證方,即可證明自己是本人,反之,則認為不是本人
?
通過以上2個驗證,即可以保證發過來的證書是真的,并且持有人也是本人,
? ? ? ? ? ? ??
-------------------------------------------------------------------------
?
ssl: 是一種間于傳輸層(比如TCP/IP)和應用層(比如HTTP)的協議. 它通過"握手協議"和"傳輸協議"來解決傳輸安全的問題.
SSL的基本思想是用非對稱加密來建立鏈接(握手階段),用對稱加密來傳輸數據(傳輸階段)。這樣既保證了密鑰分發的安全,也保證了通信的效率(因為非對稱加密更耗時)。
?
?
sasl: 是作用在認證層上,是一種身份認證框架,sasl驗證架構決定服務器本身如何存儲客戶端的身份證書以及如何核驗客戶端提供的密碼。
? ? ? ?如果客戶端能成功通過驗證,服務器端就能確定用戶的身份, 并借此決定用戶具有怎樣的權限。
? ? ? ? sasl的常見具體實現有plain、kerberos等, 就好比slf4j是框架,log4j是具體實現
? ? ? ? 如果要將Kerberos與SASL一起使用,則將需要另一種間接級別:GSSAPI(最常與Kerberos一起使用,但也可以允許其他機制)。
?
SSL和SASL區別:
? ? 1. SASL用于認證,SSL主要用于對傳輸的數據進行加密
? ? 2. SASL允許選擇不同的機制來對客戶端進行身份驗證,如可以選擇使用GSSAPI,Kerberos,NTLM等,而SSL被綁定為基于證書進行身份驗證。?
?
JAAS: 是用于處理身份驗證和授權的通用Java框架
總結
以上是生活随笔為你收集整理的数字证书、ssl、sasl(GSSAPI,Kerberos)、jaas简单解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV里IplImage的widt
- 下一篇: 性能与优化的文章