[#48190] [ruby-trunk - Feature #9816] 文字列内の数字を数値として比較するメソッド — zn@...
Issue #9816 has been updated by Kazuhiro NISHIYAMA.
3 messages
2014/05/08
[ruby-dev:48225] [ruby-trunk - Bug #9848] [Open] OpenSSL::SSL::SSLContext の SSLv2 利用不可サーバへの接続時のデフォルト設定の応答について
From:
naitoh@...
Date:
2014-05-19 01:50:29 UTC
List:
ruby-dev #48225
Issue #9848 has been reported by Jun NAITOH.
----------------------------------------
Bug #9848: OpenSSL::SSL::SSLContext の SSLv2 利用不可サーバへの接続時のデフォルト設定の応答について
https://bugs.ruby-lang.org/issues/9848
* Author: Jun NAITOH
* Status: Open
* Priority: Normal
* Assignee:
* Category: ext/openssl
* Target version:
* ruby -v: ruby 2.0.0p481
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN
----------------------------------------
SSLv2利用不可なサーバに対する環境において、
以下のようなコードを 1.8.7 と 1.9.3 と 2.0.0 で実行した場合の結果が異なりました。
確認した ruby 版数は以下になります。
* ruby 1.8.7p299
* ruby 1.9.3p484
* ruby 2.0.0p481
### SSLContex オプション指定無し。
~~~
$ cat ssl_ng.rb
require 'socket'
require 'openssl'
io = TCPSocket.new("XXX.com", XXXX)
ctx = OpenSSL::SSL::SSLContext.new
conn = OpenSSL::SSL::SSLSocket.new(io, ctx)
conn.connect
~~~
* ruby 1.8.7
⇒ 問題無し。
* ruby 1.9.3/2.0.0
⇒ エラー発生。
ssl_ng.rb:7:in `connect': SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: (null) (OpenSSL::SSL::SSLError)
### SSLv3 指定時
以下の様に SSLv3 を明示的に指定した場合は問題なく接続できました。
~~~
$ cat ssl_ok.rb
require 'socket'
require 'openssl'
io = TCPSocket.new("XXX.com", XXXX)
ctx = OpenSSL::SSL::SSLContext.new(:SSLv3)
conn = OpenSSL::SSL::SSLSocket.new(io, ctx)
conn.connect
~~~
* ruby 1.8.7/1.9.3/2.0.0
⇒ 問題無し。
### SSLv2 指定時
以下の様に SSLv2 を明示的に指定した場合は、全てエラーしました。 (期待通り)
~~~
$ cat ssl_ng1.rb
require 'socket'
require 'openssl'
io = TCPSocket.new("XXX.com", XXXX)
ctx = OpenSSL::SSL::SSLContext.new(:SSLv2)
conn = OpenSSL::SSL::SSLSocket.new(io, ctx)
conn.connect
~~~
* ruby 1.8.7/2.0.0
⇒ エラー発生。
ssl_ng1.rb:7:in `connect': SSL_connect returned=6 errno=0 state=SSLv2 read server hello A (OpenSSL::SSL::SSLError)
※ 1.9.3 は "ssl_ng1.rb:5:in `initialize': unknown SSL method `SSLv2'. (ArgumentError)" となったので未確認。
### SSLv23 指定時
SSLv23 を明示的に指定時には、1.9.3 と 2.0.0 でエラーが発生しました。
~~~
$ cat ssl_ng2.rb
require 'socket'
require 'openssl'
io = TCPSocket.new("XXX.com", XXXX)
ctx = OpenSSL::SSL::SSLContext.new(:SSLv23)
conn = OpenSSL::SSL::SSLSocket.new(io, ctx)
conn.connect
~~~
* ruby 1.8.7
⇒ 問題無し。
* ruby 1.9.3/2.0.0
⇒ エラー発生。
ssl_ng2.rb:7:in `connect': SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: (null) (OpenSSL::SSL::SSLError)
OpenSSL::SSL::SSLContextのデフォルト値として SSLv23 が設定されていると思うのですが、
* ruby 1.8.7 : TLSv1/SSLv2/SSLv3 のいずれかが利用可能であれば、OK
* ruby 1.9以降 : TLSv1/SSLv2/SSLv3 の全てが利用可能であれば、OK (SSLv2が利用不可の場合はエラー)
のように、挙動が変更になっていると推測されます。
ruby 1.8.7の挙動の方が望ましいと思うのですがいかがでしょうか
net-ldap (0.3.1 or 0.6.1)などでは、SSLContext をオプション指定無しで利用しているため、SSLv2 利用不可のサーバに接続する場合、ruby 1.9以降では接続できません。
--
https://bugs.ruby-lang.org/