Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
shigeki_ohtsu
PDF, PPTX
25,451 views
Node-v0.12のTLSを256倍使いこなす方法
new TLS feature in Node-v0.12
Technology
◦
Related topics:
Node.js Development
•
Read more
22
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 25
2
/ 25
3
/ 25
4
/ 25
5
/ 25
6
/ 25
7
/ 25
8
/ 25
9
/ 25
10
/ 25
11
/ 25
12
/ 25
13
/ 25
14
/ 25
15
/ 25
16
/ 25
17
/ 25
18
/ 25
19
/ 25
20
/ 25
21
/ 25
22
/ 25
23
/ 25
24
/ 25
25
/ 25
More Related Content
PDF
SSL/TLSの基礎と最新動向
by
shigeki_ohtsu
PDF
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
by
Kenji Urushima
PDF
プロフェッショナルSSL/TLS 1.2章
by
MITSUNARI Shigeo
PPTX
最新Webプロトコル傾向と対策
by
Kensaku Komatsu
PPTX
SSL入門
by
Takeru Ujinawa
PDF
IETF93 Prague報告Web関連+QUIC
by
Kaoru Maeda
PDF
Node最新トピックス
by
shigeki_ohtsu
PDF
東京Node学園 今できる通信高速化にトライしてみた
by
Yoshiki Shibukawa
SSL/TLSの基礎と最新動向
by
shigeki_ohtsu
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
by
Kenji Urushima
プロフェッショナルSSL/TLS 1.2章
by
MITSUNARI Shigeo
最新Webプロトコル傾向と対策
by
Kensaku Komatsu
SSL入門
by
Takeru Ujinawa
IETF93 Prague報告Web関連+QUIC
by
Kaoru Maeda
Node最新トピックス
by
shigeki_ohtsu
東京Node学園 今できる通信高速化にトライしてみた
by
Yoshiki Shibukawa
What's hot
PDF
#mailerstudy 02 メールと暗号 - SSL/TLS -
by
Takashi Takizawa
PDF
TLS, HTTP/2演習
by
shigeki_ohtsu
PDF
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
by
You_Kinjoh
PDF
HTTP 2.0のヘッダ圧縮(HPACK)
by
Jun Fujisawa
PDF
【19-C-L】Web開発者ならおさえておきたい「常時SSL/TLS化の実装ポイント」
by
Developers Summit
PDF
WebRTCとPeer.jsを使った実装
by
Yuta Suzuki
PDF
暗号技術入門
by
MITSUNARI Shigeo
PPTX
ConfD で Linux にNetconfを喋らせてみた
by
Akira Iwamoto
PDF
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
by
Kenji Urushima
PPTX
Dockerと外部ルータを連携させる仕組みを作ってみた
by
npsg
PDF
ブラウザで動く準同型暗号
by
MITSUNARI Shigeo
PDF
IETF96 Update oauth tokbind
by
Kaoru Maeda
ODP
Openflow超解釈
by
Hiroaki Kawai
PDF
Ietf95 http2
by
Kaoru Maeda
PDF
自動でできるかな?
by
_norin_
PDF
http2study 20160423 IETF95 Report
by
Kaoru Maeda
PDF
第43回HTML5とか勉強会 SPDY/QUICデモ
by
shigeki_ohtsu
PDF
HTTP2入門
by
Sota Sugiura
PDF
HTTP/2: ぼくたちのWebはどう変わるのか
by
Kaoru Maeda
PDF
Amazon CloudFront TLS/SSL Seminar 20160804
by
Hayato Kiriyama
#mailerstudy 02 メールと暗号 - SSL/TLS -
by
Takashi Takizawa
TLS, HTTP/2演習
by
shigeki_ohtsu
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
by
You_Kinjoh
HTTP 2.0のヘッダ圧縮(HPACK)
by
Jun Fujisawa
【19-C-L】Web開発者ならおさえておきたい「常時SSL/TLS化の実装ポイント」
by
Developers Summit
WebRTCとPeer.jsを使った実装
by
Yuta Suzuki
暗号技術入門
by
MITSUNARI Shigeo
ConfD で Linux にNetconfを喋らせてみた
by
Akira Iwamoto
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
by
Kenji Urushima
Dockerと外部ルータを連携させる仕組みを作ってみた
by
npsg
ブラウザで動く準同型暗号
by
MITSUNARI Shigeo
IETF96 Update oauth tokbind
by
Kaoru Maeda
Openflow超解釈
by
Hiroaki Kawai
Ietf95 http2
by
Kaoru Maeda
自動でできるかな?
by
_norin_
http2study 20160423 IETF95 Report
by
Kaoru Maeda
第43回HTML5とか勉強会 SPDY/QUICデモ
by
shigeki_ohtsu
HTTP2入門
by
Sota Sugiura
HTTP/2: ぼくたちのWebはどう変わるのか
by
Kaoru Maeda
Amazon CloudFront TLS/SSL Seminar 20160804
by
Hayato Kiriyama
More from shigeki_ohtsu
PDF
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
by
shigeki_ohtsu
PDF
HTTP/2, QUIC入門
by
shigeki_ohtsu
PDF
HTTP/2の現状とこれから
by
shigeki_ohtsu
PDF
Technical Overview of QUIC
by
shigeki_ohtsu
PDF
HTTP/2.0がもたらすWebサービスの進化(後半)
by
shigeki_ohtsu
PPTX
SPDYの話
by
shigeki_ohtsu
PPTX
node-gypを使ったネイティブモジュールの作成
by
shigeki_ohtsu
PDF
HTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_t
by
shigeki_ohtsu
PPTX
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
by
shigeki_ohtsu
PPTX
SPDYの中身を見てみよう
by
shigeki_ohtsu
PPTX
Stream2の基本
by
shigeki_ohtsu
PPTX
httpbis interim とhttp2.0相互接続試験の話
by
shigeki_ohtsu
PDF
Node.js で SPDYのベンチマーク体験サイトを作りました
by
shigeki_ohtsu
PDF
Node-v0.12の新機能について
by
shigeki_ohtsu
PDF
httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)
by
shigeki_ohtsu
PDF
httpbis interim@チューリッヒ レポート
by
shigeki_ohtsu
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
by
shigeki_ohtsu
HTTP/2, QUIC入門
by
shigeki_ohtsu
HTTP/2の現状とこれから
by
shigeki_ohtsu
Technical Overview of QUIC
by
shigeki_ohtsu
HTTP/2.0がもたらすWebサービスの進化(後半)
by
shigeki_ohtsu
SPDYの話
by
shigeki_ohtsu
node-gypを使ったネイティブモジュールの作成
by
shigeki_ohtsu
HTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_t
by
shigeki_ohtsu
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
by
shigeki_ohtsu
SPDYの中身を見てみよう
by
shigeki_ohtsu
Stream2の基本
by
shigeki_ohtsu
httpbis interim とhttp2.0相互接続試験の話
by
shigeki_ohtsu
Node.js で SPDYのベンチマーク体験サイトを作りました
by
shigeki_ohtsu
Node-v0.12の新機能について
by
shigeki_ohtsu
httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)
by
shigeki_ohtsu
httpbis interim@チューリッヒ レポート
by
shigeki_ohtsu
Node-v0.12のTLSを256倍使いこなす方法
1.
Node-v0.12のTLSを 256倍使いこなす方法 大津 繁樹 (@jovi0608) 株式会社インターネットイニシアティブ(IIJ) 東京Node学園祭2014 2014年11月15日
2.
自己紹介 • 名前: 大津
繁樹 • 所属: 株式会社インターネットイニシアティブ(IIJ) アプリケーション開発部 • Twitter: @jovi0608 • ブログ: ぼちぼち日記 http://d.hatena.ne.jp/jovi0608/ • GitHub: https://github.com/shigeki/ • 新技術の検証・評価を行ってます。 (Node.js, SPDY, HTTP/2,HTML5) • iij-http2の開発を通じてIETFのHTTP/2標準化作業に参画中 • Node-v0.11.x へのパッチ提出はわずか。でもほとんどTLS関連です。
3.
TLS (Transport Layer
Security)の利用状況 TLS通信 認証、暗号化、 改ざん防止 図参照 https://plus.google.com/+IlyaGrigorik/posts/7VSuQ66qA3C GoogleによるChromeの統計調査 から、ここ2年間でhttpsサイトへ のナビゲーションは28%から58% に増加
4.
IAB(Internet Architecture Board)からインターネッ トの信頼性に関する声明 https://www.iab.org/2014/11/14/iab-statement-on-internet-confidentiality/ IABは、現在プロトコル設計者・開発者・運用者がインターネットトラフィックの 標準として暗号化を行うことが重要であると信じている。できる限り認証と共に暗 号を使うべきだが、認証なしの機密性を持つプロトコルでもRFC7258で記載された 「広範囲な盗聴行為」に対して有用となりえる。
5.
発表内容 • NodeのTLSモジュール大改造 • TLSSocket •
AES-NI • PFS (Perfect Forward Secrecy) • TLS False Start • TLS Ticket • OCSP Stapling • TLS Dynamic Record • SPDY, HTTP/2 • SPDYのメリットが一番よくわかるデモ Node-v0.12でTLSを使うために有用な情報をお伝えします。 (でも256個もないです) (注1: Node-v0.12はまだ未リリースですが、2014/11/10時点のv0.12ブランチHEADを対象としています。) (注2: Node-v0.11.xはまだPOODLE対策がされていません。SSLv3を無効化するために、 secureOptions: require(‘constants’).SSL_OP_NO_SSLv3) をサーバオプションに追加しましょう。)
6.
目指せ A+ のTLSサーバ ソースはこちら https://gist.github.com/shigeki/986c53242f5bd3d78609 https://www.ssllabs.com/ssltest/index.html
7.
Node TLSモジュールの大改造 Node-v0.10の問題:パフォーマンスが悪い、API が扱いづらい • 受信した暗号文をnetモジュールで受けてから SecurePair
オブジェクトで復号化 • 送信する平文もSecurePairオブジェクトで暗号 化してからnetモジュールで送信 • C++ → JS → C++ → JS のオーバヘッドが大きい • 平文のCleartextStreamはnet.Socketと似て非な るもの。 Node-v0.10のTLS処理概要 C++ JS C++ JS SecurePair openssl 暗号文 平文 平文 暗号文 暗号文 net module libuv CleartextStream CryptoStream
8.
Node TLSモジュールの大改造 C++C++ JS tls_wrap libuv openssl Node_BIO TLSSocket 平文
平文 暗号文 Node-v0.12のTLS処理概要 Node-v0.12でパフォーマンスを改善、APIを統一 • opensslとlibuvでデータと共有する Node_BIO を作成 → 両者の処理を一体化 • netモジュールのハンドルをtls_wrapが横取り → C++の処理だけで平文データを生成 • net.Socketを継承するTLSSocketを新設 → イン ターフェイスを統一 C++
9.
TLSSocket • Node-v0.10までの CleartextStream
の替わり • CleartextStreamのAPIの互換保持 • ちゃんと net.Socketを継承し、APIを完備 • TLS周りの通信に関する新規機能のAPIを追加 より直観的でわかり易くなった。 EventEmitter Stream Readable Writable Duplex Socket TLSSocket
10.
AES-NI (Advanced Encryption
Standard New Instructions) • Intel, AMDのCPUに搭載されているAES暗号の処理機能 • 最近のモデルには多く搭載されている。/proc/cpuinfo で確認 • openssl-1.0系に実装済。Node-v0.10.x, v0.11.xでも使える • 環境変数でAES-NIの有効・無効化してNodeのcryptoのベンチ比較 AES-NI有効時 AES-NI無効時 22.8469 Gbit/sec 9.51245 Gbit/sec AES-NI付きCPUのサーバを選んで使いましょう AES-NIで2.4倍に性能向上!
11.
PFS(Perfect Forward Secrecy) •
セッション毎に一時的に有効な公開鍵を交換して暗号鍵を共有す る方式 • 証明書の秘密鍵が危殆化しても過去の通信データを復号化できな い。今後主流となる鍵交換方式。 • Node-v0.12から ECDHE, DHE の2種類が利用可能 • ECDHEの方が性能が良いのでそっちを優先指定(デフォルト) • ECDHEはデフォルトで何もせず利用できる。(prime256v1) • DHEの利用dhparamファイルを生成と指定が必要。現状十分な強 度を持つには2048bit長以上で生成すること。
12.
TLS False Start ClientHello ServerHello Certificate ServerHelloDone ServerKeyExchange ChangeCipherSpec Finished ハンドシェイク完了前に 暗号化したアプリデータ をフライングで送信 application
data ClientKeyExchange ChangeCipherSpec Finished • TLS接続を高速化する技術 (2RTT→1RTT) • TLSハンドシェイク完了直前に暗号化したアプリケー ションデータをフライングで送信 • Chromeで2010年より先行実装、でも想定外の挙動の ため問題頻発。 • TLSハンドシェイク完了前なのでダウングレード攻撃の リスクもあり一旦中止。 • NPNでプロトコル指定、PFS利用で利用可能に。 • IEやSafariなどは別の条件。
13.
NodeでTLS False Startを使うには NodeはデフォルトでNPN拡張を付与するのでPFSを利用すればク ライアントはTLS
False Startになる(*) PFS利用していない時(AES128-GCM-SHA256) PFS利用している時(ECDHE-RSA-AES128-SHA256) TLS False Start によ るTLSハンドシェイ クの高速化 1RTT分 (*) IE, Safariは条件が違います
14.
TLS Ticket • サーバからクライアントにTLS再接続時に利用する CipherSuite/MasterSecretが含まれた設定データ(チ ケット)を暗号化して渡す。 •
渡したチケット情報はサーバ側では保持しない。 • クライアントは再接続時にチケットをサーバに送信。 サーバはチケットデータを復号化し、中のTLS設定 情報を利用して通信を再開する。 • チケット鍵が複数のサーバ間で共有できていれば別 サーバに行っても大丈夫。(ただし鍵管理が大変) ClientHello Sesstion Ticket Ext ServerHello SessionTicket Ext Certificate ServerHelloDone ServerKeyExchange NewSessionTicket ChangeCipherSpec Finished ClientKeyExchange ChangeCipherSpec Finished
15.
NodeでTLS Ticketを使う • Node-v0.10で既に使えるが、単一プロセスのみ。 •
Node-v0.12ではクラスタの複数プロセス間でチケット鍵が共有可 • Cluster でTLSを使っている方は、今すぐNode-v0.12へ Node-v0.10.33 のTLSクラスター Node-v0.12-pre のTLSクラスター
16.
OCSP Stapling • OCSP
(Online Certificate Status Protocol): • 証明書が失効していないか確認するプロトコル • TLS初期接続時にクライアントが認証局サーバに確認。オーバヘッド • OCSP Stapling: • TLSサーバがOCSPレスポンスを証明書とともにクライアントに送信 • クライアントが認証局に確認する必要がない。Web表示の高速化 OCSP Response 証明書+OCSP Response ClientHello + status_request_v2 ext.
17.
NodeでOCSP Staplingを使う • Node-v0.12では
OCSPRequest イベントを新設 • コールバックの引数にOCSPレスポンスデータ を渡し、クライアントに送信 • 認証局のOCSPサーバにリクエストするのは結 構面倒なので、opensslで事前にリクエスト データを作成すると良い • OSCPレスポンスデータのキャッシュ管理も必 要。更新日時を取得するasn.1パーサも必要。 エラー時の処理判断も大切。 • 別途cronでOCSPレスポンスデータを管理する 手もある server.on('OCSPRequest', function(cert, issuer, cb) { var now = Date.now(); if (now > cache.nextUpdate && !cache.lock) { cache.lock = true; cache.der = null; HandleOCSPrequest(cb); } else { var msg = cache.der ? 'cache hit!': 'terminated'; console.log( 'OCSP Response:', msg); cb(null, cache.der); } }); ソースは、https://gist.github.com/shigeki/de5748cc0deb980bcb35 結果は openssl s_client –status –connect site:443 で確認
18.
Dynamic TLS record
(setMaxSendFragment) • GoogleのIlya Grigorik氏が推奨しているTLSパラメータのチューニング手法 • 通常TLSに書き込まれるデータ長は、レコードサイズ最大の16Kであることが多い。 • 最初のレスポンスデータの取得は、16Kバイトを受信してからになる。 • 最初のデータを復号化するには10個のTCPパケット(1.5K)を受信が必要。 • TLSのレコードサイズをTCPの1セグメントのサイズに収まるように小さくすれば受信した1個目か らデータの復号化が可能になる。 • よって受信したデータの1バイト目が表示される時間の短縮が図られる。 1.5K 1.5K 16K これ一つで 復号可能よ 16K全部受信しな いと復号できない
19.
NodeでTLS Dynamic Recordをやるには •
Googleサーバでのチューニング方法(ATSで採用済) • 最初は 1.3Kのレコードサイズ (1500 - 40 (IP) - 20 (TCP) - 40 (TCP options) - TLS overhead (60-100)) • 1Mバイト送信したらデフォルトの16Kに変更。 • 書き込みのアイドルが1秒以上になったら1.3Kに戻す。 • Nodeでは自動的にレコードサイズをチューニングする方法は不採用に • 替わりに固定的に変更するAPI(setMaxSendFragment)を新設 • 1.3Kで固定すると大きいデータで分割オーバヘッドが高くなる可能性も。 server.on('secureConnection', function(tlsSocket) { tlsSocket.setMaxSendFragment(1300); });
20.
小さいTLS Record Sizeの効果(rtt=1000msec時) MaxSendFragment
16K default MaxSendFragment 1.3K Time To First Byte の高速化 requestStart responseStart responseStartrequestStart
21.
SPDY, HTTP/2 • SPDY •
Googleが開発したWebの表示を高速化するプロトコル(TLSのみ) • Google/Twitter/Facebook/Yahoo.comで使用中 • Chrome/Firefox/IE10/Safari 多数のブラウザでサポート中 • Nodeで使うなら node-spdy を使いましょう • HTTP/2 • SPDYをベースとした次期HTTP仕様(TLS利用が中心) • HTTP/1.1のセマンティクスを互換保持 • 現在仕様化作業の大詰め。来年前半には完了予定 • 現在Firefoxとのテストで利用中のnode-http2が使える • 注意事項: • node-v0.10で利用するとTLS要求仕様(AEAD+PFS)が合わず接続できない場合があります。node-v0.12を使いま しょう。 • ただ開発は0.10系でやっているので未サポート • ALPNはまだopensslのベータなためnodeでは使えません。 • 使う場合には私のfork版があります。 https://github.com/shigeki/node/tree/alpn_support Ethernet IP(v4/v6) TCP TLS HTTP/2 Frame Layer HTTP/1.1 Semantics
22.
クライアント サーバ 1つの TCP接続 ストリーム(id:1) フレーム フレーム ストリーム(id:3) フレーム フレーム ストリーム(id:5) フレーム フレーム HTTP リクエスト レスポンス HTTP リクエスト レスポンス HTTP リクエスト レスポンス SPDY, HTTP/2の全二重多重化通信 仮想的なストリームチャンネルを生成して多重化を実現
23.
HTTP Head of
Line Blockingを回避 HTTP/2クライアント 画像サーバA 画像サーバB Reverse Proxy HTTP/2 多重化通信 レスポンス が速い レスポンスが 遅い HTTP/1.1クライアント TCPを6本張れるけど、1本中 に同時1リクエストの制限 1本のTCP
24.
SPDYのメリットが一番よくわかるデモ 多数の画像を表示して見え方に違いがあるのか? (SPDY vs
HTTP/1.1) 1. 少数画像 vs 多数画像。 2. 3枚目の画像毎に3秒のレスポンス遅延を入れる。
25.
まとめ Node-v0.12でTLS通信を最適化する方法はいろいろあります。 用法用量を守って正しくお使いください。 (special thanks to
http://www.irasutoya.com/)
Download