OCSP 验证 - 无法获取本地颁发者证书

OCSP 验证 - 无法获取本地颁发者证书

我是新手,刚开始设置 SSL,并完成了第一步。我从 RapidSSL 为我的域名购买了 SSL 证书,并按照步骤安装了该证书。一般来说,该证书在我的网络服务器(nginx v1.4.6 - Ubuntu 14.04.1 LTS)上有效且可用,但如果我尝试激活 OCSP OCSP,我会在 nginx error.log 中收到以下错误:

OCSP_basic_verify() 请求证书状态时失败(SSL:错误:27069065:OCSP 例程:OCSP_basic_verify:证书验证错误:验证错误:无法获取本地颁发者证书),响应者:gv.symcd.com

我也尝试使用命令行中的以下命令:

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

并得到了与我的 error.log 中相同的错误:

[...]SSL 会话:协议:TLSv1.2 密码:ECDHE-RSA-AES256-GCM-SHA384 [...] 开始时间:1411583991 超时:300(秒)验证返回代码:20(无法获取本地颁发者证书)

但是如果下载 GeoTrust 根证书并使用此命令尝试:

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

验证没问题:

[...]SSL 会话:协议:TLSv1.2 密码:ECDHE-RSA-AES256-GCM-SHA384 [...] 开始时间:1411583262 超时:300(秒)验证返回代码:0(确定)

因此,GeoTrust 根证书不知为何未被找到/传送。

我的 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. 我的服务器
  2. 中级 CA 捆绑包 (RapidSSL SHA256 CA - G3)
  3. 中级 CA 捆绑包 (GeoTrust Global CA)

所以我做了...

现在我不知道我做错了什么......希望这里有人可以帮助我。

谢谢你!

答案1

虽然错误消息相同,但这两个错误却毫无关联。

[...]SSL 会话:协议:TLSv1.2 密码:ECDHE-RSA-AES256-GCM-SHA384 [...] 开始时间:1411583991 超时:300(秒)验证返回代码:20(无法获取本地颁发者证书)

发出了上述错误openssl_客户端命令。正如 Florian Heigl 所解释的,您之所以会收到此错误,是因为 openssl_client 需要 Globalsign Root 证书/etc/ssl/certs


OCSP_basic_verify() 请求证书状态时失败(SSL:错误:27069065:OCSP 例程:OCSP_basic_verify:证书验证错误:验证错误:无法获取本地颁发者证书),响应者:gv.symcd.com

对于此错误,它是由nginx ocsp 例程,尤其是当您ssl_stapling_verify on;在 nginx.conf 中添加行时。

以下是部分摘录文档解释ssl_stapling_verify为什么会抛出错误

语法:ssl_stapling_verify on | off;

启用或禁用服务器对 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.crt中。ssl_trusted_certificate

答案2

我只能回答其中的一部分。

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

需要 Globalsign Root 证书位于 /etc/ssl/certs 中。有一个 ca-certificates 包,您安装了吗?

相关内容