将X.509私钥存储在Vercel上的环境变量中并在Nextjs中使用的正确方法是什么



设置

我有一个Nextjs应用程序,它使用Firebase Admin,需要一个私钥来初始化自己。这是一个X.509私钥证书,为了安全起见,我正试图将其存储在Vercel上的环境变量中——这是我的主机选择。

我在.env.local文件中有环境变量,如nextjs文档中所述。由于有几个地方描述了存储在";生的";Vercel没有正确存储,但它们可以正确存储为JSON,稍后由应用程序解析,我已经做到了。事实上,测试按原样存储私钥是不起作用的,用github问题上描述的两种方法中的任何一种存储/解析私钥都可以在本地使用.env.local中的变量,如下所示:

EXAMPLE_KEY=example_value
FIREBASE_PRIVATE_KEY='"-----BEGIN PRIVATE KEY-----WdEFiwPk...   ...htJthGefn-----END PRIVATE KEY-----n"'

问题

试图将这些更改部署到Vercel的尝试失败了,而调查原因似乎指向了以更温和的方式存储在Vercel上的环境变量。

使用Vercel cli添加变量,然后提供文本,将始终用双引号包装提供的值:

如果您为该值输入CCD_ 3和CCD_,然后运行vercel env pull <filename>,文件将包含:

FIREBASE_PRIVATE_KEY="true"

这在正常情况下可能不是问题,但由于私钥具有双引号,因此提交值";生的";然后将其拉回到本地文件,看起来像:

FIREBASE_PRIVATE_KEY=""-----BEGIN PRIVATE KEY-----WdEFiwPk...   ...htJthGefn-----END PRIVATE KEY-----n""

尝试在JSON可解析的单引号字符串中提交时返回:

FIREBASE_PRIVATE_KEY="'"-----BEGIN PRIVATE KEY-----WdEFiwPk...   ...htJthGefn-----END PRIVATE KEY-----n"'"

我以为从Vercel提取数据时可能就是这样格式化的,但它与我从应用程序中看到的错误消息一致。

我尝试了几乎所有的组合和配置,试图获得一个JSON.parse可用的私钥,但似乎无法使其工作。我甚至尝试删除包装privateKey的双引号,看看是否会添加明显添加的双引号并在那里工作,但没有骰子。

信用:https://gist.github.com/tomi/0675e58919af4554b198cee3f84405e5

将私钥编码为base64:

  • 将私钥复制到剪贴板
  • 运行命令pbpaste | base64 | pbcopy

私钥现在在剪贴板中以base64编码。将其粘贴到env变量,例如粘贴到heroku或.env文件

从node.js中的base64解码私钥

const private_key=新缓冲区(process.env.private_key,'base64'(.toString('scii'(;

相信您可以从开头和结尾删除--private key---部分,只需使用中间的值。

更改

private_key:process.env.GCLOUD_private_key

通过

private_key:process.env.GCLOUD_private_key.replace(/\n/g,'\n'(

相关内容

  • 没有找到相关文章

最新更新