Springboot 配置 https 的后端服务
由于项目需要,要实现https+wss服务,经过2天研究,终于通过Springboot配置成功https+wss服务,记录一下以此分享。
1、生成ssl证书方法(注意-alias的名称要与application的名称一致),两个方法都可以。
//keytool -genkey -alias myhttps -keyalg RSA -keysize 2048 -keystore E:\test.p12 -validity 365
//keytool -genkeypair -alias myhttps -keyalg EC -keysize 256 -validity 365 -keypass 你的密码 -keystore EC_keystore.jks -storepass 你的密码 -storetype jks
2、然后把证书copy的项目中resources目录,并修改application-xxx.yml根据需求放到自己放到不同的application-xxx.yml)。
3、新建HttpConnectorConfig类,详细如下:
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.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HttpConnectorConfig {
@Value("${server.port}")
private Integer port;
/**
* 获取Http连接器
* @return Connector
*/
public Connector getHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http"); // 使用http协议
connector.setSecure(false); // 非安全传输
connector.setPort(8080); // HTTP监听端口
connector.setRedirectPort(port); // 重定向端口
return connector;
}
@Bean
public TomcatServletWebServerFactory tomcatServletWebServerFactory() {
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(getHttpConnector()); // 添加连接器
return tomcat;
}
}
4、这时https服务就可以,访问https://xxx.yy.zzz:端口/就可以了。
特别说明,新写的demo到这里就结果了,访问https接口正常。但是目录的项目发现启动时间提示“Invalid keystore format”,还有一些莫名其妙的错误,请接着往下参考。
5、如果启动项目,报“Invalid keystore format”,这时修需求改pox.xml