一. 配置双协议的原因?
1. SpringBoot项目,默认支持的是http协议。
2. 微信小程序开发中,对网络数据请求做出了限制(只支持https协议)
(1)出于安全性方面的考虑,小程序官方对数据接口的请求做出了如下两个限制:
①只能请求 HTTPS 类型的接口
②必须将
接口的域名
添加到
信任列表
中
(2)在开发过程中,我们可以先勾选不校验合法域名,先使用http请求,来进行测试。但在上线后,必须支持https协议的请求。
二 . 开始配置
1. 证书生成
(1)我们可以使用用jdk自带的keytool生成一个.pfx的文件
keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\httpsKey.pfx -validity 3600
(2)参数:
-genkey 生成key
-validity 3600 有效期限3600天
-alias 别名
-keyalg RSA 指定生成key的算法RSA
-keystore D:\httpsKey.pfx 指定生成的pfx文件和路径 在D盘下
2. 然后将生成的证书, 放在项目的resources目录下
3. 在application.yml中配置相关信息,使项目支持https协议的请求
在yml文件中配置:支持双协议。yml文件中配置https协议。http协议在另一个文件中配置,下面会讲。
#这里配置的时支持https协议,8080是https协议服务的端口号。http协议服务端口号为9201在配置文件中配置
server:
port: 8080
servlet:
context-path: /bm
ssl:
enabled: true #true表示开启https请求协议。false代表关闭https协议(当前协议就是http协议)
protocol: TLS #加密通信的规范
key-store: classpath:httpsKey.pfx #生成的证书
key-store-password: admin123 #执行证书的密码
key-store-type: PKCS12 ##执行证书的类型,需要与证书后缀所属类型相符
4. 自定义一个config配置类,在该类中配置http协议
@Component
public class TomcatServerCustomer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
// final Connector connector = new Connector("HTTP/1.1");
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(9201);
factory.addAdditionalTomcatConnectors(connector);
}
}
三. 验证配置是否成功
1. 启动SpringBoot项目,查看日志是否出现以下结果
2. 访问接口验证协议是否配置成功(我这里通过Swagger接口文档验证不同的协议请求)
(1)http协议,我配置的端口号是9201
(2)https协议,我配置的端口号是8080
通过以上结果:SpringBoot配置双协议成功!!!
四. 证书类型与后缀辨别
证书主要的文件类型和协议有: PEM、DER、PFX、JKS、KDB、CER、KEY、CSR、CRT、CRL 、OCSP、SCEP等。
证书类型 | 常见的后缀 |
PKCS7 | .P7B .P7C .SPC |
PKCS12 | .P12 .PFX |
X.509 DER编码(ASCII) | .DER .CER .CRT |
X.509 PAM编码(Base64) | .PEM .CER .CRT |
.cer/.crt是用于存放证书,它是2进制形式存放的,不含私钥。 | |
.pem跟crt/cer的区别是它以Ascii来表示 | |
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式 | |
p10是证书请求 | |
p7r是CA对证书请求的回复,只用于导入 | |
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥 |