spring boot 通过jdk生成https证书

由于HTTPS 具有良好的安全性,在开发中得到了越来越广泛的应用,在微信公众号,小程序等都离不开HTTPS。对于个人而言,一个HTTPS的结果有点昂贵,国内开发服务器的厂商提供了免费的HTTPS证书,一个账户可以申请数个,不过在JDK中提供了一个java的数字证书管理工具,keytool在\jdk\bin目录中,通过这个工具可以生成一个数字证书,

keytool -getkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore sang.p12 -validity 365

如果这条指令无法生成可以自行查看网上的其他格式

命令解释:

-genkey 

-alias tomcathttps(别名) 

-keypass 123456(别名密码) 

-keyalg RSA(算法) 

-keysize 1024(密钥长度) 

-validity 365(有效期,天单位) 

-keystore sang.p12(指定生成证书的位置和证书名称) 

-storepass 123456(获取keystore信息的密码)

这个时候在bin目录下就有一个sang.p12文件,把它复制到rspring boot项目中的resources目录中

配置.properties/.yml文件,我这里配置.yml文件

代码解释:

ssl:
  key-store: classpath:sang.p12    秘钥文件的路径
  key-store-password: 123456       在cmd命令执行过程中输入的密码
  keyStoreType: PKCS12           格式
  keyAlias: tomcatHttps          别名

配置成功启动项目:访问:“https://localhsot:8808/index.html”,因为证书是自己生成的,不被游览器认可,此时添加信任继续前进

第一次访问游览器不认可,点击高级-->添加为信任继续访问就可以了

访问到了,再访问http看看

已经不能访问了,因为spring boot 不能同时在配置中启动HTTP和HTTPS,这个时候可以使用重定向,将HTTP重定向到HTTPS中

创建配置类MVCConfig 添加代码,

package com.example.demo.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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MVCConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
            @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);
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }
    @Bean
    public Connector createTomcatConnector(){
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8807);
        connector.setSecure(false);
        connector.setRedirectPort(8808);
        return  connector;
    }
}

这里首先配置一个TomcatServletWebServerFactory,然后添加一个Tomcat中的Connector(监听8807端口),并将请求转发到8808端口

配置完启动项目在游览器中输入“Http://localhost:8807/index.html”,就会自动重定向到Https://localhost:8808/index.html上了

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值