如何为 AWS Elastic Beans 设置多行 RSA 私钥环境变量

How to set multiline RSA private key environment variable for AWS Elastic Beans

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

例如

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

然而,这在部署应用程序时似乎不起作用,因为它总是失败并显示

OpenSSL::PKey::RSAError: Neither PUB key nor PRIV key: nested asn1 error

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

但是与 Heroku 不同,AWS EB 不接受多行输入(见下文)所以我必须使用 \n 来创建新行。

我尝试了几种不同的样式,但其中 none 似乎正确地插入了 \n,但我总是遇到同样的错误。

我试过用 \n 和每行的结尾,然后 \n 也试过用双引号 \" 来包裹密钥,但我仍然得到相同的结果错误。

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

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

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

您需要 'export' 您的多行字符串,例如您的私钥或 public 密钥正确进入环境。

在您的 shell 导出语句中附上 $'.....' 其中 ...... 是您的多行字符串,例如,您的私有或 public 密钥。

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

我在使用 Golang 和弹性豆茎时遇到了同样的问题, 我做了这个 转到 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)

您可以将私钥转换为 base64,然后将该 base64 存储为环境变量。需要时你解码这个变量。

在 Unix 中:

$ base64 path/to/your/private_key_file

在您的申请中:

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