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