HTTPS:SpringBoot配置HTTPS链接+腾讯云免费SSL证书

一、背景

安全问题是一个应用从初生走向成熟的标志之一。随着各平台越来越严格的安全性要求(如苹果的应用商店、微信的小程序等要求必须使用HTTPS接入),网站的HTTPS化势在必行。

二、接入要求

要让一个服务接入HTTPS服务,至少需要以下几个步骤:

  1. 购买权威机构的SSL证书
  2. 将证书配置到服务器中(如启用SSL、绑定SSL端口等)。

三、免费SSL证书

功能齐全的SSL证书最低都是数千元每年,这对于个人开发者、或者创业公司来说并不划算。幸运的是腾讯云和阿里云都提供免费、正版的SSL证书(只能绑定一个域名)。

3.1 购买免费证书

腾讯云的申请地址是:https://buy.cloud.tencent.com/ssl

申请示意图如下:
HTTPS:SpringBoot配置HTTPS链接+腾讯云免费SSL证书_第1张图片

选择“域名型免费版(DV)”点击“快速免费申请”,并按要求填写后续信息(如绑定的域名、申请人个人资料等)即可。

3.2 证书文件说明

当申请审批通过后,即可在控制台看到自己的证书相关信息,包括证书文件、绑定域名等:
HTTPS:SpringBoot配置HTTPS链接+腾讯云免费SSL证书_第2张图片

点击上图中的下载按钮,即可下载证书文件。该压缩包内部按照服务器类型进行了划分,有Apache、tomcat、IIS等主流服务器的证书文件:
HTTPS:SpringBoot配置HTTPS链接+腾讯云免费SSL证书_第3张图片

由于tomcat是默认内置tomcat服务器,因此我们使用tomcat文件夹下的证书。其内容如下所示:
在这里插入图片描述

其中jks即为证书文件,而keystorePass.txt文本文件中存储的是私钥,该文件的内容在配置SpringBoot的时候会使用到。

四、SpringBoot配置HTTPS

在SpringBoot应用中接入SSL证书并不复杂,只需要几行配置即可。整个过程可以分为证书文件引入、证书文件配置和端口映射3步:

4.1证书文件引入

将jks证书文件放到application.propertis配置文件相同的目录中:
HTTPS:SpringBoot配置HTTPS链接+腾讯云免费SSL证书_第4张图片

4.2配置SSL

在application.properties配置文件中添加如下几行配置:

#配置SSL
server.port=443
server.ssl.key-store =classpath:***.*******.com.jks
server.ssl.key-store-password=********
server.ssl.keyStoreType= JKS
  1. 其中port指定了SSL监听的端口,只有访问该端口才会采用https方式。该端口可以随意指定,不会冲突即可。
  2. key-store制定了证书文件的完整路径名。注意classpath:标志必不可少哦,否则到服务器上会提示证书文件找不到。
  3. key-store-password指定了私钥,即keystorePass.txt中的内容。
  4. KeyStoreType指定证书文件的类型,jks证书文件的类型即是JKS。

到了这里,实际上你的应用已经能够使用HTTPS服务了,如访问“www.domain.com:443/demo” 则会自动使用https服务。而如果想要其他端口也使用https服务,则还需要第三步:端口映射。

4.3端口映射

在SpringBoot的启动类*Application文件中添加如下配置:

public EmbeddedServletContainerFactory servletContainer() {
		TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
			@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(httpConnector());
		return tomcat;
	}

	@Bean
	public Connector httpConnector() {
		Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
		connector.setScheme("http");
		connector.setPort(8080);   //初始端口
		connector.setSecure(false);
		connector.setRedirectPort(443);  //映射端口
		return connector;

这部分代码实际上和SSL没有关系,它的作用仅仅是将所有对8080端口的访问重定向到443端口。而443端口又恰巧是我们的SSL端口,因此这样就能让8080端口也享受https服务。

五、总结
实际上服务器接入SSL服务,尤其是SpringBoot接入还是非常简单的。只要有了证书文件,那么仅仅只需要4行配置就可以让我们的SpringBoot应用接入SSL,使用HTTPS服务。

在接入的过程中有以下几点需要注意:

  1. server.ssl.key-store =classpath:.****.com.jks中的classpath:切记不可忘记,否则定位不到证书文件。
  2. keystorePass.txt中的私钥要妥善保存,万万不能泄露。
  3. 端口映射可有可无,我的应用中直接将server.port设置为9999,然后应用也访问该接口,直接使用SSL服务。

你可能感兴趣的:(WEB——SpringBoot,学习——常见问题)