如何在springboot中引入https

通过上一篇文章大家心里面主要有一个概念,其实SSL + socket编程都是JDK基本的类库完成的。本章会讲解如何使用spring-boot 开发HTTPS的项目。代码在spring-soap-https-ssl-server

STEP-1 生成SSL证书

这一步可以省略,因为上一篇文章已经教会我们如何生成SSL证书了

STEP-2 在springboot程序中开启 https

默认speingboot程序的内嵌的tomcat容器是只有http协议的默认端口是8080.如果你想开启springboot内嵌的tomcat的https你要做点手脚了

pom

这里的pom其实很平常只要有web就好

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

application.yaml配置开启https

server.port: 8443
security.require-ssl: true
server.ssl.key-store: classpath:keystore.p12
server.ssl.key-store-password: 123456
server.ssl.keyStoreType: JKS
#server.ssl.keyStoreType: PKCS12
server.ssl.key-store-provider: SUN
server.ssl.keyAlias: moheqionglin

其中上面配置的关于证书的路径和证书的JKS等信息如何配置,是跟你的SSL证书有关系的。你可以敲如下命令获取你的SSL证书的信息。这里自己踩了一个很深的坑,很多百度来的甚至是google来的文章相互抄袭,或者没有深挖的就直接配置#server.ssl.keyStoreType: PKCS12 其实是错的。必须要用如下命令,看下到底如何配置

    keytool -list -keystore keystore.p12

    Enter keystore password:

    Keystore type: JKS
    Keystore provider: SUN

    Your keystore contains 1 entry

    moheqionglin, Jan 16, 2018, PrivateKeyEntry,
    Certificate fingerprint (SHA1): F6:26:18:EB:F2:12:04:82:86:04:10:99:E5:20:B1:BD:E6:91:25:B9

让用户输入http的时候,自动跳转的https

这一步是可选的。


     @Bean
        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(initiateHttpConnector());
            return tomcat;
        }

        private Connector initiateHttpConnector() {
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setScheme("http");
            connector.setPort(nonSslPort);
            connector.setSecure(false);
            connector.setRedirectPort(sslPort);

            return connector;
        }
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
慷慨打赏