要使用https首先我們需要有證書,由於我們自己生成的證書會被多數瀏覽器不信任,所以我們採用申請的免費證書來演示。
一、先來說一說如何申請證書吧
1.登錄騰訊雲,選擇雲產品——>SSL證書管理
2.點擊申請證書,選擇亞洲誠信,按要求填寫完信息,提交後大約十分鐘,證書會發到你的郵箱
二、現在我們來爲項目配置https
1.下載你所需要類型的證書,並將其放入項目resources目錄下
Windows IIS下的數字證書格式一般爲.pfx
Java tomcat 下的數字證書格式一般爲.jks或.store
Apache和nginx一般是.pem
2.打開application.properties配置文件,添加如下配置
#端口號
server.port=443
#你生成的證書名字
server.ssl.key-store=classpath:放在resources下證書的名字
#密鑰庫密碼
server.ssl.key-store-password=申請證書時添加的祕鑰庫口令
server.ssl.keyStoreType=JKS
這樣我們的https就配置好了,將項目放到申請證書時填入的域名解析到的服務器上進行測試
三、當用戶訪問http端口的時候,我們需要重定向到https
在啓動類中添加如下兩個方法,更改tomcat配置
@Bean
public ServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
return tomcat;
}
/**
* 讓我們的應用支持HTTP是個好想法,但是需要重定向到HTTPS,
* 但是不能同時在application.properties中同時配置兩個connector,
* 所以要以編程的方式配置HTTP connector,然後重定向到HTTPS connector
* @return Connector
*/
private Connector initiateHttpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
connector.setPort(80); // http端口
connector.setSecure(false);
connector.setRedirectPort(443); // application.properties中配置的https端口
return connector;
}