Project: chromium Issues People Development process History Sign in
New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.
Issue 581354 Persistent storage of RTCCertificate with IndexedDB
Starred by 3 users Project Member Reported by hbos@chromium.org, Jan 26 2016 Back to list
Status: Verified
Owner:
Closed: May 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 2
Type: Bug

Blocked on:
issue webrtc:5794

Blocking:
issue 528250



Sign in to add a comment
Add ability to establish key continuity by persisting RTCCertificate in IndexedDB and reuse.

See https://w3c.github.io/webrtc-pc/archives/20160125/webrtc.html#dictionary-rtcconfiguration-members

 
Comment 1 by hbos@chromium.org, Jan 26 2016
Blocking: chromium:528250
Comment 2 by hbos@chromium.org, Jan 29 2016
Labels: M-50
Comment 3 by hbos@chromium.org, Feb 17 2016
Labels: -M-50 M-52
Comment 4 by hbos@webrtc.org, Apr 15 2016
Blockedon: 5794
Comment 5 by hbos@chromium.org, Apr 15 2016
More info about RTCCertificate and IndexedDB:
- WebRTC spec: https://w3c.github.io/webrtc-pc/archives/20160125/webrtc.html#attributes-6
- Cloneable objects in whatwg HTML spec: https://html.spec.whatwg.org/multipage/infrastructure.html#cloneable-objects
- StructuredClone in whatwg HTML spec: https://html.spec.whatwg.org/multipage/infrastructure.html#structuredclone

blink-dev discussion:
https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/EQw7UeD9bsw

We may need to add support for cloneability of platform objects before we can add a Clone for RTCCertificate.

