我正在分析加密货币市场数据,并使用某些交易所的公共API。该程序每隔几秒钟发出一次HTTPS请求。奇怪的是,它发出了336个请求,而在337个请求上,它总是失败并显示:
/.rbenv/versions/2.4.5/lib/ruby/2.4.0/net/protocol.rb:44:in `connect_nonblock': SSL_connect SYSCALL returned=5 errno=0 state=error: certificate verify failed (OpenSSL::SSL::SSLError)
我尝试了请求之间的各种延迟(1秒,5、10秒),各种不同的交换(Bittrex,Poloniex,Tradeogre),各种版本的Ruby(2.3.8、2.4.5、2.5.3)和各种托管(Google Compute Engine,Amazon EC2)上的各种Linux发行版(Ubuntu 18.04.2 LTS,Debian 9.8)。总是一样的-它在第337次迭代中失败。 在我的本地计算机(Ruby 2.5.3,Linux Mint 18.3)上,该程序运行时没有此类问题,仅在服务器上运行时才失败。 不知道问题是什么以及如何解决。 感谢您的建议。
答案 0 :(得分:0)
想法:
禁用服务器证书验证(这是不安全): Private Const SW_SHOWMAXIMIZED = 3
Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long _
) As Long
Public Sub OpenFile(by val FileName As String, stPath As String)
'ShellExecute 0, "Open", FileName, "", "", 1
Dim result As Long, hwnd As Long
hwnd = GetActiveWindow&
result = ShellExecute(hwnd, "Open", FileName, "", stPath, SW_MAXIMIZE)
'FileName= "8_20190311144227.jpg"
End Sub
(请参阅https://stackoverflow.com/a/19172281/384689)
尝试使用其他CA(证书颁发机构)存储。例如,您可以下载Firefox使用的版本:https://curl.haxx.se/docs/caextract.html并将其作为open(request_uri, { ssl_verify_mode: OpenSSL::SSL::VERIFY_NONE })
参数传递给start()方法