ssl - 在部署 Heroku 应用程序之前,如何验证我的新 SSL key 和证书将有效地为 SSL 提供服务?

标签 ssl heroku https ssl-certificate

Heroku gives simple instructions用于更新您的 SSL 证书:

$ heroku certs:update server.crt server.key

但是,没有迹象表明在部署之前进行了任何验证。由于这是生产环境,我想确保我提供给他们的两个文件不会造成任何安全困惑。

我有我的 foo_com.crt(由 DigiCert 签名)、server.key 和 DigitCertCA.crt。

I've found that I can use security verify-cert -c certificate.pem 来验证我的证书(在 OS X 上)。我的证书虽然没有验证:

$ security verify-cert -c foo_com.crt
Cert Verify Result: CSSMERR_TP_NOT_TRUSTED

这让我相信我的中介可能不可信但是:

$ security verify-cert -c DigiCertCA.crt
...certificate verification successful.

指定SSL的目的也成功

$ security verify-cert -p ssl -c foo_com.crt
...certificate verification successful.

我也在 Linux 机器上试过,结果也类似。

$ openssl verify foo_com.crt                            
C = __, ST = ___, L = ___, O = "Foo Inc", CN = foo.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error foo_com.crt: verification failed

$ openssl verify -CAfile DigiCertCA.crt foo_com.crt
foo_com.crt: OK

$ openssl verify -purpose sslserver  -CApath /etc/ssl/certs foo_com.crt
C = __, ST = ___, L = ___, O = "Foo Inc", CN = foo.com
error 20 at 0 depth lookup: unable to get local issuer certificate
error foo_com.crt: verification failed

我如何确保在 Heroku 中更新我的证书时,一切都会顺利进行?

相关:Renewing SSL certificate on Heroku

最佳答案

一位同事建议我运行 nginx,这让我自信地知道一切都会顺利部署。

我配置了nginx

server {
     listen 443 http2 ssl;
     listen [::]:443 http2 ssl;

     server_name server_IP_address;

     ssl_certificate /Users/traff/cert/gd.crt;
     ssl_certificate_key /Users/traff/cert/server.key;

     server_name  localhost;
     ...
}

设置完 nginx 服务器后,我运行了 openssl s_client -connect localhost:443 -CApath/etc/ssl/certs。然后,在我的主机中设置 foo.com 以指向我的 nginx 服务器。我使用了 curl https://foo.com

使用 foo_com.crtDigiCertCA.crt(按此顺序)和 server.key 的串联,上传成功。

此外,虽然 Heroku 的文档没有说明,但更新步骤确实验证了 SSL 将正常服务

$ heroku certs:update foo_com_DigiCertCA_cat.crt server.key -a my-app
Resolving trust chain... done
 _    Potentially Destructive Action
 _    This command will change the certificate of endpoint ____
 _    (_______.herokussl.com) from _ my-app.
 _    To proceed, type my-app or re-run this command with
 _    --confirm my-app

> my-app
Updating SSL certificate _____ (____.herokussl.com) for _ my-app... done
Updated certificate details:
Common Name(s): foo.com
Expires At:     DateTime
Issuer:         /C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert SHA2 High Assurance Server CA
Starts At:      DigiCert
Subject:        blah blah blah
SSL certificate is verified by a root authority.

关于ssl - 在部署 Heroku 应用程序之前,如何验证我的新 SSL key 和证书将有效地为 SSL 提供服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46854972/

相关文章:

c# - 使用 HTTPS (SSL) 分发带有嵌入式 (OWIN) 网络服务器的应用程序

ssl - 使用 SSL 的 CXF 客户端抛出 SSLHandshakeException

javascript - 网站在 Chrome 中显示部分 ssl 问题

ssl - 我通过 godaddy 为我的网站购买了 SSL 证书。如何强制我的网站始终加载 https 而不是 http?

ios - UIWebView 加载第一个 HTTPS 页面正常,但在打开链接时失败

swift - Apple 传输安全

flask - 如何使 Flask Heroku 应用程序成为渐进式 Web 应用程序 (pwa)

ruby-on-rails - 使用 Heroku 的分支策略进行良好的 Git 部署?

postgresql - Heroku 无法识别 DATABASE_URL

google-app-engine - 非默认版本的 appspot.com 子域上的 SSL