背景
因公司安全基线需求,需要对一些落库值进行加密处理。
在之前项目的方案里,是通过 AES256 做了一些自定义处理,对值进行加密,其中密钥和偏移量都是由运维同事维护的。
为了更加安全,公司层面直接使用了阿里云的 KMS 服务。
跟阿里云业务人员沟通之后,最终决定使用企业版KMS:DKMS 。
然而,官方只有 Java 版本的 SDK 。
SDK实现
传送门
参考了官方 KMS 的 SDK 之后,使用了其一些类库,实现了 PHP 版本的 DKMS SDK 。
TIPS:仅实现了 encrypt 和 decrypt 两个接口。
protubuf
由于对方接口要求接收 protubuf 格式的数据,这里引入了相关的 google/protobuf 的类库。
当然,若环境本身已经安装了相关类库,也是可以的。
TIPS:若 php 的版本小于 7 ,不建议环境层面安装 protobuf 相关扩展。(因为部分方法不可用)。
同时,若环境层面有相关扩展,且 SDK 中也引入了相关类库,程序会优先使用环境层面的扩展。
cacert
可以从官方下载相关 ca证书 用于认证。
但是,ca证书 并不是每个环境都能校验通过,比如官方的 php:5.6-fpm-alpine 和 php:7.4.16-fpm-alpine 使用的 curl 类库依赖的 lib 库不同,最终导致在某些环境下认证失败。
最终不得不默认不验证。
laravel
传送门
由于公司主要以 laravel 框架为准,故这里也开发了 laravel 版本的 SDK 。
最后
使用 DKMS 的整体体验不是很好,主要是没有 SDK 。
阿里云的业务人员虽然给了一个接口文档,但上面的一些介绍和 SDK(Java) 的有些许出入,最后还是通过阅读 Java 版本的 SDK 写出来的。
同时,其 ca证书 也给我造成了不少麻烦,最终也是以忽略验证结尾的。
最后,就是 PHP 版本的相关类库明显写的没那么用心,有些参数设置了跟没设置是一样的。
有兴趣的朋友可以自行看源码。
|