1. 通过jdk生成证书
找到自己jdk安装目录,在bin目录下执行cmd界面。
keytool -genkeypair -alias sslkey -keyalg RSA -keystore D:\sslkey.key
其中-alias后的sslkey是证书的别名,RSA是加密算法,-keystore后是输出证书的路径所在
这其中的密钥口令需要记住后面是需要用到的。这个生成的证书是不被官方认证的,当访问的时候浏览器会提示你的连接不是私密连接。可以去购买一个。
2. 配置SSL
将生成的证书复制到项目的resources下。并在application.yml文件中配置(http中的默认端口是80,而https中的默认端口是443)。这里需要注意如果配置443端口被占用,有可能是装了虚拟机vMware占了443端口。可以先去关闭该端口。
server:
port: 443
ssl:
# 证书路径
key-store: classpath:tomcat.key
key-store-type: JKS
key-alias: tomcat
# 配置密码,就是在生成证书的时候输入的密码
key-store-password: dtzhtxm
接下来在启动类配置同时支持http和https访问:
/**
* http重定向到https
*
* @return
*/
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
// Connector监听的http的端口号
connector.setPort(80);
connector.setSecure(false);
// 监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(443);
return connector;
}
server.port端口配置需要与connector.setRedirectPort一致。