https会使我们的网站更加安全,起码看起来似乎好一些。这里分享Spring Boot配置https的步骤。
需要有ssl证书
1.1可以在阿里云个人用户申请免费证书,申请方法可以查看此链接https://developer.aliyun.com/article/766913,然后在我们的控制台-SSL证书里面可以添加免费证书:
然后点证书申请:
申请通过之后可以下载证书,然后会得到个压缩包,里面有jks证书和密码。
1.2可以使用java自带的生成数字证书
数字签名的生成:进入jdk的安装目录,bin文件夹下,打开命令窗口输入一下命令生成数字证书: keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\javasign.p12 -validity 365
命令含义如下:
- genkey 表示要创建一个新的密钥
- alias 表示 keystore 的别名
- keyalg 表示使用的加密算法是 RSA ,一种非对称加密算法
- keysize 表示密钥的长度
- keystore 表示生成的密钥存放位置
- validity 表示密钥的有效时间,单位为天
执行完命令生成证书在d盘目录有一个javasign.p12文件,即为生成的证书文件,拷贝此证书文件放在resource目录下,并配置application.properties文件ssl证书配置,如下:
其中alias为证书别名,key-store表示密钥文件名,key-store-password就是在cmd命令执行过程中输入的密码。
启动项目
启动项目,在浏览器输入https://127.0.0.1:18080/mock1/crm.js.intf.qryCustomer,会出现下面显示,点击高级-继续即可
最终可以使用HTTPS访问:
但是当我们使用HTTP访问的时候,就会出现问题
解决上面的问题需要添加配置文件:
package com.test.vrtmp.config;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Author ChengWang
* @Date 2023/11/2
*/
//@Configuration
public class HttpConfig {
/**
* http自动跳转https
*/
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(redirectConnector());
return tomcat;
}
private Connector redirectConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080); // 原http端口
connector.setSecure(false);
connector.setRedirectPort(18080); // 跳转的https端口,也就是我们配置文件中配置的项目端口
return connector;
}
}
项目改造支持https接口请求
postman请求用户开户接口,debug断点进入,执行到请求外部接口时,会走下面else分支:
继续请求会远程调用https接口:https://127.0.0.1:18080/mock1/crm.js.intf.qryCustomer,请求接口response结果正确。如下图:
查看红框圈的信息,我们已经基于https请求调用请求成功了。好啦,至此已经讲完ssl证书配置,希望可以帮助大家~