一般来说,服务中心注册的服务,消费者可以无障碍的调用生产者。也就是说,默认是没有接口认证与鉴权的。关乎这方面的需求,servicecomb也提供了相关的实现方法。
本文介绍两种实现方式, 自带的RSA认证以及servicecomb-fence组件认证
RSA认证方法
用户可以通过简单的配置,开启服务间的RSA认证,以保障服务接口的安全性。具体操作如下:
1. 引入依赖
<dependency>
<groupId>org.apache.servicecomb</groupId>
<artifactId>handler-publickey-auth</artifactId>
</dependency>
2. 设置配置项
消费者:
servicecomb:
handler:
chain:
Consumer:
default: auth-consumer
生产者:
servicecomb:
handler:
chain:
Provider:
default: auth-provider
- 微服务启动时, 生成密钥对,并将公钥上传到service-center中
- 消费者在访问提供者前,使用私钥对消息进行签名
- 提供者从service-center获取消费者公钥,并对消息进行校验
3. 启动并测试服务
采用samples中的BMI例子来测试,该例子分为consumer和provider,consumer提供身高和体重,经过provider提供的计算方法,得到具体的BMI结果,返回到consumer并展示在前端节点。
如果将consumer的auth-consumer的handler去掉,就可以看到,由于缺少认证,请求会失败 认证失败
4. RSA认证
根据公钥认证描述,服务在往服务中心注册时,会生成密钥对并上传密钥,不过我找了一圈服务的日志,并没有密钥生成和上传日志,反而找到如下日志,显示说key文件不存在?warning日志就不管了? 那不行!
2020-06-12 01:42:05.620 WARN 23920 --- [ main] o.a.s.foundation.vertx.VertxTLSBuilder : keyStore [server.p12] file not exist, please check!
2020-06-12 01:42:05.621 WARN 23920 --- [ main] o.a.s.foundation.vertx.VertxTLSBuilder : trustStore [trust.jks] file not exist, please check!
2020-06-12 01:42:05.666 WARN 23920 --- [ main] o.a.s.foundation.vertx.VertxTLSBuilder : keyStore [server.p12] file not exist, please check!
2020-06-12 01:42:05.666 WARN 23920 --- [ main] o.a.s.foundation.vertx.VertxTLSBuilder : trustStore [trust.jks] file not exist, please check!
根据资料keytool生成证书 ,我在环境上生成了相关证书,主要命令如下:
//会在root目录生成trust.jks, 如果不指定名字,默认.keystore
keytool -genkeypair -keystore trust.jks
//使用keytool将jks格式转换为p12格式
keytool -importkeystore -srckeystore /root/trust.jks -destkeystore /root/server.p12 -deststoretype pkcs12
将生成的两个文件,也就是上述warning日志提示的两个文件trust.jks
和server.p12
复制到项目的resources目录下
再次启动服务....
发现日志还是提示文件不存在。 纳尼?
由于项目对于RSA认证不是很急迫,暂时先不再深究了。
关于另一种实现auth的方法,下篇文章会记录
网友评论