Skip to main content

mise如何集成Dotenvx做环境变量管理?

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

不少同学在使用mise作为项目开发工具,但是mise的Secret管理有点复杂,当然不少同学可能会选择sops, 可能还不是那么便捷,门槛也比较高一些。那么能否让Dotenvx来管理mise的环境变量呢? 这样既可以做到.env文件同时可以被mise和应用程序使用,同时关键配置中的敏感数据还是加密的。 那么如何做到这一点呢?

ECIES(Elliptic Curve Integrated Encryption Scheme)介绍

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

ECIES(椭圆曲线集成加密方案)是一个基于椭圆曲线密码学(ECC)的混合加密框架,它将密钥协商、对称加密和消息认证码(MAC)等过程“集成”起来,用于在公钥接收者处对数据进行加密。 ECIES加密方案采用ECC加密(公钥密码系统)+ 密钥派生函数 ( KDF ) + 对称加密算法 + MAC算法。 ECIES本身不是一个具体的算法,而是一个集成的加密框架,提供了多种标准和实现选择,允许用户将不同的椭圆曲线算法、密钥派生函数(KDF)和对称加密算法组合使用,以实现数据加密和解密。

ECIES 的工作原理:

  1. 密钥生成: 发送方使用接收方的公钥生成密钥对。
  2. 密钥协商: 利用接收方的公钥和接收方自己的私钥进行密钥协商,生成一个共享密钥
  3. 密钥派生: 通过密钥派生函数(KDF),从共享密钥中生成用于对称加密和消息认证的子密钥。
  4. 数据加密: 使用对称加密算法(如AES、ChaCha20)和派生出的加密密钥来加密明文数据。
  5. 消息认证: 生成一个消息认证码(MAC)来验证消息的完整性和真实性,使用派生出的认证密钥。
  6. 组合数据: 将加密后的数据、MAC 值和加密过程中产生的其他信息(如用于解密的临时公钥)组合起来,形成密文。
  7. 解密过程: 接收方使用自己的私钥和接收到的临时公钥,进行密钥协商和派生,然后用生成的密钥和算法对密文进行解密和验证。

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文件添加公钥,然后我们就可以添加加密变量了。

RSA和ECDSA:哪种加密算法更适合你的应用?

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

RSA和ECDSA这两者都是非对称加密(公钥密码学)中至关重要的算法,但它们在原理、效率、安全性和应用场景上有着显著的不同。

特性RSAECDSA
数学基础大整数质因数分解的困难性椭圆曲线离散对数问题 (ECDLP) 的困难性
密钥类型用于签名和加密(理论上)仅用于签名和认证,不能用于加密
密钥尺寸大(2048-4096位是当前标准)小得多(256-521位提供同等安全)
性能签名生成慢,验证较快签名生成快,验证速度与RSA相当或略慢
计算开销高(处理大整数模幂运算)低(在有限域上进行点运算)
标准化较早,应用极其广泛较新,但已成为现代TLS证书的主流选择
典型应用传统Web安全、SSH、邮件加密、数字证书区块链(比特币、以太坊)、现代TLS证书、移动设备

Dotenvx JetBrains plugin: 粘贴(paste)即加密(encrypt)

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

Dotenvx JetBrains插件发布了0.1.10版本,该版本增加了一个非常实用的功能:粘贴(paste)即加密(encrypt)。

在实际的开发中,我们经常需要将一些敏感的信息,如数据库密码、API Key等,粘贴到.env文件中,如果直接粘贴,可能会导致敏感信息泄露的问题, 要知道AI Agent是会监听文件变更的。

如何整合Python配置框架Stela和Dotenvx,实现配置项的加密?

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

Stela是Python生态中一个非常流行的配置管理框架,让管理明文和加密的配置变得非常简单。 Stela的一些设计理念还是非常不错的,主要包括:

  • Settings: 非敏感数据,可以提交到代码仓库,如API URL,超时时间等
  • Secrets: 敏感数据,不应该提交到代码仓库,如密码,Token,API Key等
  • Profiles: 环境特定的配置,如开发、测试和生产环境,可以通过不同的Profile来区分

这些和Dotenvx的设计也是一致的,profile优先,.env或者application.properties文件中,未加密的配置项基本都是非敏感数据,如应用名称等, 而加密的主要是敏感数据,如数据库密码等。

