我在生成 Heroku 将接受 secure.mydomain.com 的 SSL 证书时遇到问题。 我正在使用DNSimple,Cedar Stack,并按照此处的说明进行操作:https://devcenter.heroku.com/articles/ssl-certificate
- 从 DNSimple 复制 server.key & server.orig.crt
- 获取具有
$ curl https://knowledge.rapidssl.com/library/VERISIGN/ALL_OTHER/RapidSSL%20Intermediate/RapidSSL_CA_bundle.pem > rapidssl_bundle.pem
的根 CA 证书 - 使用
cat server.orig.crt rapidssl_bundle.pem > server.crt
连接成一个文件
所以现在我有了server.key和server.orig.crt文件,我尝试用$ heroku certs:add server.crt server.key
上传到Heroku。 这给出了错误
Key could not be read since it's protected by a passphrase.
上面的文档没有提到任何关于从 server.key 文件中删除密码的信息。所以我四处挖掘并找到了这里的文档:https://devcenter.heroku.com/articles/ssl#customdomain-ssl。我在上面的 #1 和 #2 之间运行这些命令:
1b.$ mv server.key server.orig.key
1c.$ openssl rsa -in server.orig.key -out server.key
但是,这给出了错误
unable to load Private Key
47930:error:0906D06C:PEM routines:PEM_read_bio:no start line:/SourceCache/OpenSSL098/OpenSSL098-47/src/crypto/pem/pem_lib.c:648:Expecting: ANY PRIVATE KEY
我怀疑这意味着没有找到私钥。
有人知道这里有什么问题吗? 这是 Heroku 问题还是 openssl 问题(或 DNSimple 问题)?
我只是在具有 DNSimple 和 RapidSSL 的 Heroku 应用程序上安装 SSL 证书时遇到了几乎相同的问题,并希望在此处发布我的解决方案,以防遇到类似问题的人遇到此响应。
我已经按照SO和Heroku开发人员中心上任何地方的指示通过DNSimple和RapidSSL安装证书,但是每次我尝试使用命令添加证书时:
$ heroku certs:add server.crt bundle.pem server.key
无论我做什么,我都得到了这个错误:
$ Adding SSL Endpoint to mysite... failed
! Key could not be read since it's protected by a passphrase.
! Read instructions on how to remove the passphrase on:
! http://www.madboa.com/geek/openssl/#key-removepass`
我知道密钥没有密码(因为我多次经历了这个过程),但它仍然不想添加它们。我做了两件事,最终让它工作,尽管我不确定哪一件事是关键。
首先,我确保在Apache,Plesk和CPA框下从RapidSSL电子邮件链接到中间证书下载正确的PEM文件。
第二件事是通过执行以下步骤来验证我的 Heroku 工具带安装:https://devcenter.heroku.com/articles/heroku-command#installing-the-heroku-cli
事实证明,我仍在使用宝石,并且不得不卸载,直到我到达 heroku-toolbelt,之后我尝试再次添加证书,瞧。
为这个问题挣扎了好几天! 直到我遇到这个线程并遵循升级建议。 我要做的第一件事是
宝石卸载英雄库 --全部
我对保持可执行问题回答"是",因为我在stackoverflow上读过另一篇文章。然后我去 https://toolbelt.herokuapp.com/安装了工具带(即使heroku --version说它已安装)。 将其升级到 heroku-toolbelt 2.39.0。 重试以下命令,它起作用了:
heroku certs:add cert.cer bundle.pem server.key
也许我今晚终于可以睡一觉了:)
这真的很愚蠢,但据我所知,在Mac OS中使用TextEdit保存初始server.key和server.orig.crt文件时存在问题。
我改用了TextMate,一切正常。
旧的工具带安装是我在窗户上的问题。
尽管heroku update
将版本号从 2.30.1 更改为 2.39.0,但heroku version
显示由于某种原因它未正确更新。
我从 https://toolbelt.herokuapp.com/重新安装了工具带并再次尝试,一切正常。
heroku version
现在为我说了这句话,并且证书:添加工作正常:
heroku-gem/2.39.0 (i386-mingw32) ruby/1.9.2
我现在得到了同样的错误,即使最近有heroku/7.47.6
(来自 npm)。 原因是我从Let's Encrypt那里得到了一个椭圆曲线证书,私钥文件包含:
-----BEGIN EC PRIVATE KEY-----
根据 https://devcenter.heroku.com/articles/acquiring-an-ssl-certificate 不支持:
Heroku 仅支持证书的 RSA 密钥。不支持椭圆曲线键。
一旦我获得了 RSA 证书,它就起作用了。
(具体来说,脱水现在默认为--algo secp384r1
,我必须提供--algo rsa
。 但是这个想法应该与其他工具/CA 相同,您需要 RSA 证书。
对我来说,问题是 1Password 将证书中的换行符更改为空格,并将空格替换回换行符会有所帮助(当然,在证书正文中,而不是在----BEGIN CERTIFICATE----
部分中)。
因此,请检查您的证书/密钥内容,这可能是格式问题。