Chrome M74 で WebRTC では DTLS 1.2 が必須になる (M81 まで引き伸ばされました)

追記 2019–11–08

Chrome M81で DTLS 1.0 が無効になるようです。

Firefox 71 から DTLS 1.2 のみでのテストが可能になるり、2020 年3 月には無効にしたいとのこと。

追記

M80 までは落とさないことが決定したようです。M74 で落とされるのは Revert されていました。

”This has broken twilio, webex and ntt skyway”

影響範囲がかなり大きかったみたいですね。

かなり大きな変更ではあるので、罠にはまらない人がいないようにするため、情報共有のために書いておきます。

https://webrtc-review.googlesource.com/c/src/+/125141

2019 年 4 月 23 日にリリース予定の Chrome M74 の WebRTC では DTLS 1.0 と TLS 1.0/1.1 が利用できなくなります。なぜ TLS ? と思うかもしれませんが、これは TURN-TLS 向けですね。

つまり DTLS 1.2 と TLS 1.2 への対応が必須になります。とはいえ通常は P2P でやり取りするということもあり、問題になりません。全てのブラウザは DTLS 1.2 に対応していますし、TURN サーバも TLS 1.2 対応しているのがほとんどでしょう。

DTLS 1.2 になるのはまぁ良いとして、 Cipher Suite の方で ECDSA と P-256 が必須なんですよね。

WebRTC の DTLS では証明書のやり取りはブラウザが動的生成した自己署名証明書を利用するんですが、今までは RSA 2048 (1024 だったかも) を利用していましたが、これが ECDSA に変わることになります。

追記

確かに Chrome Canary M75 では ECDSA の証明書をクライアントが生成していました。

ただ CipherSuites 見る限りは RSA でも受け付けてくれそうです。

ECDSA にしなければいけないというのは大丈夫そうです。

問題になるのは SFU や MCU というサーバ経由です。サーバ経由の場合 DTLS に利用する証明書は自動生成されないことが多く、用意した証明書を利用していることがほとんどでしょう。

その場合 ECDSA をあえて使ってることは少ないのでまずは証明書を ECDSA で作成する必要があります。これめんどくさいなと思いました。

SFU / MCU の対応

日本のサービスなどで使われていたりする MCU/SFU の対応状況を適当ですが調べておきました。

Janus

作者が日本大好きで日本語も話せることで有名な Janus ですが、早速対応しています。Mixer が利用していることで有名な OSS です。

古い OpenSSL のバージョンのときに強制的に DTLS 1.2 を利用するようにしています。古い OpenSSL だと DTLS 1.0 のみしか対応していないとかがあったと記憶しています。

証明書周りについてはわからず。

Mediasoup

Mediasoup は動的に証明書を生成しています。ただ、証明書の生成が RSA のように見えるので、ここが ECDSA になるような気がします。

Kurento

Kurento ですが暗号周りは OpenSSL に完全移行したようです。ただ証明書の部分、OpenSSL の最小バージョンや DTLS 1.2 に対応しているかはわかりませんでした、残念。

詳しい情報をお持ちの方、是非 Twitter にてご連絡ください。

Jitsi

Jitsi は現在対応中のようです、 Issues が上がっています。

全然関係ないですが … 中の人からコメントがあって、わかる。ってなりました。

Jitsi を利用している SkyWay は公式で発表していました。さすがですね。

おそらく先程の Issue で Jitsi 開発チームである 8x8 と連携していくのだと思います。オープンソースはこの辺りがいろいろできるのがいいですよね

Licode

licode はちょっとパット見わからなかったですが普通に OpenSSL を利用しているので、OpenSSL のバージョンを古いのを使っていない限りは問題なさそうです。おそらく Janus と同じ対応になるのかと思います。

Sora

自社製品は 2015 年に DTLS 1.2 への対応を完了しています。さらに動的に ECDSA な証明書を生成する仕組みが入っていますので問題ありません。 Chrome Dev M74 でも Chrome Canary M75 でも問題なく繋がっています。

OpenSSL も暗号部分のみの利用なうえに組み込みで最新の 1.1.1 を利用しているので問題ありません。

DTLS 1.2 を優先して実装したのは単に 1.0 対応がだるかったからというオチだったりします。

まとめ

WebRTC はスピード感があって、この辺も数ヶ月であっさり変えていったりするのでできるだけ最新に追従していくのが重要です。

今後だと RTP 拡張が 1 バイトと 2 バイトがの混合対応だったり、QUIC 対応だったり、AV1 対応だったり、Simulcast 対応だったりと、山程積まれている課題は多いです。

ただそれが面白いところではあるんですけどね。

おまけ

DTLS 1.3 の策定が進んでいます。

DTLS 1.3 が出たから DTLS 1.2 が無効になるということはありませんので、安心してください。DTLS 1.2 は LTSという感じととってもらって良いです。

DTLS 1.2 が使えなくなるより、 WebRTC のプロトコルが QUIC になる方が早いと思います。

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store