Also, in order to implement a Clone, we must make rtc::RTCCertificate serializable in the webrtc repo (https://bugs.webrtc.org/5794).
Project Member Comment 6 by bugdroid1@chromium.org, Apr 27 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/e007ec047dfbbf54e54a211d53b1ce9ed6d5815c

commit e007ec047dfbbf54e54a211d53b1ce9ed6d5815c
Author: hbos <hbos@chromium.org>
Date: Wed Apr 27 16:24:16 2016

WebRtcBrowserTest tests with RSA and ECDSA certificates.

- peerconnection.js/WebRtcTestBase: Ability to specify which
  certificate to use (or generate and use) when creating peer connections.
- WebRtcBrowserTest: Two new tests that use non-default certificates,
  generating RSA and ECDSA.

This gives integration test coverage to RSA and ECDSA, which is good
before switching so that ECDSA becomes default (previously only default
was tested).

Also, peerconnection.js's preparePeerConnectionWithCertificate can be
used in the future to ensure cloned certificates are usable for peer
connections. (When persistance and cloning of RTCCertificate is
supported.)

BUG=chromium:581354

Review-Url: https://codereview.chromium.org/1917133002
Cr-Commit-Position: refs/heads/master@{#390096}

[modify] https://crrev.com/e007ec047dfbbf54e54a211d53b1ce9ed6d5815c/chrome/browser/media/webrtc_browsertest.cc
[modify] https://crrev.com/e007ec047dfbbf54e54a211d53b1ce9ed6d5815c/chrome/browser/media/webrtc_browsertest_base.cc
[modify] https://crrev.com/e007ec047dfbbf54e54a211d53b1ce9ed6d5815c/chrome/browser/media/webrtc_browsertest_base.h
[modify] https://crrev.com/e007ec047dfbbf54e54a211d53b1ce9ed6d5815c/chrome/test/data/webrtc/peerconnection.js

Project Member Comment 7 by bugdroid1@chromium.org, Apr 28 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/external/webrtc.git/+/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232

commit 6b470a9413d2e65dd9078a63ed3f5f60e5ba5232
Author: hbos <hbos@webrtc.org>
Date: Thu Apr 28 12:14:21 2016

RTCCertificate serialization.

This CL adds the ability to convert RTCCertificate objects to and from
PEM string representations of it (its private key and certificate).
The RTCCertificate being a wrapper of SSLIdentity, this is where the
meat is.

Changes:
- SSLIdentity::PrivateKeyToPEMString() added. It together with the
  already existing SSLCertificate::ToPEMString() yields both private
  key and certificate PEM strings, both of which are required
  parameters to SSLIdentity::FromPEMStrings().
- Its only implementation, OpenSSLIdentity::PrivateKeyToPemString().
- SSLIdentity::PublicKeyToPEMString() added, used by tests.
- sslidentity_unittest.cc updated:
  * FromPEMStringsRSA and FromPEMStringsEC updated.
  * CloneIdentityRSA and CloneIdentityECDSA added.
- RTCCertificate::To/FromPem added, using new class RTCCertificatePem.
- rtccertificate_unittest.cc: New test CloneWithPemSerialization.
- Renamed rtc_unittests.cc to rtccertificate_unittest.cc to match
  convention.

BUG=webrtc:5794, chromium:581354

Review-Url: https://codereview.webrtc.org/1898383003
Cr-Commit-Position: refs/heads/master@{#12546}

[modify] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/base_tests.gyp
[modify] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/fakesslidentity.h
[modify] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/opensslidentity.cc
[modify] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/opensslidentity.h
[modify] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/rtccertificate.cc
[modify] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/rtccertificate.h
[rename] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/rtccertificate_unittest.cc
[modify] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/sslidentity.cc
[modify] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/sslidentity.h
[modify] https://crrev.com/6b470a9413d2e65dd9078a63ed3f5f60e5ba5232/webrtc/base/sslidentity_unittest.cc

Project Member Comment 8 by bugdroid1@chromium.org, May 4 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/8df58e17b49bc21bc4fe681e0f213f092b6de754

commit 8df58e17b49bc21bc4fe681e0f213f092b6de754
Author: hbos <hbos@chromium.org>
Date: Wed May 04 10:49:29 2016

RTCCertificate equals method for testing.

Adds JavaScript layer RTCCertificate.equals(RTCCertificate) that is only
exposed to tests (behind RuntimeEnabledFeature RTCCertificateTesting).

Blink interface and content implementation updated, the actual
comparison operation is defined in the WebRTC repo between
rtc::RTCCertificate objects.

The test function is not used, but will be used in a follow-up CL that
enables saving and loading RTCCertificate objects in IndexedDB. The
comparison will be used to make sure a clone is equal to the original
certificate.

BUG=chromium:581354

Review-Url: https://codereview.chromium.org/1932173002
Cr-Commit-Position: refs/heads/master@{#391476}

[modify] https://crrev.com/8df58e17b49bc21bc4fe681e0f213f092b6de754/content/renderer/media/rtc_certificate.cc
[modify] https://crrev.com/8df58e17b49bc21bc4fe681e0f213f092b6de754/content/renderer/media/rtc_certificate.h
[modify] https://crrev.com/8df58e17b49bc21bc4fe681e0f213f092b6de754/third_party/WebKit/Source/modules/mediastream/RTCCertificate.h
[add] https://crrev.com/8df58e17b49bc21bc4fe681e0f213f092b6de754/third_party/WebKit/Source/modules/mediastream/testing/InternalsRTCCertificate.cpp
[add] https://crrev.com/8df58e17b49bc21bc4fe681e0f213f092b6de754/third_party/WebKit/Source/modules/mediastream/testing/InternalsRTCCertificate.h
[add] https://crrev.com/8df58e17b49bc21bc4fe681e0f213f092b6de754/third_party/WebKit/Source/modules/mediastream/testing/InternalsRTCCertificate.idl
[modify] https://crrev.com/8df58e17b49bc21bc4fe681e0f213f092b6de754/third_party/WebKit/Source/modules/modules.gypi
[modify] https://crrev.com/8df58e17b49bc21bc4fe681e0f213f092b6de754/third_party/WebKit/public/platform/WebRTCCertificate.h

Project Member Comment 9 by bugdroid1@chromium.org, May 10 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/042933a05d5d0bde0aaea8882c7d74b79810c799

commit 042933a05d5d0bde0aaea8882c7d74b79810c799
Author: hbos <hbos@chromium.org>
Date: Tue May 10 12:14:36 2016

WebRtcBrowserTest prep-CL for IndexedDB cloning of RTCCertificate.

This is part of larger work that will allow persistent storage of
RTCCertificate in IndexedDB. The big picture can be seen here:
https://codereview.chromium.org/1949033002/

This CL implements part 3a+3b:

3. Unittests making sure RTCCertificate can be saved and loaded from IndexedDB
   a) chrome/test/data/webrtc/indexeddb.js added with functions for managing
      a database and saving and loading (cloning) certificates.
   b) WebRtcTestBase implementing C++ functions for calling the indexeddb.js
      API.

Part 3c is *NOT* implemented:
   c) WebRtcBrowserTest tests added which clone certificates and sets up calls
      using the clones.

This is because RTCCertificate cloning (pt.2) has not landed yet, so any attempt
to clone it in a unittest would fail. Part 2 + 3c will be done in a follow-up.

BUG= 581354 

Review-Url: https://codereview.chromium.org/1962673002
Cr-Commit-Position: refs/heads/master@{#392582}

[modify] https://crrev.com/042933a05d5d0bde0aaea8882c7d74b79810c799/chrome/browser/media/webrtc_browsertest.cc
[modify] https://crrev.com/042933a05d5d0bde0aaea8882c7d74b79810c799/chrome/browser/media/webrtc_browsertest_base.cc
[modify] https://crrev.com/042933a05d5d0bde0aaea8882c7d74b79810c799/chrome/browser/media/webrtc_browsertest_base.h
[add] https://crrev.com/042933a05d5d0bde0aaea8882c7d74b79810c799/chrome/test/data/webrtc/indexeddb.js
[modify] https://crrev.com/042933a05d5d0bde0aaea8882c7d74b79810c799/chrome/test/data/webrtc/peerconnection.js
[modify] https://crrev.com/042933a05d5d0bde0aaea8882c7d74b79810c799/chrome/test/data/webrtc/webrtc_audio_quality_test.html
[modify] https://crrev.com/042933a05d5d0bde0aaea8882c7d74b79810c799/chrome/test/data/webrtc/webrtc_jsep01_test.html
[modify] https://crrev.com/042933a05d5d0bde0aaea8882c7d74b79810c799/chrome/test/data/webrtc/webrtc_video_quality_test.html

Comment 10 by hbos@chromium.org, May 11 2016
This has also landed but the BUG= ID was typo'd: https://codereview.chromium.org/1957293002/
Project Member Comment 11 by bugdroid1@chromium.org, May 11 2016
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/f8730debe7de67ffc97aed74a5cd7f0cd799cb60

commit f8730debe7de67ffc97aed74a5cd7f0cd799cb60
Author: hbos <hbos@chromium.org>
Date: Wed May 11 10:20:49 2016

RTCCertificate serialization - persistent storage in IndexedDB.

This is part of larger work that will allow persistent storage of
RTCCertificate in IndexedDB. The big picture can be seen here:
https://codereview.chromium.org/1949033002/

This CL implements part 2 and 3c:

2. RTCCertificate serialization (structured clone algorithm)
   a) ScriptValueSerializerForModules and friends are updated with write and
      read functions for RTCCertificate (impl using 1.).

3. Unittests making sure RTCCertificate can be saved and loaded from IndexedDB
   c) WebRtcBrowserTest tests added which clone certificates and sets up calls
      using the clones.

This is the final piece of the puzzle, pt 1 and 3a-b have already landed.
Landing this turns the feature on.

BUG= 581354 

Review-Url: https://codereview.chromium.org/1959333002
Cr-Commit-Position: refs/heads/master@{#392893}

[modify] https://crrev.com/f8730debe7de67ffc97aed74a5cd7f0cd799cb60/chrome/browser/media/webrtc_browsertest.cc
[modify] https://crrev.com/f8730debe7de67ffc97aed74a5cd7f0cd799cb60/third_party/WebKit/Source/bindings/core/v8/SerializationTag.h
[modify] https://crrev.com/f8730debe7de67ffc97aed74a5cd7f0cd799cb60/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.cpp
[modify] https://crrev.com/f8730debe7de67ffc97aed74a5cd7f0cd799cb60/third_party/WebKit/Source/bindings/modules/v8/ScriptValueSerializerForModules.h

Comment 12 by hbos@chromium.org, May 11 2016
Status: Verified
With the above CL this has landed. Also, here is the Intent to Ship: https://groups.google.com/a/chromium.org/forum/#!topic/blink-dev/duyso0oe6jM

This feature is now launched.
Sign in to add a comment