Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
【19-C-L】Web開発者ならおさえておきたい「常時SSL/TLS化の実装ポイント」
Developers Summit
自動でできるかな?
_norin_
Ietf95 http2
Kaoru Maeda
Openflow超解釈
Hiroaki Kawai
TLS, HTTP/2演習
shigeki_ohtsu
http2study 20160423 IETF95 Report
Kaoru Maeda
#mailerstudy 02 メールと暗号 - SSL/TLS -
Takashi Takizawa
IETF96 Update oauth tokbind
Kaoru Maeda
1
of
25
Top clipped slide
Node-v0.12のTLSを256倍使いこなす方法
Nov. 14, 2014
•
0 likes
22 likes
×
Be the first to like this
Show More
•
25,263 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Download Now
Download to read offline
Report
Technology
new TLS feature in Node-v0.12
shigeki_ohtsu
Follow
Advertisement
Advertisement
Advertisement
Recommended
SSL/TLSの基礎と最新動向
shigeki_ohtsu
56.6K views
•
118 slides
いろいろなSSL/TLS設定ガイドライン (JNSA電子署名WG 実世界の暗号・認証技術勉強会資料)
Kenji Urushima
8.4K views
•
29 slides
最新Webプロトコル傾向と対策
Kensaku Komatsu
34.6K views
•
47 slides
IETF93 Prague報告Web関連+QUIC
Kaoru Maeda
1.3K views
•
25 slides
東京Node学園 今できる通信高速化にトライしてみた
Yoshiki Shibukawa
9.9K views
•
17 slides
SSL入門
Takeru Ujinawa
1.4K views
•
23 slides
More Related Content
Slideshows for you
(20)
【19-C-L】Web開発者ならおさえておきたい「常時SSL/TLS化の実装ポイント」
Developers Summit
•
3.2K views
自動でできるかな?
_norin_
•
3.6K views
Ietf95 http2
Kaoru Maeda
•
1.1K views
Openflow超解釈
Hiroaki Kawai
•
1.4K views
TLS, HTTP/2演習
shigeki_ohtsu
•
12.8K views
http2study 20160423 IETF95 Report
Kaoru Maeda
•
1.5K views
#mailerstudy 02 メールと暗号 - SSL/TLS -
Takashi Takizawa
•
7.7K views
IETF96 Update oauth tokbind
Kaoru Maeda
•
1.7K views
HTTP2入門
Sota Sugiura
•
1.1K views
HTML5と WebSocket / WebRTC / Web Audio API / WebGL 技術解説
You_Kinjoh
•
36.1K views
暗号技術入門
MITSUNARI Shigeo
•
12.2K views
第43回HTML5とか勉強会 SPDY/QUICデモ
shigeki_ohtsu
•
3.9K views
ConfD で Linux にNetconfを喋らせてみた
Akira Iwamoto
•
5.5K views
HTTP 2.0のヘッダ圧縮(HPACK)
Jun Fujisawa
•
5.9K views
ブラウザで動く準同型暗号
MITSUNARI Shigeo
•
3.7K views
JNSA電子署名WG勉強会 2013.09.30 jsrsasignとjsjwsについて
Kenji Urushima
•
11.5K views
HTTP/2: ぼくたちのWebはどう変わるのか
Kaoru Maeda
•
1.8K views
WebRTCとPeer.jsを使った実装
Yuta Suzuki
•
7.6K views
Amazon CloudFront TLS/SSL Seminar 20160804
Hayato Kiriyama
•
3.8K views
Dockerと外部ルータを連携させる仕組みを作ってみた
npsg
•
4K views
Similar to Node-v0.12のTLSを256倍使いこなす方法
(20)
IETF102 Report Authorization
Kaoru Maeda
•
845 views
Observability, Service Mesh and Microservices
Taiki
•
565 views
Draft: Observability, Service Mesh and Microservices
Taiki
•
77 views
認証/認可が実現する安全で高速分析可能な分析処理基盤
Masahiro Kiura
•
7.3K views
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Toru Yamaguchi
•
3.8K views
OpenStack API
Akira Yoshiyama
•
6.5K views
Kubernetesと閉域網
Han Li
•
862 views
2016 February - WebRTC Conference Japan - 日本語
Alexandre Gouaillard
•
832 views
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
Shuichi Yukimoto
•
3.3K views
AKS (k8s) Hands on Lab Contents
Yoshio Terada
•
827 views
2015-ShowNetステージ-SDN/NFV
Interop Tokyo ShowNet NOC Team
•
86 views
Automation Anywhere Enterprise A2019.16 新機能紹介
Automation Anywhere Japan
•
931 views
The Latest Specs of OpenID Connect at #idcon 9
Ryo Ito
•
1.7K views
fluentd を利用した大規模ウェブサービスのロギング
Yuichi Tateno
•
27.2K views
How to Make Own Framework built on OWIN
Yoshifumi Kawai
•
38K views
Node の HTTP/2.0 モジュール iij-http2 の実装苦労話
shigeki_ohtsu
•
5.3K views
サーバーレスのアーキテクチャパターンとそれぞれの実装・テストの勘所
真吾 吉田
•
16.5K views
20210129 azure webapplogging
Takayoshi Tanaka
•
524 views
OAuthのHolder of Key Token
Yuichi Nakamura
•
1.3K views
脆弱性事例に学ぶセキュアコーディング「SSL/TLS証明書検証」編 (KOF2014)
JPCERT Coordination Center
•
11.5K views
Advertisement
More from shigeki_ohtsu
(15)
HTTP/2, QUIC入門
shigeki_ohtsu
•
46.9K views
HTTP/2の現状とこれから
shigeki_ohtsu
•
113.5K views
Technical Overview of QUIC
shigeki_ohtsu
•
16.3K views
Node-v0.12の新機能について
shigeki_ohtsu
•
26.5K views
httpbis interim@チューリッヒ レポート
shigeki_ohtsu
•
4K views
HTTP/2.0がもたらすWebサービスの進化(後半)
shigeki_ohtsu
•
10K views
HTTP/2.0 HPAC-03 エンコーディング手法 by tatsuhiro_t
shigeki_ohtsu
•
1.5K views
httpbis interim@シアトル レポート(第2回HTTP/2.0接続試験)
shigeki_ohtsu
•
2.8K views
httpbis interim とhttp2.0相互接続試験の話
shigeki_ohtsu
•
8.2K views
Stream2の基本
shigeki_ohtsu
•
8.6K views
Node.js で SPDYのベンチマーク体験サイトを作りました
shigeki_ohtsu
•
3.5K views
SPDYの話
shigeki_ohtsu
•
11.3K views
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
shigeki_ohtsu
•
27.7K views
SPDYの中身を見てみよう
shigeki_ohtsu
•
4K views
node-gypを使ったネイティブモジュールの作成
shigeki_ohtsu
•
20.6K views
Recently uploaded
(20)
MC-800DMT intrusion detector manual
Vedard Security Alarm System Store
•
3 views
3Dプリンタって いいね
infinite_loop
•
64 views
【DL輪読会】Egocentric Video Task Translation (CVPR 2023 Highlight)
Deep Learning JP
•
95 views
JSONEncoderで詰まった話
とん とんぼ
•
144 views
Voyager: An Open-Ended Embodied Agent with Large Language Models
harmonylab
•
23 views
mi-6. 画像分類システム
kunihikokaneko1
•
0 views
Kubernetes超入門
Takashi Suzuki
•
5 views
AIEXPO_CDLE名古屋紹介
KotaMiyano
•
4 views
mi-3. データサイエンス・AIの演習
kunihikokaneko1
•
0 views
Windows ChatGPT Bing AI.pptx
Atomu Hidaka
•
7 views
mi-2. データサイエンス・AIの事例
kunihikokaneko1
•
0 views
mi-4. 機械学習
kunihikokaneko1
•
0 views
CDLEハッカソン2022参加報告.pdf
SHOIWA1
•
10 views
mi-5. ディープラーニング
kunihikokaneko1
•
0 views
GitHub最新情報キャッチアップ 2023年6月
Kazumi IWANAGA
•
7 views
ChatGPT + LlamaIndex 0 .6 による チャットボット の実装
Takanari Tokuwa
•
73 views
生成AIのビルド方法 (ChatGPT)
Citynow Asia Inc
•
0 views
【DL輪読会】HyperDiffusion: Generating Implicit Neural Fields withWeight-Space Dif...
Deep Learning JP
•
6 views
JSTQB_テストマネジメントとレビュープロセス.pdf
akipii Oga
•
266 views
触感に関わる共感覚的表現と基本6感情の対応関係の検証
Matsushita Laboratory
•
22 views
Advertisement
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを 256倍使いこなす方法 大津 繁樹 (@jovi0608) 株式会社インターネットイニシアティブ(IIJ) 東京Node学園祭2014 2014年11月15日
自己紹介 • 名前: 大津
繁樹 • 所属: 株式会社インターネットイニシアティブ(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関連です。
TLS (Transport Layer
Security)の利用状況 TLS通信 認証、暗号化、 改ざん防止 図参照 https://plus.google.com/+IlyaGrigorik/posts/7VSuQ66qA3C GoogleによるChromeの統計調査 から、ここ2年間でhttpsサイトへ のナビゲーションは28%から58% に増加
IAB(Internet Architecture Board)からインターネッ トの信頼性に関する声明 https://www.iab.org/2014/11/14/iab-statement-on-internet-confidentiality/ IABは、現在プロトコル設計者・開発者・運用者がインターネットトラフィックの 標準として暗号化を行うことが重要であると信じている。できる限り認証と共に暗 号を使うべきだが、認証なしの機密性を持つプロトコルでもRFC7258で記載された 「広範囲な盗聴行為」に対して有用となりえる。
発表内容 • 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) をサーバオプションに追加しましょう。)
目指せ A+ のTLSサーバ ソースはこちら https://gist.github.com/shigeki/986c53242f5bd3d78609 https://www.ssllabs.com/ssltest/index.html
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
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++
TLSSocket • Node-v0.10までの CleartextStream
の替わり • CleartextStreamのAPIの互換保持 • ちゃんと net.Socketを継承し、APIを完備 • TLS周りの通信に関する新規機能のAPIを追加 より直観的でわかり易くなった。 EventEmitter Stream Readable Writable Duplex Socket TLSSocket
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倍に性能向上!
PFS(Perfect Forward Secrecy) •
セッション毎に一時的に有効な公開鍵を交換して暗号鍵を共有す る方式 • 証明書の秘密鍵が危殆化しても過去の通信データを復号化できな い。今後主流となる鍵交換方式。 • Node-v0.12から ECDHE, DHE の2種類が利用可能 • ECDHEの方が性能が良いのでそっちを優先指定(デフォルト) • ECDHEはデフォルトで何もせず利用できる。(prime256v1) • DHEの利用dhparamファイルを生成と指定が必要。現状十分な強 度を持つには2048bit長以上で生成すること。
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などは別の条件。
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は条件が違います
TLS Ticket • サーバからクライアントにTLS再接続時に利用する CipherSuite/MasterSecretが含まれた設定データ(チ ケット)を暗号化して渡す。 •
渡したチケット情報はサーバ側では保持しない。 • クライアントは再接続時にチケットをサーバに送信。 サーバはチケットデータを復号化し、中のTLS設定 情報を利用して通信を再開する。 • チケット鍵が複数のサーバ間で共有できていれば別 サーバに行っても大丈夫。(ただし鍵管理が大変) ClientHello Sesstion Ticket Ext ServerHello SessionTicket Ext Certificate ServerHelloDone ServerKeyExchange NewSessionTicket ChangeCipherSpec Finished ClientKeyExchange ChangeCipherSpec Finished
NodeでTLS Ticketを使う • Node-v0.10で既に使えるが、単一プロセスのみ。 •
Node-v0.12ではクラスタの複数プロセス間でチケット鍵が共有可 • Cluster でTLSを使っている方は、今すぐNode-v0.12へ Node-v0.10.33 のTLSクラスター Node-v0.12-pre のTLSクラスター
OCSP Stapling • OCSP
(Online Certificate Status Protocol): • 証明書が失効していないか確認するプロトコル • TLS初期接続時にクライアントが認証局サーバに確認。オーバヘッド • OCSP Stapling: • TLSサーバがOCSPレスポンスを証明書とともにクライアントに送信 • クライアントが認証局に確認する必要がない。Web表示の高速化 OCSP Response 証明書+OCSP Response ClientHello + status_request_v2 ext.
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 で確認
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全部受信しな いと復号できない
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); });
小さいTLS Record Sizeの効果(rtt=1000msec時) MaxSendFragment
16K default MaxSendFragment 1.3K Time To First Byte の高速化 requestStart responseStart responseStartrequestStart
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
クライアント サーバ 1つの TCP接続 ストリーム(id:1) フレーム フレーム ストリーム(id:3) フレーム フレーム ストリーム(id:5) フレーム フレーム HTTP リクエスト レスポンス HTTP リクエスト レスポンス HTTP リクエスト レスポンス SPDY, HTTP/2の全二重多重化通信 仮想的なストリームチャンネルを生成して多重化を実現
HTTP Head of
Line Blockingを回避 HTTP/2クライアント 画像サーバA 画像サーバB Reverse Proxy HTTP/2 多重化通信 レスポンス が速い レスポンスが 遅い HTTP/1.1クライアント TCPを6本張れるけど、1本中 に同時1リクエストの制限 1本のTCP
SPDYのメリットが一番よくわかるデモ 多数の画像を表示して見え方に違いがあるのか? (SPDY vs
HTTP/1.1) 1. 少数画像 vs 多数画像。 2. 3枚目の画像毎に3秒のレスポンス遅延を入れる。
まとめ Node-v0.12でTLS通信を最適化する方法はいろいろあります。 用法用量を守って正しくお使いください。 (special thanks to
http://www.irasutoya.com/)
Advertisement