SpringBoot配置HTTPS
in Java with 4 comments
Read: 3,852

SpringBoot配置HTTPS

in Java with 4 comments

由于微信小程序服务端的要求,对于服务端要求必须是域名而且是HTTPS,所以最近就研究了一把

作为Android开发的我,仅仅对服务端有一定基础上的研究,就是会用些简单的用法,比如吹吹牛逼,砍砍大山

由于SSL验证分为两类:密钥库类型和证书类型,但是配置是一样的
由于我们服务端用的java,所以我们选择了密钥库的加密方式

测试密钥库

申请密钥库

keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650

配置密钥库

在:application.properties进行配置

server.port=443
##签名文件
server.ssl.key-store=keystore.p12
##签名密码
server.ssl.key-store-password=111111
##签名类型
server.ssl.keyStoreType=PKCS12
##签名别名
server.ssl.keyAlias:tomcat

设置Https -> Http

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

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(8080);
        connector.setSecure(false);
        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(8443);
        return connector;
    }

这个时候,当我们访问8080的时候就自动转到了8443的端口,在这里存在一个默认关系:

8843 -> 443
8080 -> 80

这个关系主要在服务端体现比较明显


正式密钥库

域名证书申请+域名解析

这个地方我们主要是对域名进行解析到ip,这个地方有个坑,就是你的阿里云的域名是无法解析到腾讯的服务器,具体可能是disqus和wanwang的区别吧,域名解析完后我们就可以去腾讯SSL证书中去申请免费的证书啦

密钥库分类

当我们下载完证书后,会看到各种服务器的证书,所以在这里我们选择了Tomcat下的密钥库

配置文件配置

我们需要在application.properties进行配置,这里我们一定要留意,我们申请的密钥库tomcat服务器下密钥库类型为:JKS

server.port=443
server.ssl.key-store=
server.ssl.key-store-password=
server.ssl.keyStoreType=JKS
server.ssl.keyAlias:

这样配置后,我们就可以进行打包啦,打包后放到服务器后,记得把证书也同时上传,否则是无法运行的


服务器配置

当然,我们的服务器选择了CentOs6.8的操作系统,服务器只安装了一个java环境,我们在通过maven打包后,我们上传到了服务器,然后通过java -jar xxx 进行运行

在这里踩了一些坑,到最后总结了下,就是我的密钥库类型选错了,所以导致了我一直没法运行;

关于端口的解释:我们在配置文件中配置了端口为443,因为https的默认端口为443
关于网络,有一些默认的端口,这些端口是不需要加端口也可以运行的

在这里:我们通过代码控制后,当我们访问8080->80,我们进行重定向到8443,然后因为服务器端口的映射,所以8443->443
这就是前面所解释的:

8080 -> 80
8443 -> 443

扩展

这个扩展主要是我在期间踩的坑
在我没有发现问题的时候,我想到其他的解决方案,我用nginx做反向代理,然后我在nginx去配置证书,emm,最后结果行不通,WTF,当时绝望死了,真TM难玩,还不如搬砖呢~~


相关参考资料:

Responses
  1. 感谢分享,正好需要

    Reply
  2. 博客开源吗

    Reply
    1. @GitHub

      开源的~

      Reply
  3. 66

    Reply