Springboot配置HTTPS访问、兼容HTTP访问

配置HTTPS

    这里简单介绍keytool密钥生成

1、利用Keytool生成KeyStore文件

    java自带的Keytool可以生成SSL所需的密钥库、证书等文件,这里生成keyStore文件存储密钥,具体方式如下:

keytool -genkey -alias test -storetype PKCS12  -keypass test123 -keyalg RSA -keysize 1024 -validity 3650 -keystore D:/test.keystore -storepass test123
  • alias: 指定别名,区分不同条目
  • keysize: 密钥长度
  • keyalg: RSA公私钥算法
  • validity: 证书过期时间
  • keystore: 指定存储密钥库,若不存在会创建,若指定则在当前文件夹下生成。
  • storetype: 密钥库类型 JKS PKCS等
  • keypass:指定别名条目的密码(私钥的密码)
  • storepass: 指定密钥库的密码(获取keystore信息所需的密码)
  • 其它参数可参考官方文档:keytool-Key and Certificate Management Tool

2、导出证书:

    可根据以下命令导出证书,供客户端使用

keytool -export -alias test -file test.crt -keystore .	est.keystore

3、Springboot配置

server.ssl.key-store=classpath:test.keystore
server.ssl.key-store-password=test123
server.ssl.key-password=test123
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=test
server.ssl.enabled=true

    增加完上面的配置,在密钥库没问题的情况下,启动应用后就变为HTTPS访问了。

兼容HTTP

    由于某些接口不需要加密安全访问,需要增加HTTP兼容

1、增加配置

 @Value("${server.http.port}")
    private Integer port;
 @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        tomcat.addAdditionalTomcatConnectors(createStandardConnector());
        return tomcat;
    }

    private Connector createStandardConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setPort(port);
        return connector;
    }

    ps:这里需要额外配置HTTP的端口,server.port已经被HTTPS占用。

2、验证

    当看到以下打印后,证明已经配置成功: 2c48bf63.png

Curl测试https接口功能

curl -X POST "http://ip:port/v1" -H "token:xxx" -H "accept:*/*" -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" -d "name=xxx" -k

-k:跳过https验证,否则需要增加证书配置,只验证接口功能的话建议-k