Lom*_*fin 2 ruby ruby-on-rails heroku
我有一些证书文件,即.key文件,其中说:
-----BEGIN RSA PRIVATE KEY-----
IEpAIBAAKCAQEAwAwxt4edIh3UuK8r5
....blablabla..................
QSNoquaasdsaKDybrezemVqCxsQjg==
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
因此,这是RSA私钥。
我曾经从这样的文件加载它们:
@private_key = OpenSSL::PKey::RSA.new(File.read(private_key_file))
Run Code Online (Sandbox Code Playgroud)
但是,由于我使用的是Heroku,所以我打算将证书另存为它们在环境变量中的值。
所以我将它们粘贴到了我的.env文件中
COMPANY_KEY="-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKC.....\n-----END RSA PRIVATE KEY-----"
Run Code Online (Sandbox Code Playgroud)
是的,我在Heroku中基于多行配置变量切换了\nfor显式。所以现在我的代码看起来像这样:\\n
@private_key = OpenSSL::PKey::RSA.new(ENV['COMPANY_KEY'])
Run Code Online (Sandbox Code Playgroud)
而且,如果我从控制台运行它,则会得到构建的对象。但是,如果我尝试从Web服务器(基于Rails 4.2.6的Puma 3.4.0,Ruby 2.2.3)运行它,它会惨不忍睹:Neither PUB key nor PRIV key:: nested asn1 error在尝试运行同一行时。
如果我使用调试控制台,则可以看到读取的文件看起来像
"Line 1\\nLine3\\nLinea3"这样……
我很确定这与文件格式有关,但是我全都没有想法,如果遇到像我这样的问题,也许可以帮上忙。
我终于找到了一种方法...将所有内容混合在一起!
因此文件,例如company.key看起来像
-----BEGIN PRIVATE RSA KEY ----
Mumbojumbomummbojumbo
-----END RSA PRIVATE KEY----
Run Code Online (Sandbox Code Playgroud)
所以我将其切换为一个内衬,在字符串中使用显式\ n(因此它是真实的\ n)
COMPANY_KEY=""-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA+ztKEj\n-----END RSA PRIVATE KEY-----\n"
Run Code Online (Sandbox Code Playgroud)
不要忘记文件中的最后一个\ n。
现在,最后一部分,在我曾经做过的地方
@private_key = OpenSSL::PKey::RSA.new(File.read(private_key_file))
Run Code Online (Sandbox Code Playgroud)
现在我做
@private_key = OpenSSL::PKey::RSA.new(ENV['COMPANY_KEY'].gsub("\\n", "\n"))
Run Code Online (Sandbox Code Playgroud)
现在就像魅力一样!没有公共证书,环境变量中的每条信息。
| 归档时间: |
|
| 查看次数: |
2867 次 |
| 最近记录: |