跳到主要内容

后台接入SSL证书

此文档是springboot接入SSL证书的配置方式,主要是将JeecgBoot的后台接入HTTPS服务! 除了这种方式,也可以通过nginx映射来配置ssl.

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

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

一、免费SSL证书申请

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

申请示意图如下

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

证书文件说明

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

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

由于tomcat是默认内置tomcat服务器,因此我们使用tomcat文件夹下的证书。其内容如下所示:

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

二、JeecgBoot配置HTTPS

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

1.证书文件引入

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

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服务,则还需要第三步:端口映射。

3.修改配置

4.端口映射(可以不做)

在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服务。

5.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错误