openssl s_client で chat.facebook.com に STARTTLS で接続する ― 2012年09月04日
先日書いた「facebook のチャットをパソコンの専用のクライアントで」で XMPP で facebook のチャットに接続することを書いたのですが、これをちょっと手動でやってみたくなりました。
SSL/TLS でつなぎたいので、openssl の s_client で STARTTLS するように指示してつないでみます。openssl の s_client コマンドは -starttls
の後にプロトコルを指定すると、プロトコルごとの STARTTLS を実行し、SSL/TLS が開始されます。メールなら -startls smtp
などとしますが、XMPP なので、-starttls xmpp
とします。
$ openssl s_client -starttls xmpp -connect chat.facebook.com:5222 CONNECTED(00000003) --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 400 bytes and written 122 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE ---
あれ? SSL/TLS のハンドシェイクがうまくいってないようです。原因が知りたいので、TELNET で chat.facebook.com につないで確認します。
$ telnet chat.facebook.com 5222
(略)
クライアント→サーバー: <?xml version="1.0"?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client' to='chat.facebook.com' version='1.0'>↵
サーバー→クライアント: <?xml version="1.0"?><stream:stream id="BC39B9EB" from="chat.facebook.com" version="1.0" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" xml:lang="en"><stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-FACEBOOK-PLATFORM</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features>
クライアント→サーバー: </stream:stream>↵
サーバー→クライアント: </stream:stream>
Connection closed by foreign host.
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>
がサーバーからの応答にあるので、STARTTLS は使えるはずです (参考: RFC 3920 Section 5.1 等)。なぜ openssl が正常に動作しないのかわかんないので openssl のソースコードを見ます。
openssl.orgから 1.0.1c のソースコードを持ってきて apps/s_client.c を見てみます。
1475 while (!strstr(mbuf, "<starttls xmlns='urn:ietf:params:xml:ns:xmpp-tls'")) 1476 { 1477 if (strstr(mbuf, "/stream:features>")) 1478 goto shut;
えらく単純な文字列検索で判定しているようです。starttls
開始タグ内の xmlns
属性の値がシングルクォートで括られていることを前提としていますね。しかし chat.facebook.com の応答では xmlns="urn:ietf...
のように、ダブルクォートで括られています。うーん、ちゃんと XML を parse しないといけんかねぇ、と思って、openssl の request tracker を見てみます。ありました。
#2565: More tolerant detection of XMPP starttls sequence
ここにあるパッチを見ると、strstr
が strcasestr
に置き換えられ、かつ、シングルクォートだけでなくダブルクォートの候補についても検索されるようになってます。
パッチをあてて、コンパイルし、再度実行します。
$ ./openssl s_client -starttls xmpp -connect chat.facebook.com:5222 CONNECTED(00000003) depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance CA-3 verify error:num=20:unable to get local issuer certificate verify return:0 --- Certificate chain 0 s:/C=US/ST=California/L=Palo Alto/O=Facebook, Inc./CN=chat.facebook.com i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3 1 s:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance CA-3 i:/C=US/O=DigiCert Inc/OU=www.digicert.com/CN=DigiCert High Assurance EV Root CA --- Server certificate -----BEGIN CERTIFICATE----- MIIGqDCCBZCgAwIBAgIQDmU69yuszbx5RbMUTPVxADANBgkqhkiG9w0BAQUFADBm MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSUwIwYDVQQDExxEaWdpQ2VydCBIaWdoIEFzc3VyYW5j (以下略)
処理としてはまだ甘いコードですが、今回の目的は成功です。
DELL XPS 15z で Ubuntu を使う(1) ― 2012年09月06日
今年の3月、DELL XPS 15z というノートパソコンを買いました。15インチで 1920x1080 のフルHDが使える、というのが決定要因でした。
さっき ちくわぶ箱と DELL XPS 15z 届いた
— Takayuki KUSANOさん (@tkusano) 3月 14, 2012
で、さっそくに Ubuntu をインストール。
XPS 15z に Ubuntu 11.10 インストールはとりあえずできた。wubi 使用。カーネルパラメーターに acpi=off が必要なので、wubi をインストール直後に再起動する前に \ubuntu\install\wubildr-disk.cfg を書き換えること
— Takayuki KUSANOさん (@tkusano) 3月 15, 2012
DELL XPS 15z で gnome-shell on Ubuntu 12.04 (beta) 動いた ヽ(´ー`)ノ
— Takayuki KUSANOさん (@tkusano) 3月 15, 2012
DELL XPS 15z で [drm:intel_dsm_platform_mux_info] *ERROR* MUX INFO call failed が boot 時に発生して acpi=off/noirq じゃないと起動しないのは何だろな (3.2.0-19)
— Takayuki KUSANOさん (@tkusano) 3月 20, 2012
カーネルのパラメーターに acpi=noirq に設定しないとうまく動きません。具体的には、/etc/default/grub
で、
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
となっているところを、
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=noirq"
とします。変更したら、/usr/sbin/update-grub
を実行。
これで動作するようになり、GNOME も起動します。ただ、問題がいくつか。
(DELL XPS 15z で Ubuntu を使う(2)に続く)
p.s. ちくわぶ箱とはこれのこと。
DELL XPS 15z で Ubuntu を使う(2) ― 2012年09月06日
DELL XPS 15z で Ubuntu を使う(1) の続きです。
トラックパッドは最初は動きませんでしたが、今ではうまく動いてるような気がします。気がします、というのは、普段は本体のキーボードは使わず、Lenovo のトラックポイント付きの USB キーボードを接続して使っているからです。
さて、これで問題はそれほどなかったのですが、外部モニタを使おうとしてはまりました。モニタとして、LG の IPS225V-BN を購入し、アームとしてルーメンの MA-GS742 にマウントして HDMI で XPS 15z に接続した時です。画面がまったく出ません。
Ubuntu の wiki を見たり、ググるなどして調べた調べたけどうまくいかず、結局、Windows 上の Virtualbox で妥協し、1ヶ月と少し経過しました。New laptop with 12.04 not connecting to external monitor などの記事によると Optimus テクノロジ が良くないようなのです。Bumblebee 使ってなんとかすれば動くようなことも見つかったのですが、追求しきれず降参。
optimus なノートPCで ubuntu で dual monitor にするのに挫折したので、virtualboxでインストール中
— Takayuki KUSANOさん (@tkusano) 7月 19, 2012
しかし Ubuntu をメインに使うことはあきらめきれず、あらためて調査。すると、Ubuntu の Wiki に Ext. Screen (Mini Displayport)
が Works
とあるじゃないですか。前も書いてあったっけ?見落としてたか...、ということで CompuAce にかけこんで、カモン の「DVI-D ケーブル」と「Mini DisplayPort ⇒ DVI-D 変換アダプタ」を購入し、接続。見事外部ディスプレイが使えるようになりました。
ちなみに Bumblebee を入れておけば gnome-shell もちゃんと動きます (Bumblebee 必須かどうかはちゃんと検証してません)。
最近のコメント