追記 20170120
NginxでTLS1.3 動いた(OpenSSL)
後日Nginxでも動いたので、上記記事に記載
セキュリティとパフォーマンスが向上したTLS1.3の登場が待ち望まれております。
標準化としては、現在IETFのTLSワーキンググループではWGラストコールという段階に入っており、2月頃にはIESGに提出され標準化は最終段階となる見込みになっております(結構そっから議論があったりはするんですが)。
すでに、実装としてはChrome, Firefoxといったブラウザもオプションで有効化に出来る他、BoringSSL, picotls, nssといった実装も出てきており、相互通信テストなども行われております。
昨年行われたIETF97時点ですが、下記のような実装で通信テストに成功しています。
https://www.ietf.org/proceedings/97/slides/slides-97-tls-tls-13-00.pdf
さて、OpenSSLはと思うところですが、同じくIETF97時点ですが、OpenSSLの状況が報告されております。すべての作業はgithub上でプルリクが出されており、次のリリースで出るとのことでした。
https://www.ietf.org/proceedings/97/slides/slides-97-tls-openssl-update-00.pdf
TLS1.3の中身の話は、kazuhoさんやkazuさんの資料がわかりやすいかと思います
- http://www.slideshare.net/kazuho/tls-13-0rtt
- http://seminar-materials.iijlab.net/iijlab-seminar/iijlab-seminar-20170110.pdf
とりあえず、現状で試してみる
OpenSSLはまだまだ開発中で動かないかもと思いながらも、試してみる
./config時にenable-tls1_3を与える
$ git clone https://github.com/openssl/openssl.git $ cd ./openssl $ git log --oneline |head -n1 ef3f621 Fix man3 reference to CRYPTO_secure_used $ ./config enable-tls1_3 $ make
既存実装のリストは下記にあるので、公開URLのものから幾つか繋いで見る
https://github.com/tlswg/tls13-spec/wiki/Implementations
クライアントで試す
他のバージョンと同様 --tls1_3を与える
$ LD_LIBRARY_PATH=./ ./apps/openssl s_client -connect franziskuskiefer.de:9913 --tls1_3 ... New, TLSv1.3, Cipher is TLS13-AES-128-GCM-SHA256 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.3 Cipher : TLS13-AES-128-GCM-SHA256 Session-ID: Session-ID-ctx: Master-Key: AC496ABF3FE5EF1C197CA5B825746CD58A05E86494288C82057604F819C2B757 PSK identity: None PSK identity hint: None SRP username: None Start Time: 1484672332 Timeout : 7200 (sec) Verify return code: 20 (unable to get local issuer certificate) Extended master secret: no --- GET / HTTP/1.1 host:test HTTP/1.1 200 OK Date: Tue, 17 Jan 2017 16:58:56 GMT Server: Apache Upgrade: h2 Connection: Upgrade, close Last-Modified: Fri, 03 Jun 2016 08:50:46 GMT ETag: "d5f-5345bd194edaf" Accept-Ranges: bytes Content-Length: 3423 Content-Type: text/html; charset=UTF-8 <!DOCTYPE html> ...
他のは繋がらなかったものの、つながるサーバもあった。
(どこが悪いのかまだちゃんと見てない...
サーバ側で試す
Chrome canaryと通信させる
$ LD_LIBRARY_PATH=./ ./apps/openssl s_server -cert ../server.crt -key ../server.key -tls1_3 ... -----BEGIN SSL SESSION PARAMETERS----- MGUCAQECAgMEBAITAQQgMuuXEJUnlwWHomt0g/L89WPXiudXU2AHGFd6NdSKBPYE IIKAszcJj6hsNaEPwtZz6t/IskTrQB5QnBvCCV9YjxZ+oQYCBFh+TwiiBAICHCCk BgQEAQAAAA== -----END SSL SESSION PARAMETERS----- Shared ciphers:TLS13-AES-128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA Signature Algorithms: ECDSA+SHA256:RSA+SHA256:RSA+SHA256:ECDSA+SHA384:RSA+SHA384:RSA+SHA384:RSA+SHA512:RSA+SHA512:RSA+SHA1 Shared Signature Algorithms: ECDSA+SHA256:RSA+SHA256:RSA+SHA256:ECDSA+SHA384:RSA+SHA384:RSA+SHA384:RSA+SHA512:RSA+SHA512:RSA+SHA1 Supported Elliptic Groups: 0x9A9A:X25519:P-256:P-384 Shared Elliptic groups: X25519:P-256:P-384 CIPHER is TLS13-AES-128-GCM-SHA256 Secure Renegotiation IS NOT supported GET / HTTP/1.1 Host: 192.168.0.179:4433 Connection: keep-alive Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2984.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, sdch, br Accept-Language: ja,en-US;q=0.8,en;q=0.6
なんか、怪しいけど、HTTPリクエストが来てることは確認できた。