SSL協議分爲兩層:SSL記錄協議,它創建在可靠的傳輸協議(如TCP)之上,爲高層協議提供數據封裝、壓縮、加密等基本功能的支持。SSL握手協議,它創建在SSL記錄協議之上。用於在實際數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。java
基於B/S的Web應用中,是經過HTTPS來實現SSL的。HTTPS是以安全爲目標的HTTP通訊,簡單講是HTTP的安全版,即在HTTP下加入SSL層,HTTPS的安全基礎是SSL。
!web
使用SSL首先須要一個證書,這個證書既能夠是自簽名的,也能夠是從SSL證書受權中心得到的。本案例演示自簽名證書的生成。算法
JDK或JRE中的keytool工具是一個證書管理工具,能夠用來生成自簽名證書。spring
在命令行輸入如下內容apache
此時生成一個.keystore文件,這就是咱們要用的證書文件瀏覽器
3、將.keystore證書文件(複製到項目的application.properties同級目錄)tomcat
XXXApplication.java安全
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;網絡
@SpringBootApplicationapp
public class WebchatApplication {
public static void main(String[] args) {
SpringApplication.run(WebchatApplication.class, args);
}
/**
* 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(8080);
connector.setSecure(false);
//監聽到http的端口號後轉向到的https的端口號
connector.setRedirectPort(8044);
return connector;
}
}
啓動成功後,打開Chrome瀏覽器,輸入SpringBoot的URL映射,能夠看到彈出了證書不安全的提示,單擊【高級】-->【繼續前往】便可正常打開網址連接了。
注意:因爲JDK生成的自簽名證書沒有通過CA機構認證,因此會提示不安全。