有了Dotenvx,还需要Apollo和Nacos的配置中心吗?

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

NacosApollo(阿波罗)是国内Java开发人员在开发Spring Cloud应用时, 常用的配置中心和服务注册发现解决方案,当然之前我也是其用户之一,主要是用来管理Spring Cloud应用的配置。 但是伴随着Dotenvx的出现,我们还有必要使用Nacos和Apollo的配置中心功能吗? 当然Nacos和Apollo还有服务注册发现的功能,如Nacos目前非常关注MCP注册发现, 这里我们不讨论花毛一体的设计和AI的能力,这里我们着重讨论一下配置中心的功能,对于服务注册发现的能力,这个也有很多的候选产品,如Eureka等。

配置(Config)是应用非常核心的部分,也是Spring Cloud的核心部分,很多开发人员都在应用中集成过Config Server,也包括Vault这款KMS产品。

如何在Spring Boot中集成Dotenvx保护你的配置项?

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

Josh Long在This Week in Spring - September 2nd, 2025推荐了dotenvx-spring-boot, 在文中还有一篇非常好的ppt,就是12-Factor Apps with Spring Boot

this is really cool - a mechanism to load configuration into Spring Boot using Dotenvx Andrew Fawcett gave a nice talk looking at building 12-factor applications with Spring Boot at Spring I/O 2025.

所以我们来看一下如何在Spring Boot中集成Dotenvx。

Andrew Fawcett的演讲中谈到,12-Factor App的Config配置项,在Spring Boot中也非常容易实践,如下:

Spring Boot Config Spring Boot Config

至少我个人也是遵循这样的做法,有条件的话就上Vault或者其他Config Server,没有条件的个人项目,就使用.env文件进行环境变量暴露。

Dotenvx各语言SDK大小,是SDK集成,还是wrapper脚本启动?

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

dotenvx-rs非常轻巧,大小目前在4M左右,鉴于使用Rust编写,虽然功能多,但是编译后体积还是比较小巧的, 在Ops运维、脚本集成等方面,优势都非常明显。

但是在日常开发中,大家还是比较喜欢实用SDK方式,如dotenv,基本上都是通过SDK集成的方式来加载配置的。 .env文件格式非常简单,基本上就是KEY=VALUE的格式,所以其对应各语言SDK也都非常轻巧,基本上都在20K以下。 但是dotenvx就有些不同啦,除了要解析.env文件外,还要进行解密操作,所以各语言SDK的体积就大非常多, 这里列举一下各语言Dotenvx SDK的体积,供大家参考:

  • Node.js: 405K after esbuild bundle
  • Python: 6.5M
  • Golang: 2.9M
  • Rust: 1.5M
  • Java: 8.5M(bcprov-jdk18on-1.81.jar, dotenv-java)

Dotenvx完善Python和Node.js的支持,让.env加密特性使用更简单

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

.env文件在Node.js和Python等语言中被广泛使用,主要用于存储应用程序的配置参数,如数据库连接信息、API密钥等。 目前dotenvx已经支持这些语言的SDK,可以非常方便地集成dotenvx的加密特性,但是这种方式还是有一些不便之处, 如会让Node.js和Python的项目增加额外的依赖包,导致应用变大,内存消耗增加,这点对Node.js尤为明显, 为了解密一个.env文件,然后加载为环境变,但是要付出这么多的代价,似乎不太划算。 此外做一些demo项目时,也有些偷懒,还需要增加额外的开发包,还是觉得有点麻烦,那么能否有一种更简单的方式呢?

这个可能就要从语言的SDK着手啦,能否让语言SDK天生就支持dotenvx特性呢?就像一些SDK,天生就支持.env一样,这样岂不是更方便一些。 那么能否做到让语言SDK天生支持dotenvx呢?从语言层面来说,可能有点麻烦,但是我们可以通过外部的管理工具做到这一点。

目前来说,Python的项目管理工具为uv,不但可以管理Python SDK,虚拟环境,开发包等,基本上涵盖了Python项目的方方面面, 可以说uv是Python社区标准的项目工具。 Node.js也有相关的SDK工具,那就是Volta,Volta可以管理Node.js的版本,工具等。 接下来我们就看一下如何结合uv和Volta来实现让Python和Node.js天生支持dotenvx特性。