Boot++:SpringBoot2.x配置HTTPS访问

SpringBoot2.x配置HTTPS访问,总体上可以分为两大步

一、生成SSL证书

二、配置HTTPS访问

生成SSL证书:

取得SSL证书的方法有:(1)阿里云购买免费的ssl证书 (2)用命令生成ssl证书

因为在阿里云购买后需要填写域名,所以这里选择第(2)种方式:用命令生成ssl证书

1):新建一个证书目录,例如D:\sslca,打开cmd命令窗口,切换到D:\sslca

C:\Users\Administrator>d:

D:\>cd D:\sslca
 
D:\sslca>

2):命令生成证书

keytool -genkey -alias tomcat -keypass 12345678 -keyalg RSA -keysize 2048 -validity 365 -keystore ./tomcat.keystore -storepass 12345678

过程如下:提示问题的回答可以任意填写

D:\sslca>keytool -genkey -alias tomcat -keypass 12345678 -keyalg RSA -keysize 2048 -validity 365 -keystore ./tomcat.keystore -storepass 12345678
 
您的名字与姓氏是什么?
 
  [Unknown]:  liang
 
您的组织单位名称是什么?
 
  [Unknown]:  aa
 
您的组织名称是什么?
 
  [Unknown]:  bb
 
您所在的城市或区域名称是什么?
 
  [Unknown]:  cc
 
您所在的省/市/自治区名称是什么?
 
  [Unknown]:  dd
 
该单位的双字母国家/地区代码是什么?
 
  [Unknown]:  Ch
 
CN=liang, OU=aa, O=bb, L=cc, ST=dd, C=Ch是否正确?
 
  [否]:  y

Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore ./tomcat.keystore -destkeystore ./tomcat.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

D:\sslca>

在D:\sslca生成了tomcat.keystore文件:

 

3):生成客户端证书

keytool -genkey -alias client -keypass 12345678 -keyalg RSA -keysize 2048 -validity 365 -storetype PKCS12 -keystore ./client.p12 -storepass 12345678

过程如下:提示信息的回答可以任意填写:

您的名字与姓氏是什么?
  [Unknown]:  aa
您的组织单位名称是什么?
  [Unknown]:  bb
您的组织名称是什么?
  [Unknown]:  cc
您所在的城市或区域名称是什么?
  [Unknown]:  dd
您所在的省/市/自治区名称是什么?
  [Unknown]:  Ch
该单位的双字母国家/地区代码是什么?
  [Unknown]:  Ch
CN=aa, OU=bb, O=cc, L=dd, ST=Ch, C=Ch是否正确?
  [否]:  y

在D:\sslca生成了client.p12文件:


配置HTTPS访问

1):打开已有的SpringBoot工程

2):将证书文件:client.p12复制到resources目录下

 

3):修改application.yml (注意:key-store:值的路径要注意按实际修改)

server:
ssl:
key-store: file:D:\OpenSSL\Secretkey\client.p12
key-store-password: 123456
key-store-type: PKCS12
key-alias: client
port: 8443 #注意,这里是https访问的的端口号
http:
port: 18093

4):修改启动类   添加servletContainer() 和 initiateHttpConnector() 两个方法,完整代码如下:

@Configuration
@PropertySource(ignoreResourceNotFound = true, value = {"classpath:config/core-settings.properties"})
public class PropertyConfig {

    @Value("${server.port}")
    private Integer httpsPort;
    @Value("${http.port}")
    private Integer httpPort;

    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        /**
         * springboot2 新变化
         */
        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(initiateHttpConnector());
        return tomcat;
    }

    private Connector initiateHttpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(httpPort);
        connector.setSecure(false);
        connector.setRedirectPort(httpsPort);
        return connector;
    }
}

HTTPS \ HTTP 都支持。

 

posted @ 2022-06-24 10:05  coding++  阅读(208)  评论(0编辑  收藏  举报