参考文档:
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、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
3.2 Could not find certificate file or the certificate is invalid.
可以在下面的报错前打断点跟一下。 一般是 密码没有或错误,路径不对