web应用支持https的访问方式,通常情况下有两种:一种是代理服务器把http转https, 另外一种是应用直接提供https服务。
代理服务器转换: 一般是使用nginx做web代理, 去下载nginx配套的证书,然后在nginx配置文件中,配置代理转发。
直接提供https服务: 使用应用本身的应用服务器开启https的服务访问方式。
生成https访问的ssl证书
在jdk\bin目录下,使用keytool.exe生成ssl签名证书
打开命令窗口,输入:keytool -genkey -keyalg RSA -alias ssl_alias -keystore C:/Users/Liunh/.ssh/ssl.keystore
指定的签名证书名字叫ssl.keystore,别名叫ssl_alias,如下图
application.properties https访问方式配置
server.ssl.enabled=true
server.ssl.key-store=classpath:ssl.keystore
server.ssl.key-store-password=0123789
server.ssl.key-store-type=JKS
server.ssl.key-alias=ssl_alias
使用代码配置将http访问自动跳转为https方式访问
@Configuration
public class TomcatConfiguration {
@Value("${server.port:8080}")
private int port;
@Value("${server.servlet.context-path:/*}")
private String path;
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(){
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern(path);
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector(){
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80);
connector.setSecure(false);
connector.setRedirectPort(443);
return connector;
}
}