2017-10-20 123 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.