2016-07-01 9 views
1

により、ネストされたASN1エラーに環境から証明書情報を読み取ることができません。Railsは、私はいくつかの証明書ファイル、言うすなわち.KEYファイルを持っている

私はそうのようなファイルからそれらをロードするために使用:

@private_key = OpenSSL::PKey::RSA.new(File.read(private_key_file)) 

しかし、私はHerokuのを使用しておりますので、私は私の証明書は、環境変数でそれらの値として保存されていていきます。

は、だから私は私の.envファイルに

COMPANY_KEY="-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKC.....\n-----END RSA PRIVATE KEY-----" 

それらを貼り付けましたええ、私はMulti-line config variables in Herokuに基づいexplicits \\nため\nを切り替えます。だから今、私のコードは次のようになります。

@private_key = OpenSSL::PKey::RSA.new(ENV['COMPANY_KEY']) 

そして、私は、コンソールから実行した場合、私は、オブジェクトが構築され得ます。しかし、Webサーバー(Puma 3.4.0、Rails 4.2.6、Ruby 2.2.3)から実行しようとすると、同じ行を実行しようとすると悲惨なことに失敗します:Neither PUB key nor PRIV key:: nested asn1 error

私がデバッグコンソールを使用している場合は、私は、読み取りファイルがそうで "Line 1\\nLine3\\nLinea3"とのように見えることを得る...

私はそれがファイル形式とは何かを持っていることをかなり確信している、しかし、私はすべてのアイデアがありませんし、私のような問題があったら助けてくれるかもしれません。

+0

テスト秘密鍵を作成して投稿してください。あなたがそうしている間、[opensslを使ってRSA秘密鍵を生成する方法は?](http://stackoverflow.com/a/30493975/608639)を見てください。 ***公開鍵***と***主公開鍵情報***との違いに注意してください。カプセル化前のヘッダ(*** '----- BEGIN RSA PUBLIC KEY ---- '' ***と*** '----- BEGIN PUBLIC KEY -----' ***)。秘密鍵についても同様です。 – jww

答えて

0

私はHerokuの中Multi-line config variablesに基づいてexplicits \\nため\nを切り替えます。

... 私は読み込みファイルが"Line 1\\nLine3\\nLinea3"ようになっていることを取得するデバッグコンソールを使用している場合...

あなたの問題はここにする必要があります。あなたがリンクしている投稿は、あなたの新しい行を二重にエスケープすることを示唆していません。あなたの複数行のテキストを二重引用符で囲むことを提案しています。 bashでは、端末に複数行のテキストを入力することができます。ポストもはるかに簡単な方法でそれを行うことを提案:

heroku config:add MASISA_KEY ="$(cat your_private_key.pem)" 
+0

これは、Herokuに鍵をアップロードする際に役立つかもしれませんが、自分の開発マシンで自分のコードをテストしようとしています。ですから、証明書が.envファイルに正しくロードされているかどうか試してみてください。 – Lomefin

2

私は最終的にそれを行う方法を見つけた...それをすべてを混合します!

だから、たとえばcompany.key用のファイルは、

-----BEGIN PRIVATE RSA KEY ---- 
Mumbojumbomummbojumbo 
-----END RSA PRIVATE KEY---- 

のように見えるので、私は(そう、その本当の\ n)は、文字列に明示的に\ nを作り、1つのライナーに

COMPANY_KEY=""-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEA+ztKEj\n-----END RSA PRIVATE KEY-----\n" 
それを切り替えます

ファイル内の最後の\ nを忘れないでください。今

、最後の部分、私は今、私は

@private_key = OpenSSL::PKey::RSA.new(ENV['COMPANY_KEY'].gsub("\\n", "\n")) 

を行うそして今、魔法のように動作

@private_key = OpenSSL::PKey::RSA.new(File.read(private_key_file)) 

を行うために使用される場所で!公開鍵証明書はなく、環境変数のすべての情報。

0

問題を解決し、環境変数に証明書またはキー本体だけを保存します。改行文字を入れる必要はありません。

SECRET = <<-SECRET 
-----BEGIN PRIVATE KEY----- 
#{ENV['SECRET_KEY']} 
-----END PRIVATE KEY----- 
SECRET 

CERTIFICATE = <<-CERT 
-----BEGIN CERTIFICATE----- 
#{ENV['CERT']} 
-----END CERTIFICATE----- 
CERT 
関連する問題