Tag: openssl

将PKCS#8二进制密钥加载到Ruby中

我正在尝试将以二进制DER格式( PKCS#8 )编码的特定私钥加载到Ruby中。 但是, OpenSSL::PKey无法识别它。 我可以通过做一些控制台工作并将其转换为像这样的PEM来使其工作: openssl pkcs8 -inform DER -in file.key -passin pass:xxxxxxxx >private_key.pem 在此之后,可以正确读取密钥。 但是,因为我希望整个过程在内存中完成,而不是写入和读取文件。 所以我的问题是:是否可以将二进制编码的DER格式的私钥加载到Ruby / OpenSSL中? 感谢您的时间, 费尔南多

如何在Ruby中创建双向SSL套接字

我正在构建一个客户端Ruby库,它连接到服务器并等待数据,但也允许用户通过调用方法来发送数据。 我使用的机制是有一个初始化套接字对的类,如下所示: def initialize @pipe_r, @pipe_w = Socket.pair(:UNIX, :STREAM, 0) end 我允许开发人员调用以向服务器发送数据的方法如下所示: def send(data) @pipe_w.write(data) @pipe_w.flush end 然后我在一个单独的线程中有一个循环,我从连接到服务器的socket和@pipe_r : def socket_loop Thread.new do socket = TCPSocket.new(host, port) loop do ready = IO.select([socket, @pipe_r]) if ready[0].include?(@pipe_r) data_to_send = @pipe_r.read_nonblock(1024) socket.write(data_to_send) end if ready[0].include?(socket) data_received = socket.read_nonblock(1024) h2 << data_received break if socket.nil? || socket.closed? || socket.eof? […]

Net :: HTTP对HTTPS请求的响应非常慢

出于某种原因,在我的开发机器上,我对通过Net :: HTTP执行的HTTPS请求的响应非常非常慢。 我尝试过RestClient和HTTParty,他们都有同样的问题。 它似乎无处不在。 我已经毫无问题地提出了数百次这些请求,但今天它们的速度令人难以忍受。 pry(main)> puts Time.now; HTTParty.get(‘https://api.easypost.com/v2/addresses’); puts Time.now; 2015-04-29 08:07:08 -0500 2015-04-29 08:09:39 -0500 如您所见,响应耗时2.5分钟。 而且不只是这个EasyPost API URL。 我已经尝试过多次SSL请求到我知道可以连接的服务器( https : //google.com,https://weather.com等),它们都会导致相同的行为。 此外,我注意到从HTTP重定向到HTTPS的请求也会发生同样的情况。 现在,查看非ssl请求: pry(main)> puts Time.now; HTTParty.get(‘http://lookitsatravis.com’); puts Time.now; 2015-04-29 08:12:22 -0500 2015-04-29 08:12:22 -0500 瞬间。 是什么赋予了? 我猜这是Ruby和OpenSSL之间的某些配置问题。 我重新安装了两个(使用Ruby 2.2.1和OpenSSL 1.0.2a),我正在使用OS X Yosemite 10.10.2来获取它的价值。 重新安装了我的所有gem,但问题仍然存在。 我尝试更改我的DNS设置以防万一,但没有骰子。 有没有其他我可以看到的或我可以改变的任何配置将解决这个问题?

指定TLSv1时SSLv3证书validation失败?

有人可以帮我解决这个问题。 我在网上看过这个问题,但是没有人有足够的答案。 我在Ubuntu,Ruby 1.8.7和OpenSSL 1.0.1上 Net::HTTP.ssl_context_accessor ‘ssl_version’ uri = URI.parse(“https://www.paypal.com”) http = Net::HTTP.new(uri.host, uri.port) http.verify_mode = OpenSSL::SSL::VERIFY_PEER http.use_ssl = true http.ssl_version = :TLSv1 request = Net::HTTP::Get.new(uri.request_uri) response = http.request(request) 它回来了 OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed 如果我指定TLSv1,为什么抱怨SSLv3? 我知道它正在使用TLSv1,因为如果我这样做了 http.ssl_version = :SSLv3 它会回来 OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server […]

Mechanize的SSL错误

我在irb上得到了这些命令 require ‘mechanize’ agent = Mechanize.new agent.get(‘https://monabo.lemonde.fr/customer/account/forgotpassword/’) 我收到了这个错误: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=unknown state: sslv3 alert handshake failure 我试过Mac,它的工作原理我没有这个错误。 但是,它在我的计算机上不起作用(运行Linux Mint 17)。 我尝试了什么: 导出此变量: export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt 设置此变量: agent.agent.http.ca_file = ‘/etc/ssl/certs/ca-certificates.crt’ 设置这个: OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE 更改ruby版本(我目前正在使用ruby 2.1.5p275) 这些解决方案都没有改变这个问题。 我怀疑服务器需要一个特定的OpenSSL版本。 请注意,我可以通过mechanize请求https://google.com并确保其有效,但不是https://monabo.lemonde.fr/customer/account/forgotpassword/ 。 它在mac上工作的事实可能会假设我的配置错误。 编辑:这是此命令的输出: ➜ swiff git:(master) ✗ openssl s_client -connect monabo.lemonde.fr/customer/account/forgotpassword:443 -tls1 -servername monabo.lemonde.fr/customer/account/forgotpassword | openssl […]

调用服务器到服务器CloudKit Web服务时的授权错误

我正在尝试实施与CloudKit Web服务的一些基本集成, 遵循Apple的身份validation请求指南 。 我已经从这个以及关于如何正确授权请求的问题中得到了一些帮助,并且似乎正确地遵循了所有步骤,但我仍然从Apple获得了401 AUTHENTICATION_FAILED错误。 我定位的端点是一个POST端点,用于在给定记录名称的情况下检索记录。 我已经在我的代码中添加了注释,以显示我在不同阶段获得的输出,并且我使用了替代证书,因此我没有提供我的正版私钥: def self.signature(parameters, date, image_id) #date: 2016-08-14T14:32:20Z #parameters: {“records”:[{“recordName”:”7DBC4FAD-D18C-476A-89FB-14A515098F34″}]} encoded_parameters = Digest::SHA256.base64digest(parameters) #encoded_parameters: 6gmJ4AvmJgkNY4SJm6ImOxZaZ07J7cih/tRXI0zkRjQ= url_subpath = CloudKit.url_subpath #url_subpath: /database/1/iCloud.ProjectDent.TwIM/development/public/records/lookup message = date + ‘:’ + encoded_parameters + ‘:’ + url_subpath #message: 2016-08-14T14:23:35Z:6gmJ4AvmJgkNY4SJm6ImOxZaZ07J7cih/tRXI0zkRjQ=:/database/1/iCloud.ProjectDent.TwIM/development/public/records/lookup private_key = OpenSSL::PKey.read(File.read(‘altkey.pem’)) signature = private_key.dsa_sign_asn1(OpenSSL::Digest::SHA256.digest(message)) #signature: -? WX?xfc???ɔ???,?Ț?Փv?3+Xt!?$R?_Y?×*?,?3??Z-\#?ŭ?Ƿh encoded_signature = Base64.strict_encode64(signature) #encoded_signature: MEUCIFdYlHhmrxoIY8KW1tT6yZT17bYsP8ia09WTdpEzK1h0AiEA0yRSh39fWYHDlyqJLNgzhr9aLVwj2cWtkse3aA0tGZI= return encoded_signature […]

干净安装后持久的Ruby segfaulting

当使用Koala gem通过HTTP进行通信时,Ruby会保持segfaulting: /Users/pawel/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:799: [BUG] Segmentation fault 我尝试过以下方法: 运行which -a ruby ,通过MacPorts显示多个ruby。 所以我删除了那些并再次运行相同的命令只返回/usr/bin/ruby 我删除了PostgreSQL的MacPorts版本并用Homebrew安装了它(使用MacPorts,它安装了自己的OpenSSL版本) 运行openssl version将返回OpenSSL 1.0.0g 18 Jan 2012 我从RVM中删除了Ruby 1.9.3并尝试了下面没有用的Luciano方法。 我也尝试从RVM重新安装1.9.3并指定–with-openssl-dir=/opt/local因为which openssl返回/opt/local/bin/openssl 我重新安装了RVM(它现在是/Users/pawel/.rvm/bin/rvm的版本1.10.2) 我已经升级到Ruby 1.9.3-p125并且还尝试过1.9.2 我按照这里的说明进行了操作: http : //www.christopherirish.com/2011/09/02/ruby-1-9-2-segmentation-fault-and-openssl/ (实际上是我上面的步骤)。 我也读过克里斯托弗先前的post。 在我运行以下项目的项目目录中,我得到了预期的0 。: ruby -rubygems -e” require ‘eventmachine’; require ‘openssl’ “; echo $? 我试过sudo port -f deactivate openssl但是当我尝试启动Rails服务器时,我得到的Library not loaded: /opt/local/lib/libssl.1.0.0.dylib 关于我还能尝试什么,或者我错过了什么,我需要更多的想法。

使用Ruby OpenSSL库时无效的公钥

我正在尝试在Ruby中生成RSA密钥对,主要使用此博客文章中的示例。 这是我稍加修改的代码: def generate_keypair(passphrase) rsa_key = OpenSSL::PKey::RSA.new(2048) cipher = OpenSSL::Cipher::Cipher.new(‘aes-256-cbc’) private_key = rsa_key.to_pem(cipher, passphrase) public_key = rsa_key.public_key.to_pem return private_key, public_key end 这成功生成了私钥和公钥,我可以将它们写到文件系统上的文件中。 irb(main):002:0> private_key1, public_key1 = generate_keypair(‘test’) […output of keys…] irb(main):003:0> File.open(“key.pem”,”w”) {|f| f.write(private_key1) } => 1766 irb(main):004:0> File.open(“pubkey.pem”,”w”) {|f| f.write(public_key1) } => 426 但是,当我尝试使用此公钥时,OpenSSL会抱怨: $ openssl rsautl -encrypt -inkey pubkey.pem -pubin -in text.txt -out […]

为什么我不能使“OpenSSL with Ruby”和“Command line OpenSSL”可以互操作?

在尝试建立可互操作的加密系统时,我在轻松的“概念validation”期间遇到了一种奇怪的情况。 我在Ruby中编写了以下代码: 从我的文件系统上的虚拟文本文件创建加密文件 解密加密文件 与原始文件进行比较,并检查它们是否相同 这是代码: require ‘openssl’ require ‘base64’ # Read the dummy file data = File.read(“test.txt”) # Create an encrypter cipher = OpenSSL::Cipher::AES.new(256, :CBC) cipher.encrypt key = “somethingreallyreallycomplicated” cipher.key = key # Encrypt and save to a file encrypted = cipher.update(data) + cipher.final open “encrypted.txt”, “w” do |io| io.write Base64.encode64(encrypted) end # Create […]

从Ruby打开RSA私钥

我想我知道如何创建自定义加密RSA密钥,但是如何读取像ssh-keygen那样加密的密钥呢? 我知道我可以这样做: OpenSSL::PKey::RSA.new(File.read(‘private_key’)) 但是然后OpenSSL要求我提供密码……我怎样才能将它作为参数传递给OpenSSL? 而且,如何创建一个与ssh-keygen生成的兼容的? 我做这样的事情来创建私有加密密钥: pass = ‘123456’ key = OpenSSL::PKey::RSA.new(1024) key = “0000000000000000#{key.to_der}” c = OpenSSL::Cipher::Cipher.new(‘aes-256-cbc’) c.encrypt c.key = Digest::SHA1.hexdigest(pass).unpack(‘a2’ * 32).map {|x| x.hex}.pack(‘c’ * 32) c.iv = iv encrypted_key = c.update(key) encrypted_key << c.final 此外,当我尝试无密码登录时,OpenSSL :: PKey :: RSA.new(1024)(没有加密)生成的密钥不起作用(即,我将公钥复制到服务器并使用私有密钥到登录)。 此外,当我通过OpenSSL打开一个ssh-keygen文件,然后检查其内容时,它似乎在键的开头和结尾有其他字符。 这是正常的吗? 我真的不了解这些安全性的东西,但我正在努力学习。 我做错了什么?