Skip to main content

Dotenvx如何支持其他文件格式的加解密?

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

目前Dotenvx主要支持.env.properties文件格式的加解密,但是在实际的开发中,我们可能还会使用到其他格式的配置文件, 如xml,toml,json等格式的文件,那么Dotenvx能否支持这些格式的文件的加解密呢?

为何这些格式的文件也会包含加密信息呢? 主要是因为很多框架和工具,都是约定了某种格式的配置文件,包括Nginx的配置文件,Apache的配置文件等, 这些配置文件中,可能也会包含一些敏感信息,当然还有一些工具,也需要这些配置文件的。 如果你使用过consule-template,那么就会知道,在一些场景中,我们确实需要结合配置来调整一些配置文件的内容。

例如我有一个xml的配置文件,那么如何让Dotenvx来加密其中的敏感信息呢? 让我们看一下整合的具体样例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!-- dotenv.public.key: 02b4972559803fa3c2464e93858f80c3a4c86f046f725329f8975e007b393dc4f0 -->
<configuration xmlns="http://www.jooq.org/xsd/jooq-codegen-3.20.0.xsd">
<jdbc>
<driver>com.mysql.cj.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:13306/jooq</url>
<user>root</user>
<password>encrypted:xxxxx</password>
</jdbc>
</configuration>

这里稍微解释一下:

  • 公钥信息:考虑到xml的结构化,这里我们使用注释的方式来保存公钥信息,这样xml的解析等,完全不受影响
  • 敏感信息的加密:如对密码的加密,机制都是一样的,就是读取公钥然后对文本值进行加密,这里可以使用以下命令可以获取某一明文对应的密文。 dotenvx set -f jooq-config.xml --encrypt --stdout password xxxxxxx

最后我们通过dotenvx decrypt -f jooq-config.xml --stdout命令,就可以看到解密后的xml文件内容。

通过该机制,你不需要要担心配置文件的格式问题,任何文件只要以注释的方式添加dotenv.public.key, 然后对敏感信息进行加密,就可以使用Dotenvx来进行解密,保存为明文的配置文件,然后再提供给其他程序使用。 你可以配合Task Runner工具,如just,就可以轻松地在构建过程中完成配置文件的解密工作,如下:

generate:
dotenvx decrypt -f jooq-config.protected.xml --stdout > jooq-config.xml
mvn jooq-codegen:generate
rm -rf jooq-config.xml

你也不用担心编辑这些xml、toml文件太复杂,Dotenvx JetBrains插件也支持这些格式的文件的加解密,体验和.env文件是一样的。

对比KMS/Config服务器+模板引擎生成配置的方案,在配置文件中添加公钥注释,然后对敏感信息进行加密,整个过程非常简单, 也更加方便和简洁。