我在尝试请求使用TLS 1.3的端点时遇到问题
require 'base64'
require 'openssl'
require 'rest-client'
auth_payload = {
grant_type: 'client_credentials',
scope: 'cobrancas.boletos-info cobrancas.boletos-requisicao'
}
encoded_token = Base64.strict_encode64(
'MY_CLIENT_ID:MY_CLIENT_SECRET'
)
response = RestClient::Request.execute(
method: 'post',
url: "https://oauth.sandbox.bb.com.br/oauth/token",
payload: auth_payload,
verify_ssl: OpenSSL::SSL::VERIFY_NONE,
headers: {
content_type: 'application/x-www-form-urlencoded',
authorization: "Basic #{encoded_token}"
}
)
我尝试删除verify_ssl
并添加ssl_version: 'TLSv1_3'
,结果返回错误unknown SSL method TLSv1_3 (ArgumentError)
传递verify_ssl: OpenSSL::SSL::VERIFY_NONE
属性有时候可以工作,有时候会返回错误Connection reset by peer - SSL_connect (Errno::ECONNRESET)
如果不传递verify_ssl
和ssl_version
属性,则返回错误SSL_connect returned=1 errno=0 peeraddr=1.1.1.1:443 state=error: certificate verify failed (unable to get local issuer certificate) (OpenSSL::SSL::SSLError)
尝试使用Ruby 2.7.6和3.1.2都不工作。
通过CURL,每次我尝试它都有效(而且有很多)
curl -X POST https://oauth.sandbox.bb.com.br/oauth/token -v \
-H "Authorization: Basic ${MY_TOKEN}" \
-d "grant_type=client_credentials"
我在互联网上做了很多研究,据我所知,Ruby仍然不支持使用TLS 1.3的https端点,对吗?
1条答案
按热度按时间ars1skjm1#
OPEN_SSL
已弃用ssl_version
参数,请尝试使用此处提到的min_version
。我看到你正在使用
RestClient
,这可能是因为gem没有更新为使用OpenSSL的新格式。您可以使用下面的代码来测试控制台的SSL版本。