OLD | NEW |
(Empty) | |
| 1 <p class="note"> |
| 2 <strong>Note: </strong> |
| 3 This API is only available on Chrome OS and to |
| 4 <a href="https://support.google.com/chrome/a/answer/1375694?hl=en">extensions pr
e-installed by policy</a>. |
| 5 </p> |
| 6 |
| 7 <h2 id="usage">Usage</h2> |
| 8 |
| 9 Typical usage of this API to enroll a client certificate follows these steps: |
| 10 <ul> |
| 11 <li>Get all available tokens using $(ref:enterprise.platformKeys.getTokens). |
| 12 </li> |
| 13 <li>Find the Token with <code>id</code> equal <code>"user"</code>. Use this |
| 14 Token subsequently.</li> |
| 15 <li>Generate a key pair using the <code>generateKey</code> Token method |
| 16 (defined in SubtleCrypto). This will return handle to the key.</li> |
| 17 <li>Export the public key using the <code>exportKey</code> Token method |
| 18 (defined in SubtleCrypto). |
| 19 <li>Create the signature of the certification request's data using the |
| 20 <code>sign</code> Token method (defined in SubtleCrypto).</li> |
| 21 <li>Complete the certification request and send it to the certification |
| 22 authority.</li> |
| 23 <li>If a certificate is received, import it using |
| 24 $(ref:enterprise.platformKeys.importCertificate)</li> |
| 25 </ul> |
| 26 |
| 27 <p> |
| 28 Here's an example that shows the major API interaction except the building and s
ending of the certification request: |
| 29 </p> |
| 30 |
| 31 <pre data-filename="background.js"> |
| 32 function getUserToken(callback) { |
| 33 chrome.enterprise.platformKeys.getTokens(function(tokens) { |
| 34 for (var i = 0; i < tokens.length; i++) { |
| 35 if (tokens[i].id == "user") { |
| 36 callback(tokens[i]); |
| 37 return; |
| 38 } |
| 39 } |
| 40 callback(undefined); |
| 41 }); |
| 42 } |
| 43 |
| 44 function generateAndSign(userToken) { |
| 45 var data = new Uint8Array([0, 5, 1, 2, 3, 4, 5, 6]); |
| 46 var algorithm = { |
| 47 name: "RSASSA-PKCS1-v1_5", |
| 48 // RsaHashedKeyGenParams |
| 49 modulusLength: 2048, |
| 50 publicExponent: |
| 51 new Uint8Array([0x01, 0x00, 0x01]), // Equivalent to 65537 |
| 52 hash: { |
| 53 name: "SHA-1", |
| 54 } |
| 55 }; |
| 56 var cachedKeyPair; |
| 57 userToken.subtleCrypto.generateKey(algorithm, false, ["sign"]) |
| 58 .then(function(keyPair) { |
| 59 cachedKeyPair = keyPair; |
| 60 return userToken.subtleCrypto.exportKey("spki", keyPair.publicKey); |
| 61 }, |
| 62 console.log.bind(console)) |
| 63 .then(function(publicKeySpki) { |
| 64 // Build the Certification Request using the public key. |
| 65 return userToken.subtleCrypto.sign( |
| 66 {name : "RSASSA-PKCS1-v1_5"}, cachedKeyPair.privateKey, data); |
| 67 }, |
| 68 console.log.bind(console)) |
| 69 .then(function(signature) { |
| 70 // Complete the Certification Request with |signature|. |
| 71 // Send out the request to the CA, calling back |
| 72 // onClientCertificateReceived. |
| 73 }, |
| 74 console.log.bind(console)); |
| 75 } |
| 76 |
| 77 function onClientCertificateReceived(userToken, certificate) { |
| 78 chrome.enterprise.platformKeys.importCertificate(userToken.id, certificate); |
| 79 } |
| 80 |
| 81 getUserToken(generateAndSign); |
| 82 </pre> |
OLD | NEW |