在 /etc/ssl 中,当我这样做时,sudo openssl verify mywebsite.pem
我收到一条消息指出
mywebsite.pem: OU = GT46830179, OU = See www.rapidssl.com/resources/cps (c)15, OU = Domain Control Validated - RapidSSL(R), CN = *.logitapp.com
error 20 at 0 depth lookup:unable to get local issuer certificate
我通过从 sslpoint 的证书生成器复制到 nano 中创建了 mywebsite.key。我通过运行创建了 mywebsite.pem sudo cat mywebsite.crt sslpointintermediate.crt >> mywebsite.pem
。通过从电子邮件中粘贴到 nano 中创建了 mywebsite.crt 和 sslpointintermediate.crt安全节点发给我的。
mywebsite.pem 和 mywebsite.key 实际上不是文件的名称。
使用 Debian 8。尝试让 nginx 和 gunicorn 与 ssl 配合使用。遇到了问题,我认为这(至少部分)是因为 ssl 证书安装不正确,如上面的输出所示。我该如何解决这个问题?
编辑:
在此问题的先前版本中,我还询问了有关“openssl 验证”.key 文件的问题。我已删除该问题的一部分,因为尝试这样做毫无意义。
答案1
如果您想使用openssl verify
,您应该使用:
openssl verify -CAfile your-intermediates-and-final.pem mywebsite.crt
使用 your-intermediates-and-final.pem,其中包含所有中间证书和最终证书(受信任的锚点),采用 PEM 格式。如果要使用该-CApath /etc/ssl/certs
选项,每个中间证书都必须位于 /etc/ssl/certs 目录中,并且必须以 root 身份执行:
$ c_rehash
nginx 似乎配置正确。验证权限是否正确,以及您的server {}
或http {}
部分中是否有以下两个配置参数:
ssl_certificate /path/to/your/mywebsite.pem;
ssl_certificate_key /path/to/your/mywebsite.key;
在您的server {}
部分中:
listen 443 ssl;
编辑-这是对原始问题的部分回答:
该密钥仅包含私钥而没有证书,因此“openssl 验证”它毫无意义。
答案2
OpenSSL 仅在需要将私有数据读取为 中的私钥时才需要以 root 身份运行/etc/ssl/private/
。对于证书验证,不需要 root。 中的证书/etc/ssl/certs
应该可供所有人读取,以便每个用户和软件都可以验证证书。或者每次访问网站时都要输入 root 密码?
$ openssl verify mywebsite.pem
mywebsite.pem: OU = GT46830179, OU = See www.rapidssl.com/resources/cps (c)15, OU = Domain Control Validated - RapidSSL(R), CN = *.logitapp.com
error 20 at 0 depth lookup:unable to get local issuer certificate
查看 verify(1ssl) 的手册页:
2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate
the issuer certificate of a looked up certificate could not be found. This normally means the list of trusted certificates is not complete.
您需要向 openssl 提供一些有关链中需要证书的位置的信息:
openssl verify [-CApath directory] [-CAfile file] [-untrusted file] [certifictes]
例如:
openssl verify -CAfile RootCert.pem -untrusted Intermediate.pem UserCert.pem
也可以看看这个问题
$ openssl verify mywebsite.key I get a message saying
unable to load certificate
139893743232656:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
由于您提供了私钥,因此无法加载证书。这与证书相反,证书包含公钥以及有关证书链、有效性等的其他信息。错误消息清楚地说明了预期的内容:Expecting: TRUSTED CERTIFICATE
如果您的操作系统尚未信任根证书,而您希望它被信任,则只需“安装”根证书。但是,当您谈论服务器时,将您自己的域的证书包含在信任存储中是没有意义的。在这种情况下,您的软件(nginx)需要能够访问包含完整信任链的证书文件,从您域的叶证书到您的 CA 的根证书(可选)。
请参阅 nginx 的文档,查找其他此类问题(互联网包括 SE 和 SF)或者对您的问题提供准确而详细的描述。
答案3
你必须猫所有证书到最终的 CA_Chain.crt:
cat RootCA.crt 中间证书1 中间证书2 > CA_Chain.crt
openssl 验证-CAfile CA_Chain.crt 网站.crt
(website.crt 由 IntermediateCert2 签名)
答案4
awscli 似乎使用系统本地 openssl 来验证证书。在我的 Mac 上,我的 openssl 版本是 0.9.8,但我无法验证我的证书。您可以通过输入命令来检查 openssl 的版本
openssl version
我切换到包含 openssl 版本 0.10 的系统并修复了该问题。您也可以升级您的 openssl 版本。
我尝试再次上传证书并且成功了。