php - Laravel - 无法从 .env 文件中获取 .pem 公钥数据
问题描述
我有一个用 Laravel 构建的 webapp,我需要使用 .pem 文件中的公钥来验证一些数据。密钥保存在 .env 文件中,并通过config/app.php
帮助程序检索env()
。由于 .pem 密钥需要位于具有特定长度的单独行上,因此我使用 \n 字符将密钥保持在一行上。问题是当我使用 \n 字符时,变量没有被缓存,我无法访问它。当我删除 \n 字符时,我可以检索变量但openssl_get_privatekey($key);
返回 false。我究竟做错了什么?这是 Laravel 还是一些一般的 PHP 问题?
解决方案
PHP 的 dotenv 包似乎不支持多行环境变量。
理想情况下,您应该将 .pem 文件保存为文件并通过路径引用它,例如:
PEM_FILE=/path/to/file.pem
并在配置中:
return [
//...
"key" => file_get_contents(env('PEM_FILE'))
这是有道理的,因为通常证书通常应该放在服务器上的专用证书路径中。如果您缓存配置,那么 .pem 文件的实际内容只会在部署时读取一次。
但是,如果你必须把它放在 dotenv 中,那么你可以这样做:
在 .env 中
PEM_KEY="-----BEGIN RSA PRIVATE KEY-----\n…\n-----END DSA PRIVATE KEY-----"
在配置中:
return [
//...
"key" => str_replace("\\n", "\n", env('PEM_KEY')),
由于密钥通常是 base64,我认为\n
在 .pem 文件中自然不会出现这种情况。
推荐阅读
- typescript - 如何防止使用 TypeScript 推断泛型类型参数?
- tensorflow.js - Tensorflow.js 数据集到张量?
- python - 如何移动在 Python 中使用不同函数创建的海龟?
- javascript - 按数组属性的长度对 JavaScript 对象进行排序
- c++ - 刚开始编写 C++
- java - 使参数可选使用
类型? - ruby - Jekyll 和 Nokogiri 安装问题
- python - 将列表移动到 csv 的更好方法?
- apache-spark - SparkSQL Hive 错误:在 CLASSPATH 中找不到“HikariCP”
- r - 在排列的数据上使用 mutate() 中的滞后