springboothttps调用(springboot配置https以及http重定向)
springboothttps调用(springboot配置https以及http重定向)-alias 你的证书别名keytool -genkey -alias tomcat -keyalg RSA -validity 20000 -keystore keystore.p12参数说明:然后在该目录下打开 cmd ,输入命令:windows 平台:keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365linux平台:
因业务需求,需要将 htpp 请求转为 https 请求,这里需要 ssl 证书,证书的获取可以借助 jdk 自带的 keytool 工具生成。
原文地址:
https://www.cnblogs.com/notchangeworld/p/12669148.html
https://www.cnblogs.com/atomgame/p/12410985.html
一、生成 ssl 证书
进入 jdk 的 bin 目录,可以看到 keytool 工具
然后在该目录下打开 cmd ,输入命令:
windows 平台:
keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365
linux平台:
keytool -genkey -alias tomcat -keyalg RSA -validity 20000 -keystore keystore.p12
参数说明:
-alias 你的证书别名
-keyalg 密钥算法
-keystore 证书库文件保存的位置和文件名
-keysize 密钥长度
-validity 证书有效期天数
生成的证书就在 bin 目录下
二、将生成的keystore.p12文件放到项目的 resources 目录下:
三、配置application.properties / application.yml 文件
#ssl证书
server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=******
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=tomcat
如果 chrome 不可以访问
那么在配置里再加一条配置信息
server.ssl.ciphers=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA TLS_ECDHE_RSA_WITH_RC4_128_SHA TLS_RSA_WITH_AES_128_CBC_SHA256 TLS_RSA_WITH_AES_128_CBC_SHA TLS_RSA_WITH_AES_256_CBC_SHA256 TLS_RSA_WITH_AES_256_CBC_SHA SSL_RSA_WITH_RC4_128_SHA
这时就可以发送 https 请求了
此外因为Spring Boot不支持同时在配置中启动http和https。这个时候可以配置请求重定向,将http请求重定向为https请求。配置如下:
@Configuration
public class TomcatConfig {
@Bean
TomcatServletWebServerfactory tomcatServletWebServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
// TODO Auto-generated method stub
Securityconstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
Securitycollection collection = new SecurityCollection();
collection.addPattern("/");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
factory.addAdditionalTomcatConnectors(createTomcatConnector());
return factory;
}
private Connector createTomcatConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(8080);
return connector;
}
}
这里首先配置一个TomcatServletWebServerFactory 然后添加一个Tomcat中的Connector(监听80端口),并将请求转发到8080上去.