springboot實(shí)現(xiàn)的https單向認(rèn)證和雙向認(rèn)證(java生成證書)
1、java生成HTTPS證書:
既然是雙向驗(yàn)證,就需要雙方的密鑰,我們服務(wù)端稱為localhost,而客戶端稱為client。需要生成雙方的密鑰文件,并把對(duì)方的cert導(dǎo)入自己的密鑰文件里。整個(gè)過程如下:
注意:密碼統(tǒng)一為:changeit
,這個(gè)密碼自己可以設(shè)置,然后記住就可以了。
生成服務(wù)端密鑰文件localhost.jks:
keytool -genkey -alias localhost -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore localhost.jks -dname CN=localhost,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 -storepass changeit -keypass changeit
導(dǎo)出服務(wù)端的cert文件:
keytool -export -alias localhost -file localhost.cer -keystore localhost.jks
生成客戶端的密鑰文件client.jks:
keytool -genkey -alias client -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore client.jks -dname CN=client,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 -storepass changeit -keypass changeit
導(dǎo)出客戶端的cert文件:
keytool -export -alias client -file client.cer -keystore client.jks
把客戶端的cert導(dǎo)入到服務(wù)端:
keytool -import -alias client -file client.cer -keystore localhost.jks
把服務(wù)端的cert導(dǎo)入到客戶端:
keytool -import -alias localhost -file localhost.cer -keystore client.jks
檢驗(yàn)服務(wù)端是否具有自己的private key和客戶端的cert:
keytool -list -keystore localhost.jks
為了建立連接,應(yīng)該要把客戶端的密鑰文件給谷歌瀏覽器使用。因?yàn)镴KS是Java的密鑰文件格式,我們轉(zhuǎn)換成通用的PKCS12格式如下:
轉(zhuǎn)換JKS格式為P12:
keytool -importkeystore -srckeystore client.jks -destkeystore client.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass changeit -deststorepass changeit -srckeypass changeit -destkeypass changeit -srcalias client -destalias client -noprompt
成功執(zhí)行完上述步驟后,會(huì)生成5個(gè)文件:
- 服務(wù)端密鑰文件: localhost.jks
- 服務(wù)端cert文件:localhost.cer
- 客戶端密鑰文件:client.jks
- 客戶端cert文件:client.cer
- 客戶端能識(shí)別的密鑰文件:client.p12
2、配置SpringBoot:
在application.properties或者application.yml中去配置即可:
server.port=443 server.ssl.enabled=true server.ssl.key-store-type=JKS server.ssl.key-store=classpath:localhost.jks server.ssl.key-store-password=changeit server.ssl.key-alias=localhost server.ssl.trust-store=classpath:localhost.jks server.ssl.trust-store-password=changeit server.ssl.trust-store-provider=SUN server.ssl.trust-store-type=JKS server.ssl.client-auth=need
需要將生成的localhost.jks文件放到springboot項(xiàng)目中的resource文件夾下,然后重啟項(xiàng)目,就可以了
需要分別配置Key Store和Trust Store的文件、密碼等信息,即使是同一個(gè)文件。
需要注意的是,server.ssl.client-auth有三個(gè)可配置的值:none、want和need。雙向驗(yàn)證應(yīng)該配置為need;none表示不驗(yàn)證客戶端;want表示會(huì)驗(yàn)證,但不強(qiáng)制驗(yàn)證,即驗(yàn)證失敗也可以成功建立連接。
3、用Postman測試雙向驗(yàn)證:
完成密鑰文件準(zhǔn)備和配置后,啟動(dòng)SpringBootbian便可以了,我這里用谷歌瀏覽器訪問如下:
然后我將生成的證書導(dǎo)入到瀏覽器中,重啟瀏覽器繼續(xù)訪問測試接口,就會(huì)提示我們選擇證書,點(diǎn)擊我們導(dǎo)入的證書就可以正常訪問了。
如何在瀏覽器中導(dǎo)入證書呢?打開谷歌瀏覽器,找到設(shè)置->隱私設(shè)置和安全性->安全->管理設(shè)備證書->導(dǎo)入,按步驟提示導(dǎo)入就可以了,導(dǎo)入的是client.p12這個(gè)文件,
需要輸入密碼就是我們前面設(shè)置的changeit,當(dāng)然你設(shè)置了其他的密碼,正常輸入就可以了。
然后重啟瀏覽器再次訪問,記得是https開頭的URL,就會(huì)提示我們選擇證書,選擇我們導(dǎo)入的證書,點(diǎn)擊確定就可以了。
至于單向認(rèn)證只需要我們將server.ssl.client-auth的值改為none就可以了,這樣我們就不需要在客戶端瀏覽器導(dǎo)入證書了,訪問遇到警告,點(diǎn)擊濾過繼續(xù)訪問就可以正常訪問了
至此整個(gè)認(rèn)證過程就結(jié)束了,更多相關(guān)springboot https單向認(rèn)證和雙向認(rèn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
IDEA導(dǎo)入geoserver項(xiàng)目的詳細(xì)步驟及注意事項(xiàng)
由于GeoServer是基于Java開發(fā)的。因此在安裝之前,必須確保安裝了Java。本文給大家分享IDEA導(dǎo)入geoserver項(xiàng)目的詳細(xì)步驟及注意事項(xiàng),感興趣的朋友一起看看吧2021-06-06java URL 獲取PHP JSON 數(shù)據(jù)
這篇文章主要介紹了java URL 獲取PHP JSON 數(shù)據(jù),需要的朋友可以參考下2016-04-04SpringBoot+SpringSecurity+jwt實(shí)現(xiàn)驗(yàn)證
本文主要介紹了SpringBoot+SpringSecurity+jwt實(shí)現(xiàn)驗(yàn)證,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07mybatis plus條件構(gòu)造器queryWrapper、updateWrapper
這篇文章主要介紹了mybatis plus條件構(gòu)造器queryWrapper、updateWrapper,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09詳解Java數(shù)組的一維和二維講解和內(nèi)存顯示圖
這篇文章主要介紹了Java數(shù)組的一維和二維講解和內(nèi)存顯示圖,數(shù)組就相當(dāng)于一個(gè)容器,存放相同類型數(shù)據(jù)的容器。而數(shù)組的本質(zhì)上就是讓我們能 "批量" 創(chuàng)建相同類型的變量,需要的朋友可以參考下2023-05-05