Dotenvx Spring Boot和微信支付配置项集成实践
对接过微信支付的同学,应该都知道微信支付的配置还是有点麻烦的,这里以API证书认证模式为例, 来说明一下如何在Spring Boot中集成Dotenvx,保护你的微信支付配置项。
微信支付API证书认真模式,其中一个比较麻烦的就是如何保存和加载RSA私钥。RSA PRIVATE KEY是一个pem格式的文本文件, 通常我们会将其保存为一个文件,然后通过文件路径加载,如果线上部署的话,那么你需要将该文件上传到服务器上,并且保证该文件的权限安全。
pem文本,其实是可以保存到.env
和properties
文件中的,你做好格式转换即可,其实就是添加\n
换行符即可,但是有一个问题,
就是你要保证配置文件的安全性。
借助Dotenvx,我们就可以轻松地处理这个问题,这里假设你已经安装了Dotenvx JetBrains plugin,
我们只需要新建一个application.properties
文件,然后按下macOS: ⌘N
或Windows/Linux: Alt+Insert
快捷键,调出Generate
菜单,然后选择Insert Public Key
,
为当前application.properties
文件添加公钥,然后我们就可以添加加密变量了。
首先在application.properties
中添加微信API私钥的配置项名称,如wechat.private.key=
,然后将光标移动到等号后面,
然后你拷贝一下私钥的pem文件内容,然后回到IDEA中,按下Ctrl+V
粘贴,插件会自动将其加密,形成一个encrypted:xxxx
的格式的字符串。
以同样的方式,你可以添加其他的微信支付配置项,如APIv3密钥,证书序列号等,当然你也可以添加支付宝对应的配置项,最终效果如下:
通过Dotenvx,你不用担心多行文本的问题,加密时会自动转换为base64单行文本,当然也不用担心安全的问题,如服务器上如何保存私钥文件等问题,
现在所有的配置都在application.properties
文件中,直接提交到git仓库,同时随应用的fat jar进行发布。
回到部署环境,我们只需要设置一下DOTENV_PRIVATE_KEY
环境变量,Spring Boot应用在启动时,就会自动进行配置项解密,和普通的配置项一样使用。
借助Dotenvx,原本如支付宝、微信支付等安全比较高的场景,现在可以轻松搞定:
- 配置简单:不需要服务器上保存pem文件,保存为配置项即可
- 配置项简单:不用考虑多行文本的回车转移问题,统一加密后转换为单行base64文本
- 安全:不需要引入复杂的KMS系统等,直接使用Dotenvx保护配置项,服务器端启动时,只需要提供一个
DOTENV_PRIVATE_KEY
环境变量即可。 - 不给AI Agent可乘之机:配置项全程都没有被写入到
.md
,text
等文件中,添加到配置文件中即为加密状态,AI Agent无法读取到敏感信息。
当然这里以application.properties
为例,你也可以使用.env
文件,JetBrains各个IDE都有Dotenvx支持,体验都是一样的。
下次你的应用进行微信支付集成时,你和同事进行一场比赛,你使用Dotenvx,你同事使用普通配置文件或者KMS等,看谁更快、更安全地完成微信配置项的集成,肯定是你赢。