美文网首页
dubbo开启TLS认证(ssl)

dubbo开启TLS认证(ssl)

作者: 赵荣晖 | 来源:发表于2022-03-16 10:53 被阅读0次

    参考文档:
    1、https://dubbo.apache.org/zh/docs/advanced/tls/
    2、https://juejin.cn/post/6889066697262071821

    项目需要使用Dubbo的TLS,但网上相关资料非常少(能找到的都放到了上面)。撸了点源码,记录实现过程,以供参考。

    一、生成秘钥

    openssl genrsa -out E:/1/dubbo/privkey.pem 1024
    openssl req -new -key E:/1/dubbo/privkey.pem -out E:/1/dubbo/cert.csr
    openssl req -new -x509 -key E:/1/dubbo/privkey.pem -out E:/1/dubbo/cacert.pem -days 1095
    

    执行情况如下:


    1.png

    二、以下说明双向认证

    1、provider
    1.1 增加配置,启动ssl:dubbo.prorocpl.ss-enabled=true。

    server:
      port: 8861
    dubbo:
      # 配置服务信息
      application:
        name: dubbo-provider
        # 禁用QOS同一台机器可能会有端口冲突现象
        qos-enable: false
        qos-accept-foreign-ip: false
      # 配置注册中心
      registry:
        address: nacos://10.17.22.10:8848
      # 设置协议-协议由提供方指定消费方被动接受
      protocol:
        name: dubbo
        port: 20888
    # 启动ssl
        ssl-enabled: true   
    spring:
      main:
        # 解决Bean重复定义问题
        allow-bean-definition-overriding: true
    

    1.2 启动类中增加SslConfig()

    @Bean
    public SslConfig sslConfig() {
        SslConfig sslConfig = new SslConfig();
        // 单向开始
        //        sslConfig.setServerTrustCertCollectionPath("F:/spring-boot-dubbo-demo-master/cacert.pem");
        // 单向结束
        sslConfig.setServerKeyCertChainPath("F:/spring-boot-dubbo-demo-master/cacert.pem");
        sslConfig.setServerPrivateKeyPath("F:/spring-boot-dubbo-demo-master/privkey.pem");
        //        sslConfig.setServerKeyPassword("123456");
        sslConfig.setServerTrustCertCollectionPath("F:/spring-boot-dubbo-demo-master/cacert.pem");
    
        return sslConfig;
    }
    

    2、consumer
    2.1 、 增加配置,启动ssl:dubbo.prorocpl.ss-enabled=true。

    server:
      port: 8862
    dubbo:
      # 配置服务信息
      application:
        name: dubbo-consumer
        # 禁用QOS同一台机器可能会有端口冲突现象
        qos-enable: false
        qos-accept-foreign-ip: false
      # 配置注册中心
      registry:
        address: nacos://10.17.22.10:8848
      protocol:
        # 这里是重点
        ssl-enabled: true
      # 设置超时时间
      consumer:
        timeout: 4000
    spring:
      main:
        # 解决Bean重复定义问题
        allow-bean-definition-overriding: true
    

    2.2 、启动类中增加SslConfig

    @Bean
    public SslConfig sslConfig() {
        SslConfig sslConfig = new SslConfig();
    
        // 单向开始, 如果被认证方是consumer, 设置下面两个
        //        sslConfig.setClientKeyCertChainPath("F:/spring-boot-dubbo-demo-master/cacert.pem");
        //        sslConfig.setClientPrivateKeyPath("F:/spring-boot-dubbo-demo-master/privkey.pem");
        // 单向结束
    
        sslConfig.setClientKeyCertChainPath("F:/spring-boot-dubbo-demo-master/cacert.pem");
        sslConfig.setClientPrivateKeyPath("F:/spring-boot-dubbo-demo-master/privkey.pem");
        //       sslConfig.setClientKeyPassword("123456");
        sslConfig.setClientTrustCertCollectionPath("F:/spring-boot-dubbo-demo-master/cacert.pem");
    
        return sslConfig;
    }
    

    三、过程中常见报错

    3.1 ssl支持的秘钥格式

    key – a PKCS#8 private key
    keyCertChain – the X.509 certificate chain
    
    2.png

    3.2 Could not find certificate file or the certificate is invalid.
    可以在下面的报错前打断点跟一下。 一般是 密码没有或错误,路径不对


    3.png

    相关文章

      网友评论

          本文标题:dubbo开启TLS认证(ssl)

          本文链接:https://www.haomeiwen.com/subject/mfqpdrtx.html