当前位置: 首页 > 知识库问答 >
问题:

Ruby OpenSSL::SSL::SSLError在CentOS 6.2

齐承泽
2023-03-14

我正在尝试在CentOS 6.2中运行以下代码(取自codeAcademy):

require 'rubygems'
require 'oauth'



# Change the following values to those provided on dev.twitter.com

# The consumer key identifies the application making the request.

# The access token identifies the user making the request.

consumer_key = OAuth::Consumer.new(

    "MY_KEY",

    "MY_SECRET")

access_token = OAuth::Token.new(

    "STRING1",

    "STRING2")


# All requests will be sent to this server.

baseurl = "https://api.twitter.com"



# The verify credentials endpoint returns a 200 status if

# the request is signed correctly.

address = URI("#{baseurl}/1.1/account/verify_credentials.json")



# Set up Net::HTTP to use SSL, which is required by Twitter.

http = Net::HTTP.new address.host, address.port

http.use_ssl = true

http.verify_mode = OpenSSL::SSL::VERIFY_PEER


# Build the request and authorize it with OAuth.

request = Net::HTTP::Get.new address.request_uri

request.oauth! http, consumer_key, access_token


# Issue the request and return the response.

http.start

response = http.request request

puts "The response status was #{response.code}"

并获取以下错误消息:

/usr/lib/ruby/1.8/net/1.586:在“连接”中:返回SSL_connect=1 errno=0 状态=SSLv3 读取服务器证书 B:证书验证失败(打开SSL:SSL::SSL错误)

密钥被省略了(毕竟它们是秘密的),但是我使用了正确的密钥。必要的宝石安装完毕。

问题可能是什么?

共有1个答案

宗政招
2023-03-14
http = Net::HTTP.new address.host, address.port
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
...

您还需要:

http.ca_file = File.join(File.dirname(__FILE__), "ca-cert.pem")

自其高音喇叭起:

$ openssl s_client -connect api.twitter.com:443
CONNECTED(00000003)
depth=1 C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = Terms of use at https://www.verisign.com/rpa (c)10, CN = VeriSign Class 3 Secure Server CA - G3
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
 0 s:/C=US/ST=California/L=San Francisco/O=Twitter, Inc./OU=Twitter Security/CN=api.twitter.com
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
 1 s:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=Terms of use at https://www.verisign.com/rpa (c)10/CN=VeriSign Class 3 Secure Server CA - G3
   i:/C=US/O=VeriSign, Inc./OU=VeriSign Trust Network/OU=(c) 2006 VeriSign, Inc. - For authorized use only/CN=VeriSign Class 3 Public Primary Certification Authority - G5
...

您需要顶级颁发者(级别1的i:),即VeriSign 3类公共主要认证机构-G5。您可以从公共根CA-VeriSign获得它。文件名是PCA-3G5.pem

下载根目录后,您可以再次运行s_client,服务器证书将验证:

$ openssl s_client -connect api.twitter.com:443 -CAfile PCA-3G5.pem
 类似资料:
  • 我试图通过Facebook或Twitter验证用户,让他们填写信息,然后单击保存(从而创建用户记录)。我得到一个OpenSSL错误的最后一步-点击保存后。这发生在设计注册控制器#创建方法中。 因此,我在Heroku上托管的Rails应用程序中遇到了这个错误: 我见过很多解决方案,但都不奏效。以下是我尝试过的一些事情: 1)安装gem 2)升级Heroku宝石v2.30,再推 3)这: 看起来一个问

  • 问题内容: 我试图使用通过Python 3 asyncio模块连接到另一方并出现此错误: 问题是错误的含义是什么。我的证书正确, 密钥文件(CA证书)可能不正确 。 问题答案: 假设正在使用版本3.6: 参见:https : //github.com/python/cpython/blob/3.6/Modules/_ssl.c#L3523-L3534 这是说失败了。因此,私钥不正确。 参考可能的版

  • 我试图使用来自Github(https://github.com/gto76/betbrain-scraper)的betbrain.py,其中包含以下代码: 但是,当运行时,它会返回此错误 我怎样才能解决这个问题?我在MacOS 10.12.1上运行Python 3.6.0

  • 问题内容: 我试图按此处所述通过python向iPhone发送推送通知,但出现以下错误: 如回溯所言,该错误是从python ssl模块内部引发的,但该消息对我而言并不正确。有什么想法可能有问题吗? 谢谢, 垫子 编辑: 使用的证书是根据证书和私钥创建的,如下所示: 问题答案: 这是我的工作方式: 从KeyChain内部以格式导出以下两种格式,而无需提供密码: 证书为 下为 在终端中,转到已导出证

  • 问题内容: 尝试使用Requests会话发出一个简单的get请求,但是我一直在获取特定网站的SSLerror。我认为问题可能出在网站上(我使用https://www.ssllabs.com进行了扫描,结果下降了),但是我不确定,因为我对该领域一无所知:)我想了解发生了什么。 一个解决方案/解释将是巨大的,谢谢! 编码: 我收到下一个错误: 我在https://www.ssllabs.com上进行了