2017-10-20 97 views
0

Heroku的gives simple instructions用于更新证书的SSL:如何在部署之前验证我的新SSL密钥和证书是否会在我的Heroku应用程序上有效地提供SSL?

$ heroku certs:update server.crt server.key 

但是,没有迹象表明任何验证部署之前完成。由于这是制作,我想确保我给他们的两个文件不会导致任何安全问题。

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

I've found that I can usesecurity 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

+0

有没有使用[自动证书管理(HTTPS任何理由:// devcenter .heroku.com /用品/自动证书管理)?这比你所做的更简单。 – Chris

+0

不是一个很好的理由。只要说我们连锁店的一位经理更喜欢我们推出自己的产品。 – 0xtobit

回答

0

从同事有人建议运行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.