Skip to main content

Dotenvx Spring Boot和微信支付配置项集成实践

· 3 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

对接过微信支付的同学,应该都知道微信支付的配置还是有点麻烦的,这里以API证书认证模式为例, 来说明一下如何在Spring Boot中集成Dotenvx,保护你的微信支付配置项。

微信支付API证书认真模式,其中一个比较麻烦的就是如何保存和加载RSA私钥。RSA PRIVATE KEY是一个pem格式的文本文件, 通常我们会将其保存为一个文件,然后通过文件路径加载,如果线上部署的话,那么你需要将该文件上传到服务器上,并且保证该文件的权限安全。

pem文本,其实是可以保存到.envproperties文件中的,你做好格式转换即可,其实就是添加\n换行符即可,但是有一个问题, 就是你要保证配置文件的安全性。

借助Dotenvx,我们就可以轻松地处理这个问题,这里假设你已经安装了Dotenvx JetBrains plugin, 我们只需要新建一个application.properties文件,然后按下macOS: ⌘NWindows/Linux: Alt+Insert快捷键,调出Generate菜单,然后选择Insert Public Key, 为当前application.properties文件添加公钥,然后我们就可以添加加密变量了。

首先在application.properties中添加微信API私钥的配置项名称,如wechat.private.key=,然后将光标移动到等号后面, 然后你拷贝一下私钥的pem文件内容,然后回到IDEA中,按下Ctrl+V粘贴,插件会自动将其加密,形成一个encrypted:xxxx的格式的字符串。 以同样的方式,你可以添加其他的微信支付配置项,如APIv3密钥,证书序列号等,当然你也可以添加支付宝对应的配置项,最终效果如下:

Payment Config

通过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等,看谁更快、更安全地完成微信配置项的集成,肯定是你赢。