數字證書: 由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)的協議. 它通過"握手協議"和"傳輸協議"來解決傳輸安全的問題.
sasl: 是作用在認證層上,是一種身份認證框架,sasl驗證架構決定服務器本身如何存儲客戶端的身份證書以及如何核驗客戶端提供的密碼。
如果客戶端能成功通過驗證,服務器端就能確定用戶的身份, 並借此決定用戶具有怎樣的權限。
sasl的常見具體實現有plain、kerberos等, 就好比slf4j是框架,log4j是具體實現
如果要將Kerberos與SASL一起使用,則將需要另一種間接級別:GSSAPI(最常與Kerberos一起使用,但也可以允許其他機制)。
SSL和SASL區別:
1. SASL用於認證,SSL主要用於對傳輸的數據進行加密
2. SASL允許選擇不同的機制來對客戶端進行身份驗證,如可以選擇使用GSSAPI,Kerberos,NTLM等,而SSL被綁定為基於證書進行身份驗證。
JAAS: 是用於處理身份驗證和授權的通用Java框架