愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

TLS Session Ticketの動作をtsharkでなんとなく覗きみる

こういう仕組みですよ、というWeb上の記事を読んだだけでは納得できない!論より証拠だ!ということで論より証拠ツールその2であるtsharkを使ってTLS Session Ticketの動作を「なんとなく」覗いてみる。

ちなみに、クライアントは Google Chrome (49.0.2576.0 canary (64-bit)) 、サーバはh2o (1.6.0-beta1, LibreSSL 2.2.4) である。

まずはざっくり

sudo tshark -i eth0 -f "tcp port 443" -Y ssl

状態をクリアするためにh2oを再起動してからhttpsなリクエストを送ると以下の様なシーケンスになる。

  4   0.013439 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy SSL 583 Client Hello
  6   0.018197 yyy.yyy.yyy.yyy -> xxx.xxx.xxx.xxx TLSv1.2 2842 Server Hello
  7   0.018254 yyy.yyy.yyy.yyy -> xxx.xxx.xxx.xxx TLSv1.2 2842 Certificate
  8   0.018283 yyy.yyy.yyy.yyy -> xxx.xxx.xxx.xxx TLSv1.2 848 Certificate Status
 11   0.032880 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy TLSv1.2 192 Client Key Exchange, Change Cipher Spec, Hello Request, Hello Request
 12   0.033993 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy TLSv1.2 119 Application Data
 13   0.034004 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy TLSv1.2 116 Application Data
 14   0.034008 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy TLSv1.2 108 Application Data
 15   0.034130 yyy.yyy.yyy.yyy -> xxx.xxx.xxx.xxx TLSv1.2 308 New Session Ticket, Change Cipher Spec, Hello Request, Hello Request
 16   0.034270 yyy.yyy.yyy.yyy -> xxx.xxx.xxx.xxx TLSv1.2 125 Application Data
 17   0.034589 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy TLSv1.2 425 Application Data
(以下略)

そこから一度タブ閉じて、もう一度リクエストを送ると以下の様なシーケンス。

  3   0.014875 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy SSL 583 Client Hello
  5   0.015423 yyy.yyy.yyy.yyy -> xxx.xxx.xxx.xxx TLSv1.2 216 Server Hello, Change Cipher Spec, Hello Request, Hello Request
  7   0.042222 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy TLSv1.2 117 Change Cipher Spec, Hello Request, Hello Request
  8   0.042255 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy TLSv1.2 119 Application Data
  9   0.042262 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy TLSv1.2 116 Application Data
 10   0.042266 xxx.xxx.xxx.xxx -> yyy.yyy.yyy.yyy TLSv1.2 108 Application Data
(以下略)

Certificate, Certificate Status, Server Key Exchange, Client Key Exchangeなどが省略され、Server Helloから一気にChange Cipher Specまで行っていることが分かる。 (注:tsharkの結果には出力されていないが、Server Key ExchangeはCertificate Statusと同じパケットに入っている)

もうちょっとだけ詳しく

以下のコマンドで見れば、

sudo tshark -i eth0 -f "tcp port 443" -Y ssl -O ssl

再起動後のシーケンスの最後、サーバからのChange Cipher Specと同じパケットにSession Ticketの値が含まれていることが分かる。

Secure Sockets Layer
    TLSv1.2 Record Layer: Handshake Protocol: New Session Ticket
        Content Type: Handshake (22)
        Version: TLS 1.2 (0x0303)
        Length: 186
        Handshake Protocol: New Session Ticket
            Handshake Type: New Session Ticket (4)
            Length: 182
            TLS Session Ticket
                Session Ticket Lifetime Hint: 3600
                Session Ticket Length: 176
                Session Ticket: fcf1faec48a3153aa98072c75e1aae922ebd76da303ea06e...
    TLSv1.2 Record Layer: Change Cipher Spec Protocol: Change Cipher Spec
        Content Type: Change Cipher Spec (20)
        Version: TLS 1.2 (0x0303)
        Length: 1
        Change Cipher Spec Message
    TLSv1.2 Record Layer: Handshake Protocol: Multiple Handshake Messages
        Content Type: Handshake (22)
        Version: TLS 1.2 (0x0303)
        Length: 40
        Handshake Protocol: Hello Request
            Handshake Type: Hello Request (0)
            Length: 0
        Handshake Protocol: Hello Request
            Handshake Type: Hello Request (0)
            Length: 0

以降、Client HelloにはSession Ticketが含まれ、それがvalidであった場合はもろもろが省略されてハンドシェイクがすぐ終わる。

            Extension: SessionTicket TLS
                Type: SessionTicket TLS (0x0023)
                Length: 176
                Data (176 bytes)

FT142A (priori2 3G) は安かろう悪かろう

iPhone (もう、いくつだったか忘れた)からNexus5に持ち替えて、Nexus5がぶっ壊れたので、freetelのpriori2に変えていた。

Nexus5を使っていた時は「この端末いいぜ!」みたいなエントリーを書いたり人に勧めたりしていたけど、すまんあれはウソじゃったウソとまでは言わないが、買った当初はよくてもAndroid5.0にしてから極端にバッテリーの持ちが悪くなり、なんだか微妙な端末であった。

で、「もうスマホに金を掛けることが既にダサい。お、10000円で買えるのがあるじゃないか」と思ってpriori2の3Gを買ったのだが、これはこれでケチりすぎた。

スマホとしての機能にそこまで問題があるわけではないが、やはりタッチ感度が悪いのと、LTEが使えないのは流石にやりすぎだ。今は反省している。まあ、スマホが欲しい!と泣く子に買い与える用途なんかにはいいんじゃないでしょうか。え、何?iPhoneがいいって?iPhoneは子供が持つと乳首が伸びるのよ!

しばらくはこのままいくけど、どこかのタイミングで端末を安く買える格安スマホ業者(例えば、楽天とか)にSIMごと引っ越そうかと思っている。

「Javaパフォーマンス」はいい本だった

Javaパフォーマンス

Javaパフォーマンス

とても馬鹿っぽいタイトルになってしまったが、気にしないのである。

だいたいの内容としては、

  • パフォーマンス・チューニングに関する一般論
  • Java付属のモニタリングツール(jstatとかあれとかこれとか)
  • JITコンパイル周りについて
  • GCについて

等々がいい感じに、過不足なく書いてある。

既にJava10年選手で、GCのチューニングもしたことあるし、JVMとは戦友みたいなものだ…みたいな人にはおそらく必要ないだろうが、JVM周りのあれやらこれやらを知らない人(つまり僕のような)がとりあえずJava始めてみたときに、頭の中に見取り図を書くためにはこの本を読むのが適切そうだ。

以前にも同じようなことを書いたけど、ベースとなる知識をまとめて仕入れるにはインターネットで情報の波をかき分けかき分け調べるより書籍の方が効率がよい。もちろん、よい書籍がある場合の話。

公私ともにToDo管理にTrelloを使うようになった

trello.com

これまでToDo管理を色々なツールで行っていたけど、Trelloに落ち着きそうな気配。

Trelloは本来、小規模なチームで使うことを意図したツールだと思うのだけど、お一人様でも十分使える。 何より、めんどくさいこと考えなくていい。色々な操作が直感的なので使うために何も覚えなくていい。という点が気にいっている。

以下、仕事用のToDo管理ツールとして便利な点

  • 優先度の変更や、タスクの終了 (= 僕の場合はどちらもリスト間の移動で表現している) がドラッグ&ドロップで出来てラク
  • 各タスクにコメントが付けられるので、進行中のタスクの付随情報(ticketとか、調べ物をした結果のURLとか)が管理しやすい

ほっとくとChromeのタブがどんどん増えて、小さくなっていく…というのはChromeユーザーのエンジニアなら誰しも経験したことがあると思う。 何かを調べながら作業している時のタブはあくまで「今の調べ物」にフォーカスしたものなので、一々ブックマークするほどでもないし(ブックマークを頑張って管理するのは人生における大いなる無駄の一つだ)、 また閉じてしまうと後から探すが面倒なので、ついつい開きっぱにしてしまう。そうするとゴミがどんどん溜まってタブが小さくなる以下略なのだが、このうざったらしい現象がいささか緩和される。 (それでもやっぱりある程度は開いたままキープしてしまうんだけども。)

微妙に活用しきれていないが、プライベートでは「家の中で切れそうな生活必需品ボード」を奥さんと共有している。「買い置き有り」「買い置きないけどまだ大丈夫」「ピンチ」みたいなリストがあり「米」「塩」「歯磨き粉」などのタスクがそれらのリスト間を移動していくイメージである。またどうやら、奥さんは個人のタスク管理にも使っているようである。

ドラッグ&ドロップが重要な機能に割り当てられている関係上、モバイルアプリが若干使いにくいが、僕はモバイル上ではあれこれ頑張らないことにしているのであまり関係ない。

JavaScriptでCSVを生成するのはやめたほうがいい

もう2015年だから別にいけるんじゃね?出したいのはクライアントサイドで表示してるデータだし。と思ったけど、

  • 例によって古いIE (9以下かな) でめんどくさい
  • SafariだとHTMLAnchorElementのdownload attributeが無効 (http://caniuse.com/#feat=download) で、"unknown" ってファイル名になったりする
  • 文字コード周りがめんどくさい

…といった事情があるため、msSaveBlobやらcreateObjectURLと戯れるのは諦めて、おとなしくサーバサイドで生成してContent-Dispositionつけて返しましょう。

「俺ならクロスブラウザな実装が出来る!やってやる!」と思ったそこのアナタ。それは、この場合においては無用な努力です。