Tag: openssl

解密使用Ruby在命令行上生成的salted AES文件

我想解密以前使用OpenSSL的命令行工具加密的ruby 2.1脚本中的文本文件: openssl enc -aes-256-cbc -a -salt -in my_file 如命令中所示,该文件是AES-256-CBC加密,盐渍和base64编码。 密码是已知的,但不是IV和密钥,它们是遵循此代码片段所必需的,取自ruby文档 : decipher = OpenSSL::Cipher::AES.new 256, :CBC decipher.decrypt decipher.key = key decipher.iv = iv plain = decipher.update(encrypted_text) + decipher.final 在尝试寻找答案的同时,我发现了gemAESCrypt gem,它可以简化en-and decrypting,但目前发布的版本与ruby 2.1不兼容。 看着它的源代码,我发现密钥是通过消化密码来检索的 ,而IV只是保留nil 。 所以我尝试了以下运行: encoded_and_encrypted_text = File.read my_file_path encrypted_text = Base64.decode64 encoded_and_encrypted_text.to_s.strip decipher = OpenSSL::Cipher::AES.new 256, :CBC decipher.decrypt decipher.key = OpenSSL::Digest::SHA256.new(my_password).digest plain_text […]

使用rbenv和ruby-build构建ruby时会出现未定义的符号:SSLv2_method

我正在尝试在带有ARMv7处理器的Synology DS215j上安装ruby 2.2.4或2.3.0。 我使用optware-ng来安装gcc,make,openssl,openssl-dev和zlib。 我按照自述文件中的说明安装了rbenv(版本1.0.0-19-g29b4da7)和ruby-build插件。 这些是使用optware-ng安装的软件包及其版本 binutils – 2.25.1-1 gcc – 5.3.0-6 gconv-modules – 2.21-3 glibc-opt – 2.21-4 libc-dev – 2.21-1 libgmp – 6.0.0a-1 libmpc – 1.0.2-1 libmpfr – 3.1.3-1 libnsl – 2.21-3 libstdc++ – 6.0.21-6 make – 4.1-1 ncurses – 5.7-4 openssl – 1.0.2f-1 openssl-dev – 1.0.2f-1 readline – 6.1-2 ruby – 2.2.0-1 screen […]

如何在Ruby中设置TLS上下文选项(如OpenSSL :: SSL :: SSL_OP_NO_SSLv2)

在C中使用OpenSSL时,我们在上下文中设置选项以删除弱受损和受伤的协议,如SSLv2和SSLv3。 从ssl.h ,这里有一些有用的选项的位掩码: #define SSL_OP_NO_SSLv2 0x01000000L #define SSL_OP_NO_SSLv3 0x02000000L #define SSL_OP_NO_TLSv1 0x04000000L #define SSL_OP_NO_TLSv1_2 0x08000000L #define SSL_OP_NO_TLSv1_1 0x10000000L 但是,我在Ruby中设置它们时遇到了麻烦: if uri.scheme == “https” http.use_ssl = true http.verify_mode = OpenSSL::SSL::VERIFY_PEER http.options = OpenSSL::SSL::SSL_OP_NO_SSLv2 | OpenSSL::SSL::OP_NO_SSLv3 | OpenSSL::SSL::SSL_OP_NO_COMPRESSION end 结果是: $ ./TestCert.rb ./TestCert.rb:12:in `’: uninitialized constant OpenSSL::SSL::SSL_OP_SSL2 (NameError) 1.9.3 (和2.0.0)的Ruby文档甚至懒得提及它。 如何在Ruby中设置TLS上下文选项? 相关: 在ruby中设置SSLContext选项 。 但是当http.use_ssl = true时, […]

OpenSSL :: SSL :: SSLError:SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv3读取服务器hello A

下面的代码产生以下错误:OpenSSL :: SSL :: SSLError:SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv3读取服务器hello A require ‘net/https’ uri = URI.parse(“https://.com”) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true http.ssl_version = ‘SSLv3’ http.get(uri.request_uri) 知道为什么吗? 我尝试了所有其他问题中提到的一切,但仍然没有运气。 Ruby 1.9.3p484(2013-11-22修订版43786)[x86_64-darwin13.3.0] OpenSSL 0.9.8y 2013年2月5日 更新我 试过以下内容: Ruby 2.0.0p353(2013-11-22修订版43784)[x86_64-darwin13.3.0] OpenSSL 1.0.1i 2014年8月6日 更新II 强制ssl_version为:TLSv1_2 仍然没有运气。 更新III 好的,这是最终的代码 – 感谢Steffen(见下面的答案): require ‘net/https’ uri = […]

是否可以在Ruby中启用TLS v1.2? 如果是这样,怎么样?

可以在Ruby中使用TLSv.1.2或TLSv1.1吗? 我使用OpenSSL 1.0.1c(最新版本)编译了一个Frankenstein版本的Ruby,唯一的区别是SSLv2现在是OpenSSL::SSL::SSLContext::METHODS下的一个选项 是否可以将TLSv1.2添加到该列表中?

使用Ruby 1.9.3时“证书validation失败”OpenSSL错误

我在Mac OS 10.6.8上使用Ruby 1.9.3p0(使用rvm安装)。 当我尝试使用GitHub上托管的应用程序模板创建一个新的Rails应用程序时 ,使用它(例如): $ rails new myapp -m https://github.com/RailsApps/rails3-application-templates/raw/master/rails3-mongoid-devise-template.rb -T -O 我收到此错误消息: /Users/me/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/net/http.rb:799:in“connect”:SSL_connect return = 1 errno = 0 state = SSLv3读取服务器证书B:证书validation失败 (OpenSSL的:: SSL :: SSLError) 我理解Ruby语言解释器使用OpenSSL连接到GitHub来请求应用程序模板文件。 GitHub要求使用SSL进行所有连接。 连接失败,因为OpenSSL无法validation服务器证书。 我可以通过下载证书文件来解决问题: $ cd / opt / local / etc / openssl $ sudo curl -O http://curl.haxx.se/ca/cacert.pem $ sudo mv cacert.pem cert.pem 使用Ruby 1.9.2我没有问题。 […]

无法在ruby中使用openssl

我在我的虚拟机ubuntu12.04lts中安装了openssl。 当我运行gem命令时,它会出错。 错误:执行gem时(Gem :: Exception) 无法要求openssl。 安装openSSL并重建ruby(首选)或使用非HTTPs源 我还测试了irb模式下的openssl。 它给出了错误。 Loaderror:无法加载此类文件–openssl 来自/usr/local/lib/ruby/site_ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55`requiret’ 我有openssl $openssl version OpenSSL 1.0.1 14 mar 2012 如何修复错误?

如何使Ruby AES-256-CBC和PHP MCRYPT_RIJNDAEL_128一起发挥得很好

我正在生成要从Ruby堆栈发送到PHP堆栈的数据。 我在Ruby端使用OpenSSL :: Cipher库,在PHP使用’mcrypt’库。 当我在Ruby中使用’aes-256-cbc’(256位块大小)进行加密时,我需要在PHP中使用MCRYPT_RIJNDAEL_128(128位块大小)来解密它。 我怀疑Ruby代码被破坏了,因为cipher.iv_len是16; 我相信它应该是32: >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-128-cbc’) => # >> cipher.key_len => 16 >> cipher.iv_len => 16 >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-256-cbc’) => # >> cipher.key_len => 32 >> cipher.iv_len => 16 所以这是我的考试。 在Ruby方面,首先我生成密钥和iv: >> cipher = OpenSSL::Cipher::Cipher.new(‘aes-256-cbc’) >> cipher.encrypt >> iv = cipher.random_iv >> iv64 = [iv].pack(“m”).strip => “vCkaypm5tPmtP3TF7aWrug==” >> key […]

如何确保Ruby使用不易受Heartbleed攻击的OpenSSL?

关于Heartbleed错误, ruby-lang.org上的这篇文章描述了如何检查漏洞和升级。 它包括这个建议: 要validation链接到Ruby的OpenSSL库的哪个版本,请使用以下命令: ruby -v -ropenssl -rfiddle -e ‘puts Fiddle::Function.new(Fiddle.dlopen(nil)[“SSLeay_version”], [Fiddle::TYPE_INT], Fiddle::TYPE_VOIDP).call(0)’ 要validation当前使用Ruby安装的OpenSSL的版本,请使用以下命令: ruby -ropenssl -e ‘puts OpenSSL::OPENSSL_VERSION’ 这两个检查有什么区别,如果从任一命令返回错误版本,建议采取什么操作?

如何在Ruby中设置SSLContext选项

我需要在Ruby 1.8+中创建一个SSLSocket来与加密服务进行通信。 我想在SSLContext对象上设置SSL选项(它最终调用底层OpenSSL库中的SSL_CTX_set_options )。 我没有看到任何明显的方法来做到这一点。 这是使用OpenSSL::SSL::SSLContext接口。 作为参考,这类似于在Python的pyOpenSSL库中调用set_options() 。