web-dev-qa-db-ja.com

OCSP検証-ローカル発行者証明書を取得できません

SSLを最初からセットアップするのは初めてで、最初のステップを実行しました。 RapidSSLから自分のドメイン用のSSL証明書を購入し、そこにある手順に従って証明書をインストールしました。一般に、証明書は有効で、私のWebサーバー(nginx v1.4.6-Ubuntu 14.04.1 LTS)で動作していますが、OCSP OCSPをアクティブ化しようとすると、nginx error.logに次のエラーが記録されます。

証明書のステータスを要求しているときに、OCSP_basic_verify()が失敗しました(SSL:エラー:27069065:OCSPルーチン:OCSP_basic_verify:certificate検証エラー:検証エラー:ローカル発行者証明書を取得できません)、レスポンダ:gv.symcd.com

コマンドラインから次のコマンドでも試してみました:

openssl s_client -connect mydomain.tld:443 2>&1 </ dev/null

そして、私のerror.logのように「同じ」エラーが発生しました:

[...] SSL-Session:Protocol:TLSv1.2 Cipher:ECDHE-RSA-AES256-GCM-SHA384 [...] Start Time:1411583991 Timeout:300(sec)Verify return code:20(unable to get local)発行者証明書)

ただし、GeoTrust Root Certificatをダウンロードして、次のコマンドで試してみます。

openssl s_client -connect mydomain.tld:443 -CAfile GeoTrust_Global_CA.pem 2>&1 </ dev/null

確認はOKです:

[...] SSL-Session:Protocol:TLSv1.2 Cipher:ECDHE-RSA-AES256-GCM-SHA384 [...] Start Time:1411583262 Timeout:300(sec)Verify return code:0(ok)

そのため、GeoTrust Root Certが見つからないか、配信されていません。

私のnginxサイト構成:

server {
    listen 443;
    server_name mydomain.tld;

    ssl on;
    ssl_certificate /etc/ssl/certs/ssl.crt;
    ssl_certificate_key /etc/ssl/private/ssl.key;


    # Resumption
    ssl_session_cache shared:SSL:20m;

    # Timeout
    ssl_session_timeout 10m;

    # Security options
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
    ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

    # OCSP Stapling
    # It means that you sent status info about your certificate along with the request,
    # instead of making the browser check the certificate with the Certificate Authority.
    # This removes a large portion of the SSL overhead, the CloudFlare post above explains it in more detail.
    ssl_stapling on;
    ssl_stapling_verify on;
    #ssl_trusted_certificate /etc/ssl/certs/ssl.pem;

    #resolver 8.8.8.8 8.8.4.4 valid=300s;
    #resolver_timeout 10s;

    # This forces every request after this one to be over HTTPS
    add_header Strict-Transport-Security "max-age=31536000";[...]};

RapidSSLは彼のドキュメントに、次の証明書をssl.crtに次の順序で追加する必要があると書いています。

  1. myserver.crt
  2. 中間CAバンドル(RapidSSL SHA256 CA-G3)
  3. 中間CAバンドル(GeoTrust Global CA)

だから私はやった...

現在、私は何が間違っているのかわかりません...うまくいけば、ここにいる誰かが私を助けてくれるでしょう。

ありがとうございました!

17
kapale

エラーメッセージは同じでしたが、これら2つのエラーは無関係でした。

[...] SSL-Session:Protocol:TLSv1.2 Cipher:ECDHE-RSA-AES256-GCM-SHA384 [...] Start Time:1411583991 Timeout:300(sec)Verify return code:20(unable to get local)発行者証明書)

上記のエラーが発行されましたopenssl_clientコマンド。 Florian Heiglで説明されているように、openssl_clientには/etc/ssl/certsのGlobalsign Root証明書が必要なため、このエラーが発生します。


証明書のステータスを要求しているときに、OCSP_basic_verify()が失敗しました(SSL:エラー:27069065:OCSPルーチン:OCSP_basic_verify:certificate検証エラー:検証エラー:ローカル発行者証明書を取得できません)、レスポンダ:gv.symcd.com

このエラーの場合、特にnginx.confにssl_stapling_verify on;行を追加したときに、nginx ocspルーチンによって発行されました。

ここで、エラーがスローされる理由を説明するためのssl_stapling_verifyの-​​ ドキュメント からの抜粋

構文:ssl_stapling_verify on |オフ;

サーバーによるOCSP応答の検証を有効または無効にします。

検証を機能させるには、サーバー証明書発行者の証明書、ルート証明書、およびすべての中間証明書を、ssl_trusted_certificateディレクティブを使用して信頼できるものとして構成する必要があります。

つまり、(2)中間CAバンドル(RapidSSL SHA256 CA-G3)および(3)中間CAバンドル(GeoTrust Global CA)を提供する必要があります。 )からssl_trusted_certificateディレクティブへ。

cat GeoTrustGlobalCA.crt rapidsslG3.crt > ocsp-chain.crt

ocsp-chain.crtssl_trusted_certificateディレクティブに追加します。

17
masegaloeh

これの一部しか答えられない。

openssl s_client -connect mydomain.tld:443 2>&1 </ dev/null

/ etc/ssl/certsにGlobalsign Root certが必要です。 ca-certificatesパッケージがありますが、インストールされていますか?

1
Florian Heigl