OLD | NEW |
---|---|
(Empty) | |
1 <p class="note"> | |
2 <b>Note: </b> | |
not at google - send to devlin
2014/06/02 17:05:16
consider using <strong> not <b>
pneubeck (no reviews)
2014/06/03 09:22:21
Done.
| |
3 This API is only available on ChromeOS. | |
not at google - send to devlin
2014/06/02 17:05:16
mention what it will do on non-ChromeOS platforms
pneubeck (no reviews)
2014/06/03 09:22:21
What do you mean? On other platforms it's not avai
not at google - send to devlin
2014/06/03 14:44:15
Oops notifications is wrong.
And good point on th
pneubeck (no reviews)
2014/06/03 14:48:58
Shouldn't this behavior be the same as for all API
not at google - send to devlin
2014/06/03 15:12:20
Yes! We can auto-generate it.
But regarding my pr
| |
4 </p> | |
5 | |
6 <h2 id="usage">Usage</h2> | |
7 | |
8 Typical usage of this API to enroll a client certificate follows these steps: | |
9 <ul> | |
10 <li>Get all available tokens using $(ref:enterprise.platformKeys.getTokens). | |
11 </li> | |
12 <li>Find the Token with <code>id</code> equal <code>'user'</code>. Use this | |
13 Token subsequently.</li> | |
14 <li>Generate a key pair using the <code>generateKey</code> Token method | |
15 (defined in SubtleCrypto). This will return handle to the key.</li> | |
16 <li>Export the public key using the <code>exportKey</code> Token method | |
17 (defined in SubtleCrypto). | |
18 <li>Create the signature of the certification request's data using the | |
19 <code>sign</code> Token method (defined in SubtleCrypto).</li> | |
20 <li>Complete the certification request and send it to the certification | |
21 authority.</li> | |
22 <li>If a certificate is received, import it using | |
23 $(ref:enterprise.platformKeys.importCertificate)</li> | |
24 </ul> | |
25 | |
26 <p> | |
27 Here's an example that shows the major API interaction except the building and s ending of the certification request: | |
28 </p> | |
29 | |
30 <pre> | |
31 function getUserToken(callback) { | |
32 chrome.enterprise.platformKeys.getTokens(function(tokens) { | |
33 for (var i = 0; i < tokens.length; i++) { | |
34 if (tokens[i].id == 'user') { | |
35 callback(tokens[i]); | |
36 return; | |
37 } | |
38 } | |
39 callback(undefined); | |
40 }); | |
41 } | |
42 | |
43 function generateAndSign(userToken) { | |
44 var data = new Uint8Array([0, 5, 1, 2, 3, 4, 5, 6]); | |
45 var algorithm = { | |
46 name: "RSASSA-PKCS1-v1_5", | |
47 // RsaHashedKeyGenParams | |
48 modulusLength: 2048, | |
49 publicExponent: | |
50 new Uint8Array([0x01, 0x00, 0x01]), // Equivalent to 65537 | |
51 hash: { | |
52 name: "SHA-1", | |
53 } | |
54 }; | |
55 var cachedKeyPair; | |
56 userToken.subtleCrypto.generateKey(algorithm, false, ["sign"]) | |
57 .then(function(keyPair) { | |
58 cachedKeyPair = keyPair; | |
59 return userToken.subtleCrypto.exportKey('spki', keyPair.publicKey); | |
60 }, | |
61 console.log.bind(console)) | |
62 .then(function(publicKeySpki) { | |
63 // Build the Certification Request using the public key. | |
64 return userToken.subtleCrypto.sign( | |
65 {}, cachedKeyPair.privateKey, data); | |
66 }, | |
67 console.log.bind(console)) | |
68 .then(function(signature) { | |
69 // Complete the Certification Request with |signature|. | |
70 // Send out the request to the CA, calling back | |
71 // onClientCertificateReceived. | |
72 }, | |
73 console.log.bind(console)); | |
74 } | |
75 | |
76 function onClientCertificateReceived(userToken, certificate) { | |
77 chrome.enterprise.platformKeys.importCertificate(userToken.id, certificate); | |
78 } | |
79 | |
80 getUserToken(generateAndSign); | |
81 </pre> | |
OLD | NEW |