dubbo开启TLS认证(ssl)

2022-03-16  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读