名词解析:
超文本传输安全协议(HyperText Transfer Protocol Secure),缩写:HTTPS;常称为 HTTP over TLS、HTTP over SSL 或 HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。这个协议由网景公司(Netscape)在 1994 年首次提出,随后扩展到互联网上。
默认端口:443
一、springboot开启https
1.获取证书
shell(cmd,powershell..)输入如下命令,并且按照示例进行操作,前提,正确配置java环境变量。
keytool -genkey -alias tomcat -keyalg RSA -keystore ./server.keystore
示例:
输入密钥库口令:${自己写}
再次输入新口令:${自己写}
您的名字与姓氏是什么?
[Unknown]: ${自己写}
您的组织单位名称是什么?
[Unknown]: ${自己写}
您的组织名称是什么?
[Unknown]: ${自己写}
您所在的城市或区域名称是什么?
[Unknown]: ${自己写}
您所在的省/市/自治区名称是什么?
[Unknown]: ${自己写}
该单位的双字母国家/地区代码是什么?
[Unknown]: CN
CN=kaibowang, OU=yuxuelian, O=yuxuelian, L=chengdu, ST=chengdushi, C=china是否正确?
[否]: y
输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车):
再次输入新口令:
Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore C:\Users\Administrator\.keystore -destkeystore C:\Users\Administrator\.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
2.设置ssl信息
在Springboot资源路径,如resources中的application.yml中如下配置:
server:
# https协议端口
port: 443
ssl:
protocol: TLS
key-store: classpath:server.keystore
key-alias: tomcat
enabled: true
key-store-password: 123456
key-store-type: JKS
3.重新mvn clean,install 重启项目验证。
二、同时开启http与https
Springboot1.x与2.x设置方式存在区别。
EmbeddedServletContainerFactory 这个类在Springboot2.x版本中,已经替换为 TomcatServletWebServerFactory
1.Springboot1.x
@Configuration
public class TomcatConfig {
@Value("${server.http.port}")
private int httpPort;
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer container) {
if (container instanceof TomcatEmbeddedServletContainerFactory) {
TomcatEmbeddedServletContainerFactory containerFactory =
(TomcatEmbeddedServletContainerFactory) container;
Connector connector = new Connector(TomcatEmbeddedServletContainerFactory.DEFAULT_PROTOCOL);
connector.setPort(httpPort);
containerFactory.addAdditionalTomcatConnectors(connector);
}
}
};
}
}
2.Springboot2.x
@Value("${server.http.port}")
private int httpPort;
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createStandardConnector());
return tomcat;
}
private Connector createStandardConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setPort(httpPort);
return connector;
}
其中,如果需要将http请求转发到https,住家如下设置:
connector.setScheme("http");
connector.setSecure(true); //设置false重定向容易出错,推荐设置为true
connector.setRedirectPort(443);//@value获取更佳
done