如何为AWS弹性Bean设置多行RSA私钥环境变量

时间:2017-03-29 01:55:26

标签: ruby-on-rails amazon-web-services rsa elastic-beanstalk

我正在使用Elastic Beanstalk将Ruby on Rails应用程序部署到AWS,并且必须将私钥设置为环境变量

E.g

-----BEGIN RSA PRIVATE KEY----- SpvpksXQIBA65ICOgQxV2TvMIICAiMeV9prhdJSKjjsk2 tYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkk tYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkk tYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkk tYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkk -----END RSA PRIVATE KEY-----

然而,在部署应用程序时似乎无法正常工作,因为它总是以

失败
  

OpenSSL :: PKey :: RSAError:既不是PUB密钥也不是PRIV密钥:嵌套asn1   错误

我认为这是因为RSA密钥格式不正确。

然而,与Heroku不同,AWS EB不接受多行输入(见下文),因此我必须使用\n来创建新行。

enter image description here

我尝试了几种不同的风格,但它们似乎都没有正确地插入\n而且我总是得到同样的错误。

我已尝试使用\n和每行的结尾,然后\\n并尝试使用双引号\"来包装密钥,但我仍然保持不变错误。

如何在AWS Elastic Beanstalk中正确设置多线环境变量?

4 个答案:

答案 0 :(得分:5)

您可以使用\n在EB中设置它,然后转换' \ n'在将其传递给config.key之前的换行符 - 类似这样的内容(请注意gsub调用中的单引号和双引号):

single_line_key = ENV.fetch('CLOUDFRONT_KEY')
multi_line_key = single_line_key.gsub('\n', "\n")
config.key = multi_line_key

答案 1 :(得分:2)

你需要出口'您的多行字符串,例如正确的私钥或公钥。

附上你的shell导出声明$' .....'其中......是您的多行字符串,例如您的私钥或公钥。

实施例: export KEY = $'-----BEGIN RSA PRIVATE KEY-----\nSpvpksXQIBA65ICOgQxV2TvMIICAiMeV9prhdJSKjjsk2tYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkktYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkktYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkktYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkk\n-----END RSA PRIVATE KEY-----'

答案 2 :(得分:0)

在Golang和弹性beantalk中,我遇到了同样的问题, 我做了这个 转到AWS控制台并按如下所示设置值:

-----BEGIN RSA PRIVATE KEY-----\nSpvpksXQIBA65ICOgQxV2TvMIICAiMeV9prhdJSKjjsk2\ntYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkk\ntYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkk\ntYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkk\ntYdz8lhn/ibROQW71utuHLAyHGMBxz3kIaaIq1kjdkkk\n-----END RSA PRIVATE KEY-----  

在我的代码内

key := os.Getenv("PUSH_AUTH_KEY")
key = strings.Replace(key, `\n`, "\n", 5)

答案 3 :(得分:0)

您可以在 base64 中转换您的私钥,然后将该 base64 存储为环境变量。需要时解码此变量。

在unix中:

$ base64 path/to/your/private_key_file

在您的应用程序中:

def private_key
  Base64.decode64(ENV['PRIVATE_KEY'])
end