四时宝库

程序员的知识宝库

springboot配置ssl证书(开启https)

https会使我们的网站更加安全,起码看起来似乎好一些。这里分享Spring Boot配置https的步骤。

需要有ssl证书

1.1可以在阿里云个人用户申请免费证书,申请方法可以查看此链接https://developer.aliyun.com/article/766913,然后在我们的控制台-SSL证书里面可以添加免费证书:

然后点证书申请:

申请通过之后可以下载证书,然后会得到个压缩包,里面有jks证书密码

1.2可以使用java自带的生成数字证书

数字签名的生成:进入jdk的安装目录,bin文件夹下,打开命令窗口输入一下命令生成数字证书: keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore D:\javasign.p12 -validity 365

命令含义如下:

  • genkey 表示要创建一个新的密钥
  • alias 表示 keystore 的别名
  • keyalg 表示使用的加密算法是 RSA ,一种非对称加密算法
  • keysize 表示密钥的长度
  • keystore 表示生成的密钥存放位置
  • validity 表示密钥的有效时间,单位为天

执行完命令生成证书在d盘目录有一个javasign.p12文件,即为生成的证书文件,拷贝此证书文件放在resource目录下,并配置application.properties文件ssl证书配置,如下:

其中alias为证书别名,key-store表示密钥文件名,key-store-password就是在cmd命令执行过程中输入的密码。

启动项目

启动项目,在浏览器输入https://127.0.0.1:18080/mock1/crm.js.intf.qryCustomer,会出现下面显示,点击高级-继续即可

最终可以使用HTTPS访问:

但是当我们使用HTTP访问的时候,就会出现问题

解决上面的问题需要添加配置文件:

package com.test.vrtmp.config;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
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;

/**
 * @Author ChengWang
 * @Date 2023/11/2
 */
//@Configuration
public class HttpConfig {
    /**
     * http自动跳转https
     */
    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @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(redirectConnector());
        return tomcat;
    }
    private Connector redirectConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8080); // 原http端口
        connector.setSecure(false);
        connector.setRedirectPort(18080); // 跳转的https端口,也就是我们配置文件中配置的项目端口
        return connector;
    }




}

项目改造支持https接口请求

postman请求用户开户接口,debug断点进入,执行到请求外部接口时,会走下面else分支:

继续请求会远程调用https接口:https://127.0.0.1:18080/mock1/crm.js.intf.qryCustomer,请求接口response结果正确。如下图:

查看红框圈的信息,我们已经基于https请求调用请求成功了。好啦,至此已经讲完ssl证书配置,希望可以帮助大家~

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接