OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certif
Posted
技术标签:
【中文标题】OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed) 同时连接到 Paypal【英文标题】:OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed) while connecting to Paypal 【发布时间】:2016-01-26 09:23:24 【问题描述】:我知道有很多关于这个错误的讨论,但很抱歉我无法找到任何可行的解决方案。
我正在使用 ShareTribe 开发一个电子商务网站。我正在尝试将 Paypal 用作支付网关。所以我正在使用 Activemerchant。
在开发机器上一切正常,但是当我将我的 rails 应用程序部署到生产环境时它会抛出
OpenSSL::SSL::SSLError(SSL_connect 返回=1 errno=0 state=SSLv3 读取服务器证书B:证书验证失败)
我将我的 Activemerchant 初始化为
config.after_initialize do
ActiveMerchant::Billing::Base.mode = :test
paypal_options =
login: "bla bla",
password: "bla bla",
signature: "bla bla",
appid: "APP-80W284485P519543T"
::EXPRESS_GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(paypal_options)
end
添加了 HTTPS 并禁用了 SSLV3
经过大量的谷歌搜索,我发现
SSLv3 被证明是不安全的 POODLE 漏洞。你 应确保您的系统具有最新版本的 OpenSSL,以便 您可以使用 TLSv1.2。
所以我禁用了 SSLV3,如下所示
openssl s_client -connect kickmarket.eu:443
CONNECTED(00000003)
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = www.kickmarket.eu
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = www.kickmarket.eu
verify error:num=27:certificate not trusted
verify return:1
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = www.kickmarket.eu
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/OU=Domain Control Validated/OU=PositiveSSL/CN=www.kickmarket.eu
i:/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA
---
Server certificate
-----BEGIN CERTIFICATE-----
...........................................
-----END CERTIFICATE-----
subject=/OU=Domain Control Validated/OU=PositiveSSL/CN=www.kickmarket.eu
issuer=/C=GB/ST=Greater Manchester/L=Salford/O=COMODO CA Limited/CN=COMODO RSA Domain Validation Secure Server CA
---
No client certificate CA names sent
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 2038 bytes and written 375 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: 4D23F4A942AAD4264BE96EB5F1E62204269D882A64ACFBD2D139CD2F10A449A0
Session-ID-ctx:
Master-Key: 1E381DAA3BA90FE3609606716E7E9A2EB2E2F671E9F3C4005D8EBAE009103A7AB771FB2AC8B45F169F43CBD0AD352E06
Key-Arg : None
Krb5 Principal: None
PSK identity: None
PSK identity hint: None
TLS session ticket lifetime hint: 300 (seconds)
TLS session ticket:
..................................
Start Time: 1446132175
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
但是重启nginx后我遇到了同样的问题。有什么办法可以解决这个问题。 任何建议将不胜感激。
【问题讨论】:
'Connection denied' 与 SSL 或 OpenSSL 无关。这意味着在您尝试连接的 IP:port 上没有任何东西在监听,或者防火墙(配置不正确以重置而不是忽略不需要的连接)在路上。在这种情况下,这意味着您没有通过端口 443 为 HTTPS 正确配置服务器。离题。 @EJP 我是否需要购买 ssl 证书才能使用 TLS? @EJP 请看我更新了我的帖子 使用 SNI 和 TLS 1.0 及更高版本。另见How to set SSLContext options in Ruby 和How to set TLS context options in Ruby (like OpenSSL::SSL::SSL_OP_NO_SSLv2)。我在 Ruby 中做简单的安全 101 事情变得如此沮丧,我不再使用它。 【参考方案1】:造成这种情况的主要原因是 rvm 安装的 ruby 确实会查找错误的证书目录,而 OSX-ruby 会查找正确的目录。
您想要做的不是使用任何预编译的 ruby,而是在本地机器上编译 ruby,如下所示:
rvm install 2.2.0 --disable-binary
您可以阅读详细说明https://toadle.me/2015/04/16/fixing-failing-ssl-verification-with-rvm.html
【讨论】:
【参考方案2】:这很可能是因为升级到了 SHA256 认证。请查看以下文档:
https://devblog.paypal.com/paypal-ssl-certificate-changes/
【讨论】:
请看一下,我需要你的帮助。 ***.com/questions/34262762/…以上是关于OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certif的主要内容,如果未能解决你的问题,请参考以下文章
使用 Ruby on Rails 的 HTTP GET 请求:OpenSSL::SSL::SSLError
带有 fb_auth.exchange_token 的 OpenSSL::SSL::SSLError
OpenSSL::SSL::SSLError(主机名“smtp.mandrillapp.com”与服务器证书不匹配)
OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certif
OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3/TLS write client hello
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certif