nginx SSL_do_handshake() 失败

nginx SSL_do_handshake() 失败

这是我第一次在开发机器上配置 SSL 证书(我不是系统管理员 - 我需要 SSL 才能与 Facebook 合作)。我决定使用 ngingx 代理 ruby​​ sinatra 应用程序,没什么特别的。

这是我在 Facebook 尝试连接我的 HTTP 服务器时收到的错误。据我所知,nginx 是罪魁祸首:

2015/11/26 15:42:03 [info] 42872#0: *3 SSL_do_handshake() failed (SSL: error:14094418:SSL routines:ssl3_read_bytes:tlsv1 alert unknown ca:SSL alert number 48) while SSL handshaking, client: 31.13.113.70, server: 0.0.0.0:4567

这是我做的:

  1. 从 RapidSSL 下载证书(.key、.crt 和 .csr)
  2. 从 RapidSSL 下载了受信任的证书(https://knowledge.rapidssl.com/library/VERISIGN/ALL_OTHER/RapidSSL%20Intermediate/RapidSSL_CA_bundle.pem)并本地保存在 /etc/ssl/cert/ 下
  3. 本地安装nginx并配置如下:

    upstream server {
      server 0.0.0.0:8080;
    }
    
    server {
      listen 4567  default_server ssl;
      server_name  sandbox.thing.it;
      ssl_certificate  /Users/ngw/thing/server.crt;
      ssl_certificate_key /Users/ngw/thing/server.key;
      ssl_stapling on;
      ssl_stapling_verify on;
      ssl_trusted_certificate /etc/ssl/cert/RapidSSL_CA_bundle.pem;
      resolver 8.8.8.8 8.8.4.4 valid=300s;
      resolver_timeout 10s;
    
      ssl_prefer_server_ciphers On;
      ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
      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;
    
     location / {
       proxy_pass http://server;
       proxy_set_header Host $host;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }
    }
    
  4. 分别在端口 4567 和 8080 上重新启动 nginx 和 puma

  5. 去了https://sandbox.thing.it,应用程序响应符合预期,连接已加密并且证书似乎是正确的。

  6. 前往 Facebook 并尝试注册新的页面订阅(https://developers.facebook.com/docs/graph-api/webhooks/v2.2)。Facebook 尝试验证我的回调 URL 时报告了上面的错误(SSL_do_handshake() 失败)

有什么建议吗?

相关内容