Project

General

Profile

バグ #912

Streaming API の read_timeout を伸ばす

Added by rhen ium almost 3 years ago. Updated almost 3 years ago.

Status:
終了
Priority:
通常
Assignee:
Target version:
プラグイン名:
ブランチ:
クラッシュする:

Description

0a51370a95a4 で Net::ReadTimeout が握り潰されるようになりましたが、そもそもタイムアウトするのがおかしいです。

Twitter のドキュメントには、30 秒おきに空行は送信するけどタイムアウトは 90 秒に設定しておけ、みたいなことが書かれてますが、

https://dev.twitter.com/streaming/overview/connecting

oauth gem の OAuth::Consumer#http の返す Net::HTTP インスタンスではなぜか read_timeout として 30 秒が設定されているようです。

https://github.com/oauth-xx/oauth-ruby/blob/e397b3e2f540faaebd7912aeb2768835d151f795/lib/oauth/consumer.rb#L341

手元の環境では、read_timeout を 90 秒に上書きしたところ、Net::ReadTimeout は起こらなくなりました。

diff --git a/core/lib/mikutwitter/api_shortcuts.rb b/core/lib/mikutwitter/api_shortcuts.rb
index 56ddd2a..f05c9ee 100644
--- a/core/lib/mikutwitter/api_shortcuts.rb
+++ b/core/lib/mikutwitter/api_shortcuts.rb
@@ -221,6 +221,7 @@ module MikuTwitter::APIShortcuts
     parsed_url = Addressable::URI.parse(url)
     stream_access_token = access_token("#{parsed_url.scheme}://#{parsed_url.host}")
     http = stream_access_token.consumer.http
+    http.read_timeout = 90
     http.ssl_version = 'TLSv1'
     consumer = stream_access_token.consumer
     request = consumer.create_signed_request(:post,

ところで、関係ないですが、TLS 1.0 を強制するのは無意味です

diff --git a/core/lib/mikutwitter/api_shortcuts.rb b/core/lib/mikutwitter/api_shortcuts.rb
index f05c9ee..0495a9c 100644
--- a/core/lib/mikutwitter/api_shortcuts.rb
+++ b/core/lib/mikutwitter/api_shortcuts.rb
@@ -222,7 +222,6 @@ module MikuTwitter::APIShortcuts
     stream_access_token = access_token("#{parsed_url.scheme}://#{parsed_url.host}")
     http = stream_access_token.consumer.http
     http.read_timeout = 90
-    http.ssl_version = 'TLSv1'
     consumer = stream_access_token.consumer
     request = consumer.create_signed_request(:post,
                                              parsed_url.path,
diff --git a/core/mui/gtk_web_image_loader.rb b/core/mui/gtk_web_image_loader.rb
index 803e273..6f86d22 100644
--- a/core/mui/gtk_web_image_loader.rb
+++ b/core/mui/gtk_web_image_loader.rb
@@ -262,8 +262,7 @@ module Gdk::WebImageLoader
                    Net::HTTP.new(host, port || 80)
                  when 'https'.freeze
                    Net::HTTP.new(host, port || 443).tap{|_h|
-                     _h.use_ssl = true
-                     _h.ssl_version = 'TLSv1' } end
+                     _h.use_ssl = true } end
           http.open_timeout=5
           http.read_timeout=30
           pool << http

Associated revisions

Revision 070aadf9 (diff)
Added by toshi_a 初音 almost 3 years ago

UserStreamのタイムアウトを90秒に変更 refs #912

Revision 198271c2 (diff)
Added by toshi_a 初音 almost 3 years ago

UserStreamに接続する時、TLSv1を強制するのをやめる refs #912, #460

Ubuntu 12.04良い奴だった

History

#1

Updated by toshi_a 初音 almost 3 years ago

  • Assignee set to toshi_a 初音

確かに言われてみれば30秒毎に空行送ってくるはずなのにタイムアウトしてるのおかしいですね。何も考えてませんでした。取り込ませてもらいます。

あと、TLSv1を指定しているのには、かつてはちゃんと意味がありました(#460)。ご存知の通りSSLv3で接続すると、Twitterは利用できません。まだ1,2年くらい前のことだと思ってたけど4年半も前…(#460 は脆弱性をうけてではなく、単なるTwitterの不具合だったと思います)。
もう影響ないと思うし仰るとおり消そうかと思いましたが、様子を見たほうが良さそうです。
mikutter 3.4はRuby2.1以降で利用できると謳っています。ちょっと調べましたが、Ruby2.1.4以降で、SSLv3のような脆弱性のあるオプションが無効化されたようですね。
2.1.3以前のRubyを使っている人のバグ報告が数件来ていて、安易に適用すると影響が出そうです。Rubyのバージョンを見て分岐するなどしようかな…と思いましたが、Ruby2.1.3以前はほとんど使われていないと言うのも又事実なので、mikutter 3.5から、サポートするRubyのバージョンを2.1.4以上に引き上げて、このパッチを取り込もうと思います。

#2

Updated by toshi_a 初音 almost 3 years ago

あっ、Ubuntu 12.04にSSLv3の証明書がインストールされていないという問題だったかも…だとすると話が変わってくるか?どちらにせよ対応は別で考えます

#3

Updated by rhen ium almost 3 years ago

なるほど、そんな背景が。もし TLS 1.1/1.2 に対応した OpenSSL を使っているのならそちらを使いたいなーと思いました。

SSL/TLS のバージョンと証明書は関係ないです。#460 によると "state=unknown state: sslv3 alert handshake failure" ということなので、サーバー側がこちらの送信した Client Hello を拒絶して handshake_failure alert を送信してきたというように見えます。規格上はクライアント・サーバー双方が対応する最大のバージョンが選択されるようになっているはずで、今 OpenSSL 1.0.1 と Ruby 1.9.3(は Ubuntu 12.04 にのっているバージョンだったはず)で試してみても userstream.twitter.com:443 に正常に接続できるので、Twitter の一時的な不具合だったんじゃないかなあと思います。とはいえ、現時点では TLS 1.0 で何か困るということはないので、次のバージョンからで良いと思います。

#4

Updated by toshi_a 初音 almost 3 years ago

  • Status changed from 新規 to レビュー待ち
  • Assignee changed from toshi_a 初音 to rhen ium

それぞれ、3.4とdevelopに適用しました。一応確認お願いします。

#5

Updated by rhen ium almost 3 years ago

  • Status changed from レビュー待ち to 終了

大丈夫そうです。ありがとうございます。

Also available in: Atom PDF