From: Jon Forums Date: 2011-06-14T02:24:03+09:00 Subject: [ruby-dev:43792] [Ruby 1.9 - Bug #4879] test_new(OpenSSL::TestPKeyRSA) fails on Win32 Issue #4879 has been updated by Jon Forums. This failure also occurs when building trunk@32072 with MinGW GCC v4.5.2 (TDM) and OpenSSL 1.0.0d: sh-3.1$ make test-all TESTS='openssl fiddle psych' ... 1) Failure: test_new(OpenSSL::TestPKeyRSA) [c:/Users/Jon/Documents/RubyDev/ruby-git/test/openssl/test_pkey_rsa.rb:48]: <[]> expected but was <["error:0906D06C:PEM routines:PEM_read_bio:no start line"]>. sh-3.1$ ruby --version ruby 1.9.3dev (2011-06-14 trunk 32072) [i386-mingw32] sh-3.1$ ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION' OpenSSL 1.0.0d 8 Feb 2011 ---------------------------------------- Bug #4879: test_new(OpenSSL::TestPKeyRSA) fails on Win32 http://redmine.ruby-lang.org/issues/4879 Author: Akio Tajima Status: Open Priority: Normal Assignee: Category: Target version: 1.9.3 ruby -v: ruby 1.9.3dev (2011-06-13) [i386-mswin32_100] こんばんは。 opensslのtest_pkey_rsa.rb:48 がfailします。Visual C++10 を利用しています。 1) Failure: test_new(OpenSSL::TestPKeyRSA) [C:/Users/arton/Documents/ruby/trunk/test/openssl/test_pkey_rsa.rb:48]: <[]> expected but was <["error:0906D06C:PEM routines:PEM_read_bio:no start line"]>. このエラーは数回試しましたが常に発生します。 ところが、ここでテストしているRubyをインストールして同じ処理を実行すると期待している結果が得られます。 irb(main):001:0> require 'openssl' => true irb(main):002:0> key = OpenSSL::PKey::RSA.new 512 => -----BEGIN RSA PRIVATE KEY----- MIIBOgIBAAJBAMuc7mPnOVmPweq1XMZrOZaOMVoTCX88fsU4460qF0me4S+yGL90 (省略) -----END RSA PRIVATE KEY----- irb(main):003:0> pem = key.public_key.to_pem => "-----BEGIN PUBLIC KEY-----\nMFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMuc7mPnOVmPweq1 XMZrOZaOMVoTCX88\nfsU4460qF0me4S+yGL902+yR5Gv2R6B4QvE5EnxGY5zD9t355+IKaQMCAwEAAQ ==\n-----END PUBLIC KEY-----\n" irb(main):004:0> OpenSSL::PKey::RSA.new pem => -----BEGIN PUBLIC KEY----- MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAMuc7mPnOVmPweq1XMZrOZaOMVoTCX88 fsU4460qF0me4S+yGL902+yR5Gv2R6B4QvE5EnxGY5zD9t355+IKaQMCAwEAAQ== -----END PUBLIC KEY----- irb(main):005:0> OpenSSL.errors => [] もしかすると、test_newの前にエラーが設定されていてそれが読まれているのかと思って、次のようにtest_newを変えて実行したところ、 def test_new $stderr.puts OpenSSL.errors.inspect $stderr.flush key = OpenSSL::PKey::RSA.new 512 pem = key.public_key.to_pem OpenSSL::PKey::RSA.new pem assert_equal([], OpenSSL.errors) end 上のように修正するとfailしなくなりましたが、取得されるエラーは以下でした。これも数回試しましたが常に同じメッセージです。 .........................................................["error:0D07803A:asn1 e ncoding routines:ASN1_ITEM_EX_D2I:nested asn1 error"]...(省略) OpenSSLは1.0.0aです。 irb(main):001:0> require 'openssl' => true irb(main):002:0> OpenSSL::OPENSSL_VERSION => "OpenSSL 1.0.0a 1 Jun 2010" よろしくお願いします。 -- http://redmine.ruby-lang.org