一、前言
HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
二、SpringBoot中配置Https
1.采用SpringBoot的版本为
org.springframework.boot
spring-boot-starter-parent
2.1.9.RELEASE
2.在配置文件中.properties,生成证书,可以使用签名或者从SSL证书授权中心获得的。
JDK中keytool是一个证书管理工具,可以生成自签名证书。 指定的名字叫test.jks 别名叫test,密码自己设置123456,最后那个直接按得回车
keytool -genkey -keyalg RSA -keysize 1024 -validity 365 -dname "CN=spdb, OU=spdb,O=spdb, L=shanghai, ST=shanghai, C=CN" -alias csii_key -keypass 888888 -keystore test.jks -storepass 123456
https.path=/home/test.jks
3.在Application中配置使用SpringBoot 2.0以上版本的相应的配置
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
//下面是2.0的配置,1.x请搜索对应的设置
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
tomcat.addAdditionalTomcatConnectors(createHTTPConnector());
return tomcat;
}
private String httpsPath;
@Value("${https.path}")
public void setBasePath(String httpsPath) {
this.httpsPath = httpsPath;
}
private int httpsPort;
@Value("${https.port}")
public void setHttpsPort(int httpsPort) {
this.httpsPort = httpsPort;
}
private Connector createHTTPConnector() {
//以下配置可以迁移至配置文件中
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
connector.setScheme("https");
connector.setSecure(true);
connector.setPort(httpsPort);
protocol.setSSLEnabled(true);
protocol.setKeystoreFile(httpsPath);
protocol.setKeystorePass("123456");
protocol.setKeyPass("888888");
return connector;
}
4.完成对https的相关的配置