Laravel-无法从.env文件获取.pem公钥数据

时间:2018-11-21 15:34:13

标签: php laravel

我有一个使用Laravel构建的webapp,我需要使用.pem文件中的公钥来验证一些数据。密钥保存在.env文件中,并通过config/app.php帮助程序通过env()进行检索。由于.pem密钥需要位于具有特定长度的单独行中,因此我使用\ n字符将密钥保持在一行中。问题是,当我使用\ n字符时,该变量未缓存并且无法访问它。当我删除\ n字符时,我可以检索变量,但是openssl_get_privatekey($key);返回false。我究竟做错了什么?这是Laravel还是一些一般的PHP问题?

1 个答案:

答案 0 :(得分:0)

PHP的dotenv软件包似乎不支持多行环境变量。

理想情况下,您应该将.pem文件保留为文件,并通过路径引用它,例如:

<div class="container">
  <div class="cell1">
    Header should be collapsed
  </div>
  <div class="cell2">
    Sidebar
  </div>
  <div class="cell3">
    Content
  </div>
</div>

并在配置中:

PEM_FILE=/path/to/file.pem

这很有意义,因为通常证书通常应放在服务器上的专用证书路径中。如果缓存配置,则.pem文件的实际内容在部署时仅读取一次。

但是,如果必须将其放入dotenv中,则可以执行以下操作:

在.env

return [
    //...
    "key" => file_get_contents(env('PEM_FILE'))

在配置中:

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

因为密钥通常是base64,所以我认为{。{1}}不会自然出现在.pem文件中。