如何将私钥内容放入 dotenv .env 文件中以用于 lumen 应用程序?

Posted

技术标签:

【中文标题】如何将私钥内容放入 dotenv .env 文件中以用于 lumen 应用程序?【英文标题】:How to put the private key contents in dotenv .env file for lumen app? 【发布时间】:2019-06-12 23:56:33 【问题描述】:

我想在我的 lumen 应用程序中使用 SFTP 服务器,因此我需要将访问 SFTP 服务器的私钥存储在 .env 文件 (dotenv) 中

我试过这种方法:

SFTP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nHkVN9…\n-----END DSA PRIVATE KEY-----\n"

当我 dd(env('SFTP_PRIVATE_KEY')); 时,我得到一个空字符串

知道如何处理吗?

【问题讨论】:

只是好奇,你到底为什么需要一个私钥作为字符串?只需将其保留为文件,如果您需要文件本身,请参考它。 因为将我的源代码/应用程序的 SFTP 私钥凭据部分存储在 git repo 中是个坏主意。 将其添加到 .gitignore?还是完全在项目之外? 因为应用程序通过 AWS ECS 托管在 docker 容器中,并通过 Circleci 部署。您不会 SSH 到容器上并将私有服务器放在服务器上,因为当容器崩溃并移动到不同的集群时,这不太理想。 老实说,您根本不应该在生产环境中使用 .env 文件。 .env 旨在在开发中设置环境变量(因此您可以模仿生产环境)。 【参考方案1】:

好的,我已经想出了一个解决方法,如下所示:

    我已经用双管替换了每条新线:|| 当我通过 lumen 的 env() 函数加载环境变量的内容时,我将其替换回新行

例如我的.env

SFTP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----||HkVN9…||-----END DSA PRIVATE KEY-----||"

下面是你如何使用它:

$privateKey = env('SFTP_PRIVATE_KEY');
$privateKey = str_replace('||', php_EOL, $privateKey);

// Debug
echo '<pre>';
echo($privateKey);
exit;

我对此进行了测试,现在可以使用,如果有更好的方法,请告诉我。

【讨论】:

【参考方案2】:

PHP dotenv 版本 3 adds support 用于多行值。所以现在你可以这样做了:

SFTP_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----
HkVN9…
-----END DSA PRIVATE KEY-----"

【讨论】:

以上是关于如何将私钥内容放入 dotenv .env 文件中以用于 lumen 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 openssl 创建公钥和私钥?

如何将私钥转换为 RSA 私钥?

如何将私钥添加到分发证书?

如何为 dotenv 获取特定于环境的 .env 文件(在 Laravel 5 中)

libsodium PHP将私钥存储在文件中

dotenv 在生产中需要 .env 文件