Skip to main content

33 posts tagged with "dotenvx"

dotenvx

View All Tags

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

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

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

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

使用哪种文件格式存储你的Settings和Secrets?

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

在我们日常开发中,不可缺少地设计到配置和私密信息的管理,主要区别如下:

  • Settings: 配置信息,以明文方式存在,如应用名称,映射路径,维护人员信息等
  • Secrets: 私密信息,如数据库密码,API Key等,这些信息需要加密存储

目前来说,主要有以下几种文件格式来保存这两者信息:

  • .env文件: 这是最常见的配置文件格式,也是Twelve-factor App - Config推荐的做法
  • application.properties文件:Java程序员在熟悉不过啦,应用的基本信息,数据库、Redis、API Key等,这些都可以放在这个文件中
  • YAML文件:很多云原生应用都会采用YAML文件格式来保存配置和私密信息,在Kubernetes中,ConfigMap和Secret都是YAML格式
  • JSON文件:很多前端应用和Node.js应用,都会采用JSON格式保存相关的配置
  • TOML文件:Rust语言的配置文件格式,很多Rust应用都会采用TOML格式保存配置,如misemise.toml文件
  • INI文件:很多传统的应用,尤其是C/C++应用,都会采用INI格式保存配置

对于Dotenvx采用非对称加密的方案来说,一个典型的配置文件主要包括以下信息:

  • Front Matter: 保存元信息,如UUID,group,name,profile等,还包括签名信息
  • Public Key: 用于加密配置项的公钥
  • Variables: 配置项,key-value格式,value可以是明文,也可以是加密的,也就是同时包括Settings和Secrets

如何结合Dotenvx保护DuckDB的Secrets

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

DuckDB 1.4版本增加了数据库加密功能, 截止目前为止,DuckDB涉及到Secrets的主要包括如下:

  • 原生Secret:如S3和兼容存储服务的的AK/SK,http资源访问的token,huggingface和数据库访问的账号密码等
  • DuckLake:主要是MySQL/PostgreSQL元信息数据库的账号密码,S3服务的AK/SK等,这个是DuckLake的核心配置
  • 加密数据库:是对整个数据库的加密,使用AES 256进行加密,加密密码由用户提供

DuckDB虽然提供了Secret的管理能力,但是并没有达到安全的需求,而且用户使用体验也有一些问题,如:

  • Temporary Secrets:临时Secret,保存在内存中,进程退出后就会丢失,所以要每次都要创建,如S3的AK/SK,我都是每次创建,反复copy创建Secret的SQL。
  • Persistent Secrets: 持久化Secret,默认以未加密的方式保存在$HOME/.duckdb/stored_secrets目录下

鉴于DuckDB的Secret管理的加密特性缺失,所以也有不少人建议使用KMS来进行加密,而且好像也没有第三方的扩展来支持这一点。

此外如果你稍不留意的话,你创建的Secret的SQL语句就会被记录到$HOME/.duckdb_history文件中,这个文件也是明文保存的。

如何保护好你的私钥?

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

Dotenvx采用非对称方式对配置项进行加密,默认的私钥都保存在$HOME/.dotenvx/.env.keys.json文件中,这个做法和其他工具也没有什么不同, 如大家都知道的$HOME/.ssh/id_rsa文件,也是保存SSH私钥的地方,你的GitHub也是使用这个私钥进行SSH认证的。

但是还是有些同学会担心这个私钥文件的安全性,毕竟这个文件是保存在本地磁盘上的,如果被其他人获取到,那么就可以解密你的配置项了。 这个不是杞人忧天,而且确实有这种风险,不少同学的私密信息,就是这样被恶意软件或者代码窃取的。

此外保存电脑上,还有一个丢失的风险,如你的笔记本电脑丢失了,或者被盗了,虽然笔记本有登录密码,但是这个开机密码很容易被跳过, 那么这个秘钥文件就会泄露,你还需要准备应急预案。大公司、金融组织和其他相关部门,员工的笔记本电脑丢失和被盗后,第一时间就是要上报给公司, 不是没有道理的。

什么是安全编辑器(Secure Editor)? 有哪些特性和优势?技术上如何实现?

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

安全编辑器是一种专门设计用于处理敏感信息的文本或代码编辑器。其核心目标是防止数据在编辑过程中被无意或恶意地泄露,确保信息的机密性和完整性。 它不仅仅是“一个带加密功能的编辑器”,而是将安全理念深度融入其整个生命周期——从启动、编辑、保存到退出的每一个环节。 普通编辑器或者IDE(如文本编辑器、VIM、VS Code、Sublime Text,IntelliJ IDEA)关注的是功能和用户体验,而安全编辑器将安全性视为与功能性同等甚至更高优先级的核心要求。

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是会监听文件变更的。