目录
一、前言
二、SpringBoot中配置SSL
1、环境
2、客户端单向认证服务端代码实战-PFX格式的证书
3、HTTP 转HTTPS
一、前言
通过HTTP协议传输数据,并不会对数据进行加密,所以存在着一定的风险,容易被抓包破解数据,而且现在各种浏览器对使用HTTP协议的网站也会提示不安全。通过将HTTP协议升级为HTTPS协议可以提高安全系数。使用HTTPS协议就需要了解一下SSL协议。
SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层与应用层之间对网络连接进行加密。
SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。
服务器认证阶段:
1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;
2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;
3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;
4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。
用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。
SSL协议提供的安全通道有以下三个特性:
机密性:SSL协议使用密钥加密通信数据。
可靠性:服务器和客户都会被认证,客户的认证是可选的。
完整性:SSL协议会对传送的数据进行完整性检查。
从SSL 协议所提供的服务及其工作流程可以看出,SSL协议运行的基础是商家对消费者信息保密的承诺,这就有利于商家而不利于消费者。在电子商务初级阶段,由于运作电子商务的企业大多是信誉较高的大公司,因此这问题还没有充分暴露出来。但随着电子商务的发展,各中小型公司也参与进来,这样在电子支付过程中的单一认证问题就越来越突出。虽然在SSL3.0中通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证,但是SSL协议仍存在一些问题,比如,只能提供交易中客户与服务器间的双方认证,在涉及多方的电子交易中,SSL协议并不能协调各方间的安全传输和信任关系。在这种情况下,Visa和 MasterCard两大信用卡公司组织制定了SET协议,为网上信用卡支付提供了全球性的标准。
以上摘自百度。
二、SpringBoot中配置SSL
SSL证书的颁发必须是公开公认的CA机构颁发的,在浏览器中才会被认可是合法的;
SSL证书是针对域名的,单域名的SSL证书对非该域名也是无效的通配域名证书对一级域名和二级域名都有效。
1、环境
spring boot 2.0.0+
maven
一个域名(各大域名商有售,阿里、腾讯、华为)
SSL证书(阿里云上有免费的SSL证书,有效期一年)
2、客户端单向认证服务端代码实战-PFX格式的证书
tomcat中支持PFX与JKS格式两种格式的证书,这边演示的就是PFX格式的证书演示。
(1)准备一个PFX后缀的SSL证书。(域名.pfx)
(2)快速构建一个springboot模块
(3) 把SSL证书放到resources目录下
(4)在项目配置文件application.yml中配置SSL
server:
port: 80
ssl: #ssl配置
# resources根目录的”证书源文件.pfx“
key-store: classpath:xxx.pfx
# “.pfx”证书对应格式,“.jks"证书对应“RSA”
key-store-type: PKCS12 证书类型
key-store-password: 证书密码
#key-password: 私钥密码
如果证书密码和私钥密码相同的只配置一个即可,因为tomcat默认先用keyStore的pass去解私钥。(注:如果你使用阿里云上的免费SSL证书,下载jks格式的证书的时候,只有一个密码,是证书的密码)
(5)本地访问http协议的80端口:http://127.0.0.1:80
通过上述访问发现,会报出以上提示,如果通过http访问会提示访问需要组合TLS,但是如果用户直接通过这种方式访问的话,存在着极差的用户体验。
3、HTTP 转HTTPS
(1)修改配置文件
server:
port: 443
ssl: #ssl配置
# resources根目录的”证书源文件.pfx“
key-store: classpath:xxx.pfx
# “.pfx”证书对应格式,“.jks"证书对应“RSA”
key-store-type: PKCS12 证书类型
key-store-password: 证书密码
#key-password: 私钥密码
(2)在application中添加文章来源:https://www.toymoban.com/news/detail-671152.html
//SpringBoot-v2.0+配置方式
@Bean
public ServletWebServerFactory servletContainer() {
//创建Tomcat服务器工厂实例
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
//添加此tomcat实例其它连接参数
tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
return tomcat;
}
/**
* 配置tomcat自定义连接参数
* @return
*/
private Connector createHTTPConnector() {
//Connector port有两种运行模式(NIO和APR),选择NIO模式:protocol="org.apache.coyote.http11.Http11NioProtocol"
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
//启用http(80)端口
connector.setScheme("http");
//设置安全连接标志,该标志将被分配给通过该连接接收的请求
//secure新的安全连接标志
//如果connector.setSecure(true),则http使用http, https使用https; 分离状态,因此设置false
connector.setSecure(false);
//http默认端口
connector.setPort(80);
//重定向证书端口443,便于http自动跳转https
connector.setRedirectPort(443);
return connector;
}
(3)再去访问http协议的80端口:http://127.0.0.1:80
访问成功!但是显示连接不安全!
上述代码会将http端口的请求转发到https端口,而用户无需做其它的操作。
本地直接访问https端口和在服务器上直接访问就不贴图了。文章来源地址https://www.toymoban.com/news/detail-671152.html
到了这里,关于SpringBoot配置SSL证书,开启HTTPS安全访问!!!的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!