前两天在阿里云买了个域名,送给了我一个免费的证书,闲来无事搞一搞https。
首先我们先要了解一下https是什么
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。https://www.cnblogs.com/wqhwe/p/5407468.html
每一个证书都对应一个域名,即使你的证书和秘钥被窃放到他自己的网站那也是无用的。
ok,因为我这里是从阿里云免费提供的一个https服务,所以我先下载下来。(一般从阿里云买的域名都会有一个免费开启SSL的证书 如图所示)
进去就可以去申请一个免费的SSL证书,有效期为一年。然后下载相对于的证书。我们这里是springboot项目,所以就下载tomcat版本。
下载完成之后,就是这样两个东西,一个是pfx的证书,一个是秘钥。
然后我们有了这两个东西,我们现在就去项目中去配置他们。
下面是application.properties配置文件
server.port=443
server.ssl.key-store=classpath:1552210_www.chuanzigeblog.com.pfx
server.ssl.key-store-password=H1c72FDq
httpPort=80
httpsPort=443
下面是启动类要配置的东西
@Value("${httpPort}")
private Integer httpPort;
@Value("${httpsPort}")
private Integer httpsPort;
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
@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(httpPort);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(httpsPort);
return connector;
}
配置完成之后我们就可以访问我们的项目了,看看是不是输入http也跳转到了https,而且连接也是安全的。