1.申请SSL 免费证书
首先去腾讯云或者阿里云申请免费ssl证书,以阿里云云为例,不建议自己生成,因为没办法测试发布环境的效果,填写个人信息,最后提示审核中才是申请成功,审核比较快,半小时就通过了。
2.修改springboot配置文件application.properties
新建springboot项目,将上一步生成的keystone文件复制到项目的根目录,在application.properties添加如下配置
server.port=443 #https 默认端口
server.port.http=80 #http 端口,这样网站不用加端口访问
server.ssl.key-store=classpath:*************.pfx ##证书文件
server.ssl.key-store-password=******** ##证书密码,一般为下载文本里面的内容
server.ssl.keyStoreType=PKCS12 ##pfx文件适用格式
3.http访问自动转https访问
向spring容器中注入Bean,代码如下
import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ConnectorConfig {
@Value("${server.port.http}")
private int serverPortHttp;
@Value("${server.port}")
private int serverPortHttps;
@Bean
public ServletWebServerFactory servletWebServerFactory() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection securityCollection = new SecurityCollection();
securityCollection.addPattern("/*");
securityConstraint.addCollection(securityCollection);
context.addConstraint(securityConstraint);
}
};
factory.addAdditionalTomcatConnectors(redirectConnector());
return factory;
}
private Connector redirectConnector() {
Connector connector = new Connector(Http11NioProtocol.class.getName());
connector.setScheme("http");
connector.setPort(serverPortHttp);
connector.setSecure(false);
connector.setRedirectPort(serverPortHttps);
return connector;
}
}
4.通过域名访问失败原因及解决办法
1.域名未配置解析,去域名管理配置解析,10分钟后通过ping 域名看是否显示ip,显示则解析成功!
2.域名未认证,去域名管理上传个人信息进行域名实名!
3.域名已实名但未网站未备案,解决办法去进行网站实名,使用腾讯云小程序认证进行icp备案即可!可以通过域名访问但必须加上自定义端口才行,不能使用8080或443等默认端口,否则提示连接已重置!
4.设置允许访问端口