这是我第一次在开发机器上配置 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
这是我做的:
- 从 RapidSSL 下载证书(.key、.crt 和 .csr)
- 从 RapidSSL 下载了受信任的证书(https://knowledge.rapidssl.com/library/VERISIGN/ALL_OTHER/RapidSSL%20Intermediate/RapidSSL_CA_bundle.pem)并本地保存在 /etc/ssl/cert/ 下
本地安装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; } }
分别在端口 4567 和 8080 上重新启动 nginx 和 puma
去了https://sandbox.thing.it,应用程序响应符合预期,连接已加密并且证书似乎是正确的。
前往 Facebook 并尝试注册新的页面订阅(https://developers.facebook.com/docs/graph-api/webhooks/v2.2)。Facebook 尝试验证我的回调 URL 时报告了上面的错误(SSL_do_handshake() 失败)
有什么建议吗?