我能够存储.pem文件,但不能存储.p12文件。当我运行命令
时 heroku config:set P12_CERTIFICATE="$(cat /Users/Brian/certs/pass.com.gym.p12)"
我收到错误
invalid byte sequence in UTF-8
/Users/Brian/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/optparse.rb:1355:in `==='
/Users/Brian/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/optparse.rb:1355:in `block in parse_in_order'
/Users/Brian/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/optparse.rb:1351:in `catch'
/Users/Brian/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/optparse.rb:1351:in `parse_in_order'
/Users/Brian/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/optparse.rb:1345:in `order!'
/Users/Brian/.heroku/client/lib/heroku/command.rb:168:in `prepare_run'
/Users/Brian/.heroku/client/lib/heroku/command.rb:222:in `run'
/Users/Brian/.heroku/client/lib/heroku/cli.rb:45:in `start'
/usr/local/Cellar/heroku-toolbelt/3.0.1/libexec/bin/heroku:24:in `<main>'
根据几年前的这个accepted answer,这曾经是p12文件的可能。我真的需要能够将p12文件存储在config var中,以便动态签名。任何帮助表示赞赏。
答案 0 :(得分:1)
.p12(PKCS#12)使用二进制文件格式,因此您无法将其包含为Heroku配置变量。
一种选择是将p12转换为密钥和证书的单独PEM文件,详见this answer
然后,您可以将密钥文件和证书的内容添加为heroku配置变量。您可以使用这些来签署文档,甚至可以使用OpenSSL动态创建(我认为)PKCS12文件:
p12 = OpenSSL::PKCS12.create('pass', 'descriptor',
OpenSSL::PKey.read(ENV['PRIVATE_KEY']),
OpenSSL::X509::Certificate.new(ENV['CERT']))
p12_binary = p12.to_der
答案 1 :(得分:0)
Lukas答案的替代方法是对p12文件进行base64编码,然后在需要使用时将其转换回去。例如,在NodeJS中,您将执行以下操作:
转换为Base64字符串
const p12Buffer = fs.readFileSync("/path/cert.p12");
const base64String = Buffer.from(p12Buffer).toString('base64');
然后您可以将base64String
字符串的内容存储到heroku配置环境变量P12_CERT
从Base64字符串转换(以在代码中使用p12证书)
const p12Buffer = Buffer.from(process.env.P12_CERT, 'base64');