You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用OpenSSL安全恢复环境密钥?权限、解密及参数问题

问题背景与疑问

我对OpenSSL了解不多,看到一段GitHub Actions的YAML代码但无详细使用说明,代码如下:

# Assumption:
# You've created the following GitHub secrets in your repository:
# MY_CLIENT_SECRET - encrypt/decrypt with openssl - useful for public and public repositories
# MY_OPENSSL_PASSWORD - used to protect secrets
# MY_OPENSSL_ITER - Use a number of iterations on the password to derive the encryption key.
#                   High values increase the time required to brute-force the resulting file.
#                   This option enables the use of PBKDF2 algorithm to derive the key.

name: Recovering Secret Keys
on:
  push:
  workflow_dispatch:

jobs:
  openssl:
    name: Recover With OpenSSL
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v3
      - env:
          MY_CLIENT_SECRET: ${{ secrets.MY_CLIENT_SECRET }}
          MY_OPENSSL_PASSWORD: ${{ secrets.MY_OPENSSL_PASSWORD }}
          MY_OPENSSL_ITER: ${{ secrets.MY_OPENSSL_ITER }}
        run: |
          echo "MY_CLIENT_SECRET (***)     = ${MY_CLIENT_SECRET}"
          echo "MY_CLIENT_SECRET (openssl) = $(echo "${MY_CLIENT_SECRET}" | openssl enc -e -aes-256-cbc -a -pbkdf2 -iter ${MY_OPENSSL_ITER} -k "${MY_OPENSSL_PASSWORD}")"
          echo "Copy the above value, and then execute locally:"
          echo "echo PASTE_HERE | openssl base64 -d | openssl enc -d -pbkdf2 -iter \$MY_OPENSSL_ITER -aes-256-cbc -k \$MY_OPENSSL_PASSWORD"

我有一个公开代码的个人项目,需要获取环境密钥并生成.env文件,但仅允许特定人员操作,具体疑问如下:

  1. 如何设置权限,仅允许特定人员查看并生成含密钥的.env文件?
  2. 如何解密并创建环境密钥文件?
  3. MY_CLIENT_SECRET、MY_OPENSSL_PASSWORD、MY_OPENSSL_ITER分别是什么,如何获取?

问题解答

1. 权限设置:仅允许特定人员操作

  • 限制Workflow触发权限:进入仓库「Settings」→「Actions」→「General」,将「Workflow permissions」设置为「Read repository contents and packages permissions」,最小化权限范围。
  • 控制手动触发权限:只有仓库「Write」及以上权限的用户才能触发workflow_dispatch,因此在仓库「Collaborators and teams」里,仅给特定人员分配「Write」或「Admin」权限。也可以在Workflow步骤中添加权限校验脚本,过滤非授权用户:
    if ! gh api /repos/${{ github.repository }}/collaborators/${{ github.actor }}/permission | jq -r '.permission' | grep -E '(admin|write)'; then
      echo "Permission denied"
      exit 1
    fi
    
  • 隐藏敏感输出:GitHub Secrets本身加密,Workflow运行时避免直接打印原始密钥,代码中已用***隐藏原始值,加密后的内容可安全展示,但要确保只有授权人员能查看Workflow运行日志。

2. 解密并创建.env文件

按以下步骤操作:

  1. 获取加密密钥:触发Workflow后,在运行日志中找到MY_CLIENT_SECRET (openssl)对应的加密字符串并复制。
  2. 本地解密生成.env:
    • 终端中设置环境变量:
      export MY_OPENSSL_PASSWORD="你的加密密码"
      export MY_OPENSSL_ITER="预设的迭代次数"
      
    • 将复制的加密字符串替换PASTE_HERE,执行命令并写入.env文件:
      echo PASTE_HERE | openssl base64 -d | openssl enc -d -pbkdf2 -iter $MY_OPENSSL_ITER -aes-256-cbc -k $MY_OPENSSL_PASSWORD > .env
      
    • 打开.env文件验证内容是否正确。

3. 三个Secret的定义与创建方式

  • MY_CLIENT_SECRET:项目需要的原始敏感密钥(如API密钥、数据库密码等),由你自行生成或从服务提供商处获取。创建方式:仓库「Settings」→「Secrets and variables」→「Actions」→「New repository secret」,粘贴原始密钥并命名为MY_CLIENT_SECRET。
  • MY_OPENSSL_PASSWORD:用于加密/解密MY_CLIENT_SECRET的自定义强密码(建议包含大小写、数字、特殊字符),同样添加到GitHub Secrets中,命名为MY_OPENSSL_PASSWORD。
  • MY_OPENSSL_ITER:PBKDF2算法的迭代次数(如100000),数值越高暴力破解难度越大,由你自行指定后添加到GitHub Secrets,命名为MY_OPENSSL_ITER。

内容的提问来源于stack exchange,提问作者THIAGO DE BONIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:01:46