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