quic のはじめ方
ご指摘をいただいたので追記 2016-12-23 20:55
@kysnm chromium の quic_client の方は、サーバ認証を無効化する --disable-certificate-verification オプションを動くようにしたので、認証局発行以外でも大丈夫ですよ。
— Shigeki Ohtsu (@jovi0608) December 22, 2016
手元で試してみましたが、たしかにつながりました 🙌
ただ以下にも書きましたが Chromium は fetch してくるのに時間がかかる上、compile もそれなりに時間がかかります
@kysnm https://t.co/iffonzVi6C だと気分小さくなってるけど、まぁでかい人にはでかいね。go-quicの方は verifierが自前で作っているからコード修正しないと対応できなさそう。
— Shigeki Ohtsu (@jovi0608) December 22, 2016
@kysnm proto-quicはGoogleがメンテしてるので随時最新にしているけどchromiumのソースを余分に入れてて移行を楽にしてる。libquicはdevsistersが必要なソースだけ移植しているので大きな変更が入ると追随できない。サイズだけ比較すると辛いね。
— Shigeki Ohtsu (@jovi0608) December 22, 2016
goquic の verifier はこの辺かな?
goquic/proof_verifier.go at master · devsisters/goquic · GitHub
prot-quic は Linux じゃないと動かないようです
少なくとも手元の Macbook Pro では compile に至りませんでした
Installing build deps and syncing with Chromium repository... ERROR: lsb_release not found in $PATH done.
追記 2016-12-25 22:50
prot-quic が Linux のみサポートである事は README に書いてありました
iOS がサポートされたら Mac でも compile できるようになるかな?
Currently, the only supported platform is Linux (and the only tested version is Google's Ubuntu clone) but Windows and iOS should be coming soon
proto-quic/README.md at master · google/proto-quic · GitHub
はじめに
この記事は http2 Advent Calendar 2016 - Qiita の 22 日目です。
quic のはじめ方
現時点では以下の 2 つがあるようです
- chromium の standalone test server and client
- goquic の example
お手軽なのは goquic の方なのでそちらを紹介します
chromium だとソースコードを取ってくる時点でだいぶ時間がかってしまいます
chromium にチャレンジしてみたい方はこの辺を見ると良いと思います
goquic
README.md の通りなんですが、以下の手順で build します
go get ではなく、git clone した場合は git submodule init && git submodule update が必要なのでご注意を
この辺 で教えてくれるので実は忘れていても大丈夫
$ go get -u -d github.com/devsisters/goquic $ cd $GOPATH/src/github.com/devsisters/goquic $ ./build_libs.sh # (for debug build) $ ## GOQUIC_BUILD=Release ./build_libs.sh # (for release build) $ go build $GOPATH/src/github.com/devsisters/goquic/example/server.go $ go build $GOPATH/src/github.com/devsisters/goquic/example/client.go
go build を実行したディレクトリ直下に server
と client
という実行ファイルができています
server
server をそのまま実行すると以下のようなエラーになります
./server 2016/12/22 02:03:37 QUIC doesn't support non-encrypted mode anymore. Please provide -cert and -key option!
help があるので確認してみましょう
./server --help Usage of ./server: -addr string TCP/UDP listen address (default "0.0.0.0") -cert string Certificate file (PEM), will use encrypted QUIC and SSL when provided -key string Private key file (PEM), will use encrypted QUIC and SSL when provided -loglevel int Log level (default -1) -n int Number of concurrent quic dispatchers (default 1) -port int TCP/UDP port number to listen (default 8080) -quic_only Use QUIC Only -root string Root of path to serve under https://127.0.0.1/files/ (default "/tmp") -scfg string Server config JSON file. If not provided, new one will be generated -use_sslv3 Use SSLv3 on HTTP 1.1. HTTP2 and QUIC are not affected.
cert と key はきちんと認証局から証明を得たものでないと client 側がエラーになってしまうようです (client default の http ではなく https にして確認)
[1222/020754:VERBOSE1:quic_crypto_client_stream.cc(407)] Reasons for rejection: 2048 2016/12/22 02:07:55 Verify failedx509: certificate signed by unknown authority
いろいろとやり方はあるようなんですが確認していません
必要がある方はこの辺を見るとよいと思います
client
client も help を見てみましょう
./client --help Usage of ./client: -loglevel int Log level (default -1) -url string host to connect (default "http://127.0.0.1:8080/")
という訳で -url
をつけると任意のサーバーに接続してくれるようです
Google はすでに QUIC を利用しているので以下のようにすれば QUIC での接続を確認できます
./client -url https://www.google.co.jp/
おわりに
頑張って Ruby の Binding 書いてみようと思っていたんですが、進捗ダメでした…