您的位置:首页 > 编程语言 > Java开发

Springboot2.1.5项目配置启用HTTPS

2019-06-25 15:43 337 查看

Springboot2.1.5项目配置Https

  • 2.生成keystore
  • 3.项目配置测试
  • 4.浏览器端安装证书
  • Springboot2.1.5项目配置启用HTTPS

    1.openssl生成证书

    找一台linux机器, 利用openssl生成根证书,首先修改openssl.cnf配置文件(默认在/etc/pki/tls目录下)

    cp /etc/pki/tls/openssl.cnf /etc/pki/CA
    cd /etc/pki/CA
    vim openssl.cnf

    (1) 修改openssl.cnf

    #确保req下存在以下2行(默认第一行是有的,第2行被注释了)
    [ req ]
    distinguished_name = req_distinguished_name
    req_extensions = v3_req

    #确保req_distinguished_name下没有 0.xxx 的标签,有的话把0.xxx的0. 去掉

    #新增最后一行内容 subjectAltName = @alt_names(前2行默认存在)
    #新增 alt_names,注意括号前后的空格,IP.x 的数量可以自己加

    注意,此处如果是域名要配置DNS.1 = localhost, 此处是ip所以按上述配置

    保存退出.
    openssl.cnf中会要求部分文件及目录存在:

    mkdir -p {certs,crl,newcerts,private}
    touch index.txt
    echo 00 > serial

    (2) 生成证书并签名

    生成ca.key并自签署
    openssl req -new -x509 -days 365 -keyout ca.key -out ca.crt -config openssl.cnf

    生成server.key
    openssl genrsa -out server.key 2048

    生成证书签名请求(注意这个Common Name也要在openssl.cnf的DNS.x中配置的)
    openssl req -new -key server.key -out server.csr -config openssl.cnf

    使用自签署的CA,签署server.scr
    openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -extensions v3_req -config openssl.cnf

    server.crt server.key就是web服务器(如nginx)中使用的文件

    2.生成keystore

    通过keytool -genkey alias tomcat生成的.keystore已经过时了,不推荐

    openssl pkcs12 -export -inkey server.key -in server.crt -out tomcat.p12 -name ‘tomcat’

    当前目录下会生成一个tomcat.p12文件,即证书文件

    3.项目配置测试

    目前springboot2.1.5自带的tomcat配置ssl只支持Http11NioProtocol(默认)和Http11Nio2Protocol,Http11AprProtocol不支持,下面以Http11NioProtocol为例介绍

    将生成的tomcat.p12文件放到项目路径下

    yml配置

    # 证书目录
    server:
    ssl:
    key-store: tomcat.p12
    #你之前填好的密码
    key-store-password: llspace
    keyStoreType: PKCS12
    keyAlias: tomcat
    port: 443

    配置类

    /**
    * <p>@filename SSLConfig</p>
    * <p>
    * <p>@description ssl配置类</p>
    *
    * @author llspace
    * @version 1.0
    * @since 2019/6/25 10:00
    **/
    @Configuration
    public class SSLConfig {
    
    @Bean
    public TomcatServletWebServerFactory servletContainer() {
    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(initHttpConnector());
    return tomcat;
    }
    
    /*
    * 配置默认的http 8080跳转到https 8443
    */
    private Connector initHttpConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    connector.setScheme("http");
    connector.setPort(80);
    connector.setSecure(false);
    connector.setRedirectPort(443);
    return connector;
    }
    
    }

    创建测试访问接口

    /**
    * <p>@filename TestController</p>
    * <p>
    * <p>@description 测试类</p>
    *
    * @author llspace
    * @version 1.0
    * @since 2019/6/25 10:40
    **/
    @RestController
    @RequestMapping("/test")
    public class TestController {
    
    @RequestMapping("/helloHttps")
    public String helloHttps(){
    return "hello https";
    }
    
    }

    4.浏览器端安装证书

    将生成的ca.crt安装到浏览器端即可,注意选择安装到受信任的根证书颁发机构

    启动项目,浏览器端测试访问

    OK, 配置成功!有兴趣的自己动手试试吧!

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: