我正在尝试将预先存在的通配符 SSL 证书添加到 Amazon EC2 上的单个 Ubuntu 实例,其中 Web 服务器是 Nginx,并且我运行单个子域。
我从提供证书的原始供应商那里获得了名为 private.key、selfsigned.crt 和 ssl-shared-cert.inc 的文件。我已将这些文件上传到 EC2 的 /etc/nginx/ssl(这是我创建的新文件夹)。我之前在 Heroku 上使用过相同的文件,尽管那里的流程似乎非常具体。它们也用于我们的主要域(https://wwww.minnpost.com),但我没有参与设置它们,因为我相信我们的托管供应商已经为我们完成了。
ssl-shared-cert 如下所示:
SSLEngine On
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile "/path/to/selfsigned.crt"
SSLCertificateKeyFile "/path/to/private.key"
在我的 EC2 实例上,我将站点的配置更改为:
server {
listen 8080;
listen 443 ssl;
server_name subdomainurl;
ssl_certificate /etc/nginx/ssl/selfsigned.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
root path;
...
}
当我运行时,sudo nginx -t
我得到以下信息:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
于是我运行了sudo service nginx restart
,结果显示 OK。首先我检查了 HTTP 版本是否仍然有效,结果显示可以,但 HTTPS 仍然无效。当我运行 curl 时,它返回:
* SSL certificate problem: Invalid certificate chain
* Closing connection 0
curl: (60) SSL certificate problem: Invalid certificate chain
More details here: http://curl.haxx.se/docs/sslcerts.html
我从这里可以去哪里?
答案1
如果证书不是实际上是自签名的,那么我能想到两种可能性。第一种是 curl 缺少受信任的授权包(Debian 在名为 的包中保存了一组受信任的证书ca-certificates
)。如果是这种情况,那么没有 https 站点可以使用它。你能检查一下你的 curl 是否能与其他站点一起使用吗?
如果 curl 正常工作,那么您可能缺少签名者应该提供的证书链,该证书链将您证书上的签名与主要受信任证书之一链接起来。根据此处的说明您应该将证书链(每个证书均为 PEM 格式)添加到结尾(selfsigned.crt
服务器自己的证书必须先)。
答案2
DerkK 关于自签名证书的说法完全正确。您需要不同的证书。我有一个关于 Let's Encrypt 和 Nginx 的教程在这里- 它相对简单。