1.生成证书,可以使自签名或者从SSL证书授权中心获得的。JDK中keytool是一个证书管理工具,可以生成自签名证书。点击开始,输入cmd进入命令页,输入
keytool -genkey -alias foot -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
按回车键进入下一步
-alias foot 定义签名的别名为foot
-keystore keystore.p12 定义生成签名的名称
如图:
点击回车一步一步完成上面的提示操作,会在本目录下生成一个keystore.p12的文件,复制这个文件到项目的resources路径下
2.在application.properties文件中进行配置
#设置请求端口号
server.port=8088
#配置使用https请求,keystore.p12
server.ssl.key-store= classpath:keystore.p12
#生成keystore时输入的密码
server.ssl.key-store-password=zhengjun0808
#生成keystore时输入的keyStoreType
server.ssl.keyStoreType = PKCS12
#生成keystore时输入的keyAlias别名
server.ssl.keyAlias = foot
其实进行完这些操作后就可以进行https启动了,但是为了兼容之前已经开发好的接口,我们可能也要同时支持http,因为application.properties不能同时配置两个connector,所以要以编程的方式配置HTTP connector,然后重定向到HTTPS connector
3.将HTTP请求重定向到HTTPS(可选)
这需要新建一个配置类,进行配置,代码如下:
package me.zhengjun.com.footdemo.config.dao;
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
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;
/**
* @author zhengjun
* @desc 让我们的应用同时支持HTTP和https,需要重定向到HTTPS,
* 因为不能同时在application.properties中同时配置两个connector,
* 所以要以编程的方式配置HTTP connector,然后重定向到HTTPS connector
* @create at 2018/8/2 10:48
*/
@Configuration
public class TomcatEmbeddedServletConfiguration {
//使用注解的方式@Value获取
@Value("${server.port}")
int httpsPort;
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(8080); // http端口
connector.setSecure(false);
connector.setRedirectPort(httpsPort); // application.properties中配置的https端口
return connector;
}
}