目錄
一、前言
二、SpringBoot中配置SSL
1、環(huán)境
2、客戶端單向認(rèn)證服務(wù)端代碼實(shí)戰(zhàn)-PFX格式的證書(shū)
3、HTTP 轉(zhuǎn)HTTPS
一、前言
通過(guò)HTTP協(xié)議傳輸數(shù)據(jù),并不會(huì)對(duì)數(shù)據(jù)進(jìn)行加密,所以存在著一定的風(fēng)險(xiǎn),容易被抓包破解數(shù)據(jù),而且現(xiàn)在各種瀏覽器對(duì)使用HTTP協(xié)議的網(wǎng)站也會(huì)提示不安全。通過(guò)將HTTP協(xié)議升級(jí)為HTTPS協(xié)議可以提高安全系數(shù)。使用HTTPS協(xié)議就需要了解一下SSL協(xié)議。
SSL(Secure Sockets Layer 安全套接字協(xié)議),及其繼任者傳輸層安全(Transport Layer Security,TLS)是為網(wǎng)絡(luò)通信提供安全及數(shù)據(jù)完整性的一種安全協(xié)議。TLS與SSL在傳輸層與應(yīng)用層之間對(duì)網(wǎng)絡(luò)連接進(jìn)行加密。
SSL協(xié)議位于TCP/IP協(xié)議與各種應(yīng)用層協(xié)議之間,為數(shù)據(jù)通訊提供安全支持。SSL協(xié)議可分為兩層: SSL記錄協(xié)議(SSL Record Protocol):它建立在可靠的傳輸協(xié)議(如TCP)之上,為高層協(xié)議提供數(shù)據(jù)封裝、壓縮、加密等基本功能的支持。 SSL握手協(xié)議(SSL Handshake Protocol):它建立在SSL記錄協(xié)議之上,用于在實(shí)際的數(shù)據(jù)傳輸開(kāi)始前,通訊雙方進(jìn)行身份認(rèn)證、協(xié)商加密算法、交換加密密鑰等。
服務(wù)器認(rèn)證階段:
1)客戶端向服務(wù)器發(fā)送一個(gè)開(kāi)始信息“Hello”以便開(kāi)始一個(gè)新的會(huì)話連接;
2)服務(wù)器根據(jù)客戶的信息確定是否需要生成新的主密鑰,如需要?jiǎng)t服務(wù)器在響應(yīng)客戶的“Hello”信息時(shí)將包含生成主密鑰所需的信息;
3)客戶根據(jù)收到的服務(wù)器響應(yīng)信息,產(chǎn)生一個(gè)主密鑰,并用服務(wù)器的公開(kāi)密鑰加密后傳給服務(wù)器;
4)服務(wù)器恢復(fù)該主密鑰,并返回給客戶一個(gè)用主密鑰認(rèn)證的信息,以此讓客戶認(rèn)證服務(wù)器。
用戶認(rèn)證階段:在此之前,服務(wù)器已經(jīng)通過(guò)了客戶認(rèn)證,這一階段主要完成對(duì)客戶的認(rèn)證。經(jīng)認(rèn)證的服務(wù)器發(fā)送一個(gè)提問(wèn)給客戶,客戶則返回(數(shù)字)簽名后的提問(wèn)和其公開(kāi)密鑰,從而向服務(wù)器提供認(rèn)證。
SSL協(xié)議提供的安全通道有以下三個(gè)特性:
機(jī)密性:SSL協(xié)議使用密鑰加密通信數(shù)據(jù)。
可靠性:服務(wù)器和客戶都會(huì)被認(rèn)證,客戶的認(rèn)證是可選的。
完整性:SSL協(xié)議會(huì)對(duì)傳送的數(shù)據(jù)進(jìn)行完整性檢查。
從SSL 協(xié)議所提供的服務(wù)及其工作流程可以看出,SSL協(xié)議運(yùn)行的基礎(chǔ)是商家對(duì)消費(fèi)者信息保密的承諾,這就有利于商家而不利于消費(fèi)者。在電子商務(wù)初級(jí)階段,由于運(yùn)作電子商務(wù)的企業(yè)大多是信譽(yù)較高的大公司,因此這問(wèn)題還沒(méi)有充分暴露出來(lái)。但隨著電子商務(wù)的發(fā)展,各中小型公司也參與進(jìn)來(lái),這樣在電子支付過(guò)程中的單一認(rèn)證問(wèn)題就越來(lái)越突出。雖然在SSL3.0中通過(guò)數(shù)字簽名和數(shù)字證書(shū)可實(shí)現(xiàn)瀏覽器和Web服務(wù)器雙方的身份驗(yàn)證,但是SSL協(xié)議仍存在一些問(wèn)題,比如,只能提供交易中客戶與服務(wù)器間的雙方認(rèn)證,在涉及多方的電子交易中,SSL協(xié)議并不能協(xié)調(diào)各方間的安全傳輸和信任關(guān)系。在這種情況下,Visa和 MasterCard兩大信用卡公司組織制定了SET協(xié)議,為網(wǎng)上信用卡支付提供了全球性的標(biāo)準(zhǔn)。
以上摘自百度。
二、SpringBoot中配置SSL
SSL證書(shū)的頒發(fā)必須是公開(kāi)公認(rèn)的CA機(jī)構(gòu)頒發(fā)的,在瀏覽器中才會(huì)被認(rèn)可是合法的;
SSL證書(shū)是針對(duì)域名的,單域名的SSL證書(shū)對(duì)非該域名也是無(wú)效的通配域名證書(shū)對(duì)一級(jí)域名和二級(jí)域名都有效。
1、環(huán)境
spring boot 2.0.0+
maven
一個(gè)域名(各大域名商有售,阿里、騰訊、華為)
SSL證書(shū)(阿里云上有免費(fèi)的SSL證書(shū),有效期一年)
2、客戶端單向認(rèn)證服務(wù)端代碼實(shí)戰(zhàn)-PFX格式的證書(shū)
tomcat中支持PFX與JKS格式兩種格式的證書(shū),這邊演示的就是PFX格式的證書(shū)演示。
(1)準(zhǔn)備一個(gè)PFX后綴的SSL證書(shū)。(域名.pfx)
(2)快速構(gòu)建一個(gè)springboot模塊
(3) 把SSL證書(shū)放到resources目錄下
(4)在項(xiàng)目配置文件application.yml中配置SSL
server:
port: 80
ssl: #ssl配置
# resources根目錄的”證書(shū)源文件.pfx“
key-store: classpath:xxx.pfx
# “.pfx”證書(shū)對(duì)應(yīng)格式,“.jks"證書(shū)對(duì)應(yīng)“RSA”
key-store-type: PKCS12 證書(shū)類型
key-store-password: 證書(shū)密碼
#key-password: 私鑰密碼
如果證書(shū)密碼和私鑰密碼相同的只配置一個(gè)即可,因?yàn)閠omcat默認(rèn)先用keyStore的pass去解私鑰。(注:如果你使用阿里云上的免費(fèi)SSL證書(shū),下載jks格式的證書(shū)的時(shí)候,只有一個(gè)密碼,是證書(shū)的密碼)
(5)本地訪問(wèn)http協(xié)議的80端口:http://127.0.0.1:80
通過(guò)上述訪問(wèn)發(fā)現(xiàn),會(huì)報(bào)出以上提示,如果通過(guò)http訪問(wèn)會(huì)提示訪問(wèn)需要組合TLS,但是如果用戶直接通過(guò)這種方式訪問(wèn)的話,存在著極差的用戶體驗(yàn)。
3、HTTP 轉(zhuǎn)HTTPS
(1)修改配置文件
server:
port: 443
ssl: #ssl配置
# resources根目錄的”證書(shū)源文件.pfx“
key-store: classpath:xxx.pfx
# “.pfx”證書(shū)對(duì)應(yīng)格式,“.jks"證書(shū)對(duì)應(yīng)“RSA”
key-store-type: PKCS12 證書(shū)類型
key-store-password: 證書(shū)密碼
#key-password: 私鑰密碼
(2)在application中添加文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-671152.html
//SpringBoot-v2.0+配置方式
@Bean
public ServletWebServerFactory servletContainer() {
//創(chuàng)建Tomcat服務(wù)器工廠實(shí)例
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
//添加此tomcat實(shí)例其它連接參數(shù)
tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
return tomcat;
}
/**
* 配置tomcat自定義連接參數(shù)
* @return
*/
private Connector createHTTPConnector() {
//Connector port有兩種運(yùn)行模式(NIO和APR),選擇NIO模式:protocol="org.apache.coyote.http11.Http11NioProtocol"
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
//啟用http(80)端口
connector.setScheme("http");
//設(shè)置安全連接標(biāo)志,該標(biāo)志將被分配給通過(guò)該連接接收的請(qǐng)求
//secure新的安全連接標(biāo)志
//如果connector.setSecure(true),則http使用http, https使用https; 分離狀態(tài),因此設(shè)置false
connector.setSecure(false);
//http默認(rèn)端口
connector.setPort(80);
//重定向證書(shū)端口443,便于http自動(dòng)跳轉(zhuǎn)https
connector.setRedirectPort(443);
return connector;
}
(3)再去訪問(wèn)http協(xié)議的80端口:http://127.0.0.1:80
訪問(wèn)成功!但是顯示連接不安全!
上述代碼會(huì)將http端口的請(qǐng)求轉(zhuǎn)發(fā)到https端口,而用戶無(wú)需做其它的操作。
本地直接訪問(wèn)https端口和在服務(wù)器上直接訪問(wèn)就不貼圖了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-671152.html
到了這里,關(guān)于SpringBoot配置SSL證書(shū),開(kāi)啟HTTPS安全訪問(wèn)!??!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!