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

跟風遠走 提交于 2020-08-14 16:11:24

一、背景

随着各平台越来越严格的安全性要求(例如微信小程序对接必须使用HTTPS接入),网站的HTTPS化势在必行。

二、接入要求

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

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

三、免费SSL证书申请

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

申请示意图如下:
免费域名申请图

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

3.2 证书文件说明

当申请审批通过后,即可在控制台看到自己的证书相关信息,包括证书文件、绑定域名等:
证书相关信息

点击上图中的下载按钮,即可下载证书文件。该压缩包内部按照服务器类型进行了划分,有Apache、tomcat、IIS等主流服务器的证书文件:
在这里插入图片描述

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

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

四、JeecgBoot配置HTTPS

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

4.1证书文件引入

将jks证书文件放到application.propertis配置文件相同的目录中:
证书文件引入

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服务了,如访问“https://***.jeecg.com” 则会自动使用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服务。

4.4 Maven build排除jks文件

		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>true</filtering>
				<excludes>
					<exclude>bootapi.jeecg.com.jks</exclude>
				</excludes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<filtering>false</filtering>
				<includes>
					<include>bootapi.jeecg.com.jks</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.xml</include>
					<include>**/*.json</include>
					<include>**/*.ftl</include>
				</includes>
			</resource>
		</resources>

 

五、总结


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

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

  1. server.ssl.key-store =classpath:.****.com.jks中的classpath:切记不可忘记,否则定位不到证书文件。
  2. keystorePass.txt中的私钥要妥善保存,万万不能泄露。
  3. 端口映射可有可无,我的应用中直接将server.port设置为9999,然后应用也访问该接口,直接使用SSL服务。
  4. Maven build排除jks文件很重要,不然启动会提示Invalid keystore format错误
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!