欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springboot中基于X509完成SSL檢驗的原理與實現(xiàn)

 更新時間:2024年09月18日 15:07:40   作者:一葉飛舟  
本文詳細(xì)解析了HTTPS通信中SSL證書的作用和原理,SSL證書建立在客戶端和服務(wù)器之間的安全通道,確保數(shù)據(jù)傳輸?shù)耐暾院捅C苄?詳細(xì)的介紹了Springboot中基于X509完成SSL檢驗的原理與實現(xiàn),感興趣的可以了解一下

前言

各位對HTTPS不陌生吧?幾乎涉及安全的領(lǐng)域,均要求通過HTTPS協(xié)議進(jìn)行數(shù)據(jù)傳輸。而在傳輸過程中,又涉及到了SSL證書的使用。既然提到了SSL證書,那咱們先了解了解什么是SSL證書

SSL證書通過在客戶端瀏覽器和Web服務(wù)器之間建立一條SSL安全通道(Secure socket layerSSL,安全套接層)安全協(xié)議是由Netscape Communication公司設(shè)計開發(fā)。該安全協(xié)議主要用來提供對用戶和服務(wù)器的認(rèn)證;對傳送的數(shù)據(jù)進(jìn)行加密和隱藏;確保數(shù)據(jù)在傳送中不被改變,即數(shù)據(jù)的完整性,現(xiàn)已成為該領(lǐng)域中全球化的標(biāo)準(zhǔn)。——百度百科

簡單講,是一個連接客戶與服務(wù)之間的“安全通道”。通過它,我們可以確保數(shù)據(jù)的完整性、保密性,實現(xiàn)防泄露,防篡改等安全目的。

一、SSL原理

因為SSL證書可以滿足絕大多數(shù)場景的數(shù)據(jù)傳輸安全,所以越來越多的數(shù)據(jù)廠商或者云服務(wù)商皆提供了免費(fèi)的SSL證書服務(wù)。當(dāng)然也有收費(fèi)的(推薦),畢竟數(shù)據(jù)安全永遠(yuǎn)是第一位的,“不怕一萬,只怕萬一”。

1. 底層交互圖

在這里插入圖片描述

2. 重要術(shù)語

術(shù)語作用
CA(Certificate Authority,證書授權(quán))一般理解為證書的服務(wù)機(jī)構(gòu)。 負(fù)責(zé)證書簽發(fā)、審核等。
Server使用證書的服務(wù)方
Client使用證書的客戶方

一句話總結(jié)CAServer簽發(fā)一個有效的證書,當(dāng)Client請求Server時,先會收到一個證書,Client基于此證書完成核驗并協(xié)商下一步數(shù)據(jù)的傳輸。

二、SSL驗證基礎(chǔ)

1. X.509簡介

X.509 是密碼學(xué)里公鑰證書的格式標(biāo)準(zhǔn)。 X.509 證書己應(yīng)用在包括TLS/SSL(WWW萬維網(wǎng)安全瀏覽的基石)在內(nèi)的眾多 Internet協(xié)議里。同時它也用在很多非在線應(yīng)用場景里,比如電子簽名服務(wù)。
X.509證書里含有公鑰、身份信息(比如網(wǎng)絡(luò)主機(jī)名,組織的名稱或個體名稱等)和簽名信息(可以是證書簽發(fā)機(jī)構(gòu)CA的簽名,也可以是自簽名)。對于一份經(jīng)由可信的證書簽發(fā)機(jī)構(gòu)簽名或者可以通過其它方式驗證的證書,證書的擁有者就可以用證書及相應(yīng)的私鑰來創(chuàng)建安全的通信,對文檔進(jìn)行數(shù)字簽名。另外除了證書本身功能,X.509還附帶了證書吊銷列表和用于從最終對證書進(jìn)行簽名的證書簽發(fā)機(jī)構(gòu)直到最終可信點(diǎn)為止的證書合法性驗證算法。
X.509是ITU-T標(biāo)準(zhǔn)化部門基于他們之前的ASN.1定義的一套證書標(biāo)準(zhǔn)。

一句話總結(jié):X.509是一個證書規(guī)范和標(biāo)準(zhǔn),據(jù)此我們可以完成相應(yīng)的證書簽發(fā)、核驗等操作。

2. Java核心類

2.1 javax.net.ssl.SSLContext

根據(jù)javadocSSLContext是SSL協(xié)議的封裝類。

在這里插入圖片描述

解釋:此類的實例表示安全套接字協(xié)議的實現(xiàn),它充當(dāng)用于安全套接字工廠或 SSLEngine 的工廠。用可選的一組密鑰和信任管理器及安全隨機(jī)字節(jié)源初始化此類。

2.2 java.security.cert.X509Certificate

根據(jù)javadoc可知X509Certificate是SSL證書的封裝類。

在這里插入圖片描述

解釋:X.509 是證書的抽象類。此類提供了一種訪問 X.509 v1 證書所有屬性的標(biāo)準(zhǔn)方式。無法通過此接口提供專用于 X.509 v2 或 v3 的屬性。以后的 API 發(fā)展會提供對全部 X.509 v3 屬性的完全訪問。
基本的 X.509 格式由 ISO/IEC 和 ANSI X9 所定義,用 ASN.1 描述如下:
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING }
這些證書被廣泛使用以支持 Internet 安全系統(tǒng)中的身份驗證和其他功能。常見的應(yīng)用包括增強(qiáng)保密郵件 (PEM)、傳輸層安全 (SSL)、用于受信任軟件發(fā)布的代碼簽名和安全電子交易 (SET)。
由證書頒發(fā)機(jī)構(gòu) (CA) 來管理和擔(dān)保這些證書。CA 的工作是創(chuàng)建證書,方法是將數(shù)據(jù)置于 X.509 標(biāo)準(zhǔn)格式,然后以數(shù)字方式簽署該數(shù)據(jù)。CA 充當(dāng)受信任的第三方,在不能直接通信的主體之間傳遞信息。CA 證書可由其自身簽名,也可由其他 CA 簽名,如“根”CA。

2.3 javax.net.ssl.X509TrustManager

根據(jù)javadoc可知X509TrustManager是SSL證書驗證的“憑據(jù)”封裝類。

在這里插入圖片描述

解釋:TrustManager 負(fù)責(zé)管理做出信任決定時使用的的信任材料,也負(fù)責(zé)決定是否接受同位體提供的憑據(jù)。通過使用 TrustManagerFactory,或?qū)崿F(xiàn) TrustManager 子類之一創(chuàng)建 TrustManager。

三、SSL驗證示例

通過一、二的介紹,我們具備了一定的理論基礎(chǔ)實踐方向,接下來可以通過一個示例“小試牛刀”了。且看以下代碼:

SSLContext sc = SSLContext.getInstance("ssl");
sc.init(null, new TrustManager[] { new X509TrustManager() {

	@Override
	public X509Certificate[] getAcceptedIssuers() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
		// 驗證服務(wù)器證書鏈
        TrustManagerFactory trustManagerFactory;
		try {
			trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
			trustManagerFactory.init((KeyStore) null);
			TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
			
			for (TrustManager trustManager : trustManagers) {
				if (trustManager instanceof X509TrustManager) {
					((X509TrustManager) trustManager).checkServerTrusted(chain, authType);
					return;
				}
			}
		} catch (NoSuchAlgorithmException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (KeyStoreException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        throw new CertificateException("驗證證書失敗,請核查!");
	}

	@Override
	public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
		// TODO Auto-generated method stub

	}
} }, new java.security.SecureRandom());

在對SSL驗證的時候,我們主要關(guān)注服務(wù)端證書的有效性,因此只需對其中的checkServerTrusted方法進(jìn)行實現(xiàn)。你只需要將以上代碼貼在一個POST請求中,即可完成對服務(wù)端SSL證書的驗證。

結(jié)語

本文對Springboot中如何完成服務(wù)端SSL證書的校驗進(jìn)行了介紹,相關(guān)背景和支持的工具均已闡述并提供。

到此這篇關(guān)于Springboot中基于X509完成SSL檢驗的原理與實現(xiàn)的文章就介紹到這了,更多相關(guān)Springboot X509完成SSL檢驗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot如何優(yōu)雅的實現(xiàn)重試功能

    SpringBoot如何優(yōu)雅的實現(xiàn)重試功能

    這篇文章主要詳細(xì)介紹了SpringBoot如何優(yōu)雅的實現(xiàn)重試功能的步驟詳解,文中有詳細(xì)的代碼示例,具有一定的參考價值,感興趣的同學(xué)可以借鑒閱讀
    2023-06-06
  • Java面試題沖刺第十五天--設(shè)計模式

    Java面試題沖刺第十五天--設(shè)計模式

    這篇文章主要為大家分享了最有價值的三道關(guān)于設(shè)計模式的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解Java引用類型的參數(shù)也是值傳遞

    詳解Java引用類型的參數(shù)也是值傳遞

    這篇文章主要介紹了Java引用類型的參數(shù)也是值傳遞,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 詳解SpringBoot結(jié)合swagger2快速生成簡單的接口文檔

    詳解SpringBoot結(jié)合swagger2快速生成簡單的接口文檔

    這篇文章主要介紹了詳解SpringBoot結(jié)合swagger2快速生成簡單的接口文檔,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 攔截JSP頁面,校驗是否已登錄詳解及實現(xiàn)代碼

    攔截JSP頁面,校驗是否已登錄詳解及實現(xiàn)代碼

    這篇文章主要介紹了攔截JSP頁面,校驗是否已登錄詳解及實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • java獲取ip地址與網(wǎng)絡(luò)接口的方法示例

    java獲取ip地址與網(wǎng)絡(luò)接口的方法示例

    這篇文章主要給大家介紹了關(guān)于利用java如何獲取ip地址與網(wǎng)絡(luò)接口的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-01-01
  • mybatis-plus 使用Condition拼接Sql語句各方法的用法

    mybatis-plus 使用Condition拼接Sql語句各方法的用法

    這篇文章主要介紹了mybatis-plus 使用Condition拼接Sql語句各方法的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 又一波Java專業(yè)人士必備書籍來襲

    又一波Java專業(yè)人士必備書籍來襲

    又一波Java專業(yè)人士必備書籍來襲,這篇文章主要向大家推薦了Java專業(yè)人士必讀的書,感興趣的小伙伴們不要錯過
    2016-09-09
  • MyEclipse整合ssh三大框架環(huán)境搭載用戶注冊源碼下載

    MyEclipse整合ssh三大框架環(huán)境搭載用戶注冊源碼下載

    這篇文章主要為大家詳細(xì)介紹了如何使用MyEclipse整合ssh三大框架進(jìn)行環(huán)境搭載,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Kryo序列化及反序列化用法示例

    Kryo序列化及反序列化用法示例

    這篇文章主要介紹了Kryo序列化及反序列化用法示例,小編覺得挺不錯的,這里分享給大家,需要的朋友可以參考下。
    2017-10-10

最新評論