คำอธิบาย
ใช้ chrome.enterprise.platformKeys API เพื่อสร้างคีย์และติดตั้งใบรับรองสำหรับคีย์เหล่านี้ แพลตฟอร์มจะจัดการใบรับรองและสามารถใช้สำหรับการตรวจสอบสิทธิ์ TLS, การเข้าถึงเครือข่าย หรือโดยส่วนขยายอื่นๆ ผ่าน chrome.platformKeys
สิทธิ์
enterprise.platformKeysความพร้อมใช้งาน
แนวคิดและการใช้งาน
การใช้งาน API นี้โดยทั่วไปเพื่อลงทะเบียนใบรับรองไคลเอ็นต์จะเป็นไปตามขั้นตอนต่อไปนี้
รับโทเค็นทั้งหมดที่มีโดยใช้
enterprise.platformKeys.getTokens()ค้นหาโทเค็นที่มี
idเท่ากับ"user"ใช้โทเค็นนี้ในภายหลังสร้างคู่คีย์โดยใช้วิธีการ
generateKey()Token (กำหนดไว้ใน SubtleCrypto) การดำเนินการนี้จะแสดงแฮนเดิลของคีย์ส่งออกคีย์สาธารณะโดยใช้เมธอด
exportKey()Token (กำหนดไว้ใน SubtleCrypto)สร้างลายเซ็นของข้อมูลคำขอการรับรองโดยใช้เมธอด
sign()Token (กำหนดไว้ใน SubtleCrypto)กรอกคำขอการรับรองให้เสร็จสมบูรณ์และส่งไปยังหน่วยงานที่ให้การรับรอง
หากได้รับใบรับรอง ให้นำเข้าโดยใช้ [
enterprise.platformKeys.importCertificate()`[3]
ต่อไปนี้เป็นตัวอย่างที่แสดงการโต้ตอบ API หลัก ยกเว้นการสร้างและการส่งคำขอการรับรอง
function getUserToken(callback) {
browser.enterprise.platformKeys.getTokens(function(tokens) {
for (var i = 0; i < tokens.length; i++) {
if (tokens[i].id == "user") {
callback(tokens[i]);
return;
}
}
callback(undefined);
});
}
function generateAndSign(userToken) {
var data = new Uint8Array([0, 5, 1, 2, 3, 4, 5, 6]);
var algorithm = {
name: "RSASSA-PKCS1-v1_5",
// RsaHashedKeyGenParams
modulusLength: 2048,
publicExponent:
new Uint8Array([0x01, 0x00, 0x01]), // Equivalent to 65537
hash: {
name: "SHA-256",
}
};
var cachedKeyPair;
userToken.subtleCrypto.generateKey(algorithm, false, ["sign"])
.then(function(keyPair) {
cachedKeyPair = keyPair;
return userToken.subtleCrypto.exportKey("spki", keyPair.publicKey);
},
console.log.bind(console))
.then(function(publicKeySpki) {
// Build the Certification Request using the public key.
return userToken.subtleCrypto.sign(
{name : "RSASSA-PKCS1-v1_5"}, cachedKeyPair.privateKey, data);
},
console.log.bind(console))
.then(function(signature) {
// Complete the Certification Request with |signature|.
// Send out the request to the CA, calling back
// onClientCertificateReceived.
},
console.log.bind(console));
}
function onClientCertificateReceived(userToken, certificate) {
browser.enterprise.platformKeys.importCertificate(userToken.id, certificate);
}
getUserToken(generateAndSign);
ประเภท
Algorithm
ประเภทคีย์ที่จะสร้าง
ค่าแจกแจง
"RSA"
"ECDSA"
ChallengeKeyOptions
พร็อพเพอร์ตี้
-
ชาเลนจ์
ArrayBuffer
คำถามที่ส่งโดย Verified Access Web API
-
registerKey
RegisterKeyOptions ไม่บังคับ
หากมี ให้ลงทะเบียนคีย์ที่ถูกตรวจสอบด้วยโทเค็นของ
scopeที่ระบุ จากนั้นคุณจะเชื่อมโยงคีย์กับใบรับรองและใช้คีย์ดังกล่าวได้เหมือนกับคีย์ Signing อื่นๆ การเรียกใช้ฟังก์ชันนี้ในครั้งต่อๆ ไปจะสร้างคีย์ Enterprise ใหม่ในscopeที่ระบุ -
ขอบเขต
คีย์ Enterprise ที่จะทดสอบ
RegisterKeyOptions
พร็อพเพอร์ตี้
-
อัลกอริทึม
อัลกอริทึมที่คีย์ที่ลงทะเบียนควรใช้
Scope
เลือกว่าจะใช้ Enterprise User Key หรือ Enterprise Machine Key
ค่าแจกแจง
"USER"
"MACHINE"
Token
พร็อพเพอร์ตี้
-
id
สตริง
ระบุ
Tokenนี้แบบไม่ซ้ำรหัสแบบคงที่คือ
"user"และ"system"ซึ่งหมายถึงโทเค็นฮาร์ดแวร์เฉพาะผู้ใช้ของแพลตฟอร์มและโทเค็นฮาร์ดแวร์ทั้งระบบตามลำดับenterprise.platformKeys.getTokensอาจแสดงผลโทเค็นอื่นๆ (ที่มีตัวระบุอื่นๆ) -
softwareBackedSubtleCrypto
SubtleCrypto
Chrome 97 ขึ้นไป browser.* ตั้งแต่ Chrome 148ใช้อินเทอร์เฟซ SubtleCrypto ของ WebCrypto การดำเนินการเข้ารหัส รวมถึงการสร้างคีย์ จะได้รับการสนับสนุนโดยซอฟต์แวร์ การปกป้องคีย์และการใช้พร็อพเพอร์ตี้ที่แยกไม่ได้จะดำเนินการในซอฟต์แวร์ ดังนั้นคีย์จึงได้รับการปกป้องน้อยกว่าคีย์อิงฮาร์ดแวร์
สร้างได้เฉพาะคีย์ที่แยกไม่ได้เท่านั้น ประเภทคีย์ที่รองรับมีเพียง RSASSA-PKCS1-V1_5 ที่มี
modulusLengthสูงสุด 2048 คีย์แต่ละรายการใช้สำหรับการรับรองข้อมูลได้สูงสุด 1 ครั้ง เว้นแต่ว่าส่วนขยายจะอยู่ในรายการที่อนุญาตผ่านนโยบาย KeyPermissions ซึ่งในกรณีนี้จะใช้คีย์ได้ไม่จำกัดคีย์ที่สร้างใน
Tokenหนึ่งๆ จะใช้กับโทเค็นอื่นไม่ได้ และจะใช้กับwindow.crypto.subtleไม่ได้เช่นกัน ในทำนองเดียวกัน ออบเจ็กต์Keyที่สร้างด้วยwindow.crypto.subtleจะใช้กับอินเทอร์เฟซนี้ไม่ได้ -
subtleCrypto
SubtleCrypto
ใช้อินเทอร์เฟซ SubtleCrypto ของ WebCrypto การดำเนินการเข้ารหัส รวมถึงการสร้างคีย์ จะได้รับการสนับสนุนโดยฮาร์ดแวร์
สร้างได้เฉพาะคีย์ที่แยกไม่ได้เท่านั้น ประเภทคีย์ที่รองรับคือ RSASSA-PKCS1-V1_5 ที่มี
modulusLengthสูงสุด 2048 และ ECDSA ที่มีnamedCurveP-256 คีย์แต่ละรายการจะใช้สำหรับการลงนามข้อมูลได้ไม่เกิน 1 ครั้ง เว้นแต่ว่าส่วนขยายจะอยู่ในรายการที่อนุญาตโดยนโยบาย KeyPermissions ซึ่งในกรณีนี้จะใช้คีย์ได้ไม่จำกัดคีย์ที่สร้างใน
Tokenหนึ่งๆ จะใช้กับโทเค็นอื่นไม่ได้ และจะใช้กับwindow.crypto.subtleไม่ได้เช่นกัน ในทำนองเดียวกัน ออบเจ็กต์Keyที่สร้างด้วยwindow.crypto.subtleจะใช้กับอินเทอร์เฟซนี้ไม่ได้
เมธอด
challengeKey()
browser.enterprise.platformKeys.challengeKey(
options: ChallengeKeyOptions,
): Promise<ArrayBuffer>
คล้ายกับ challengeMachineKey และ challengeUserKey แต่ช่วยให้ระบุอัลกอริทึมของคีย์ที่ลงทะเบียนได้ ตรวจสอบคีย์เครื่องขององค์กรที่อิงฮาร์ดแวร์และส่งการตอบกลับเป็นส่วนหนึ่งของโปรโตคอลการรับรองระยะไกล มีประโยชน์เฉพาะใน ChromeOS และเมื่อใช้ร่วมกับ Verified Access Web API ซึ่งทั้งส่งคำถามและยืนยันคำตอบ
การยืนยันที่สำเร็จโดย Verified Access Web API เป็นสัญญาณที่ชัดเจนว่าอุปกรณ์ปัจจุบันเป็นอุปกรณ์ ChromeOS ที่ถูกต้องตามกฎหมาย อุปกรณ์ปัจจุบันได้รับการจัดการโดยโดเมนที่ระบุในระหว่างการยืนยัน ผู้ใช้ที่ลงชื่อเข้าใช้ในปัจจุบันได้รับการจัดการโดยโดเมนที่ระบุในระหว่างการยืนยัน และสถานะอุปกรณ์ปัจจุบันเป็นไปตามนโยบายด้านอุปกรณ์ขององค์กร เช่น นโยบายอาจระบุว่าอุปกรณ์ต้องไม่อยู่ในโหมดนักพัฒนาซอฟต์แวร์ ข้อมูลประจำตัวของอุปกรณ์ที่ได้จากการยืนยันจะเชื่อมโยงกับฮาร์ดแวร์ของอุปกรณ์ปัจจุบันอย่างแน่นหนา หากระบุขอบเขต "user" ข้อมูลประจำตัวจะเชื่อมโยงกับผู้ใช้ที่ลงชื่อเข้าใช้อยู่ในปัจจุบันอย่างแน่นหนาด้วย
ฟังก์ชันนี้ถูกจำกัดอย่างเข้มงวดและจะดำเนินการไม่สำเร็จหากอุปกรณ์ปัจจุบันไม่มีการจัดการ ผู้ใช้ปัจจุบันไม่มีการจัดการ หรือหากนโยบายด้านอุปกรณ์ขององค์กรไม่ได้เปิดใช้การดำเนินการนี้อย่างชัดแจ้งสำหรับผู้เรียกใช้ คีย์ที่ถูกตรวจสอบไม่ได้อยู่ในโทเค็น "system" หรือ "user" และ API อื่นๆ ไม่สามารถเข้าถึงได้
พารามิเตอร์
-
ตัวเลือก
ออบเจ็กต์ที่มีช่องที่กำหนดไว้ใน
ChallengeKeyOptions
การคืนสินค้า
-
Promise<ArrayBuffer>
Chrome 131 ขึ้นไป browser.* ตั้งแต่ Chrome 148แสดงผล Promise ซึ่งจะได้รับการแก้ไขด้วยการตอบกลับการตรวจสอบสิทธิ์
challengeMachineKey()
browser.enterprise.platformKeys.challengeMachineKey(
challenge: ArrayBuffer,
registerKey?: boolean,
): Promise<ArrayBuffer>
โปรดใช้ challengeKey แทน
ตรวจสอบคีย์เครื่องขององค์กรที่อิงฮาร์ดแวร์และแสดงการตอบกลับเป็นส่วนหนึ่งของโปรโตคอลการรับรองระยะไกล มีประโยชน์เฉพาะใน ChromeOS และเมื่อใช้ร่วมกับ Verified Access Web API ซึ่งทั้งส่งคำถามและยืนยันคำตอบ การยืนยันที่สำเร็จโดย Verified Access Web API เป็นสัญญาณที่ชัดเจนว่า * อุปกรณ์ปัจจุบันเป็นอุปกรณ์ ChromeOS ที่ถูกต้อง * อุปกรณ์ปัจจุบันได้รับการจัดการโดยโดเมนที่ระบุในระหว่างการยืนยัน * ผู้ใช้ที่ลงชื่อเข้าใช้อยู่ในปัจจุบันได้รับการจัดการโดยโดเมนที่ระบุในระหว่างการยืนยัน * สถานะปัจจุบันของอุปกรณ์เป็นไปตามนโยบายด้านอุปกรณ์ขององค์กร เช่น นโยบายอาจระบุว่าอุปกรณ์ต้องไม่อยู่ในโหมดนักพัฒนาซอฟต์แวร์ * ข้อมูลประจำตัวของอุปกรณ์ที่ได้จากการยืนยันจะเชื่อมโยงกับฮาร์ดแวร์ของอุปกรณ์ปัจจุบันอย่างแน่นหนา ฟังก์ชันนี้ถูกจำกัดอย่างเข้มงวดและจะดำเนินการไม่สำเร็จหากอุปกรณ์ปัจจุบันไม่มีการจัดการ ผู้ใช้ปัจจุบันไม่มีการจัดการ หรือหากนโยบายด้านอุปกรณ์ขององค์กรไม่ได้เปิดใช้การดำเนินการนี้อย่างชัดแจ้งสำหรับผู้เรียกใช้ คีย์เครื่องขององค์กรไม่ได้อยู่ในโทเค็น "system" และ API อื่นๆ ไม่สามารถเข้าถึงได้
พารามิเตอร์
-
ชาเลนจ์
ArrayBuffer
คำถามที่ส่งโดย Verified Access Web API
-
registerKey
บูลีน ไม่บังคับ
Chrome 59 ขึ้นไป browser.* ตั้งแต่ Chrome 148หากตั้งค่าไว้ คีย์เครื่องขององค์กรปัจจุบันจะลงทะเบียนด้วยโทเค็น
"system"และสละบทบาทคีย์เครื่องขององค์กร จากนั้นคุณจะเชื่อมโยงคีย์กับใบรับรองและใช้คีย์ดังกล่าวได้เหมือนกับคีย์ Signing อื่นๆ คีย์นี้เป็น RSA 2048 บิต จากนั้นการเรียกใช้ฟังก์ชันนี้ในครั้งต่อๆ ไปจะสร้างคีย์เครื่องขององค์กรใหม่
การคืนสินค้า
-
Promise<ArrayBuffer>
Chrome 131 ขึ้นไป browser.* ตั้งแต่ Chrome 148แสดงผล Promise ซึ่งจะได้รับการแก้ไขด้วยการตอบกลับการตรวจสอบสิทธิ์
challengeUserKey()
browser.enterprise.platformKeys.challengeUserKey(
challenge: ArrayBuffer,
registerKey: boolean,
): Promise<ArrayBuffer>
โปรดใช้ challengeKey แทน
ตรวจสอบคีย์ผู้ใช้ระดับองค์กรที่อิงฮาร์ดแวร์และส่งการตอบกลับเป็นส่วนหนึ่งของโปรโตคอลการรับรองระยะไกล มีประโยชน์เฉพาะใน ChromeOS และเมื่อใช้ร่วมกับ Verified Access Web API ซึ่งทั้งส่งคำถามและยืนยันคำตอบ การยืนยันที่สำเร็จโดย Verified Access Web API เป็นสัญญาณที่ชัดเจนว่า * อุปกรณ์ปัจจุบันเป็นอุปกรณ์ ChromeOS ที่ถูกต้อง * อุปกรณ์ปัจจุบันได้รับการจัดการโดยโดเมนที่ระบุในระหว่างการยืนยัน * ผู้ใช้ที่ลงชื่อเข้าใช้อยู่ในปัจจุบันได้รับการจัดการโดยโดเมนที่ระบุในระหว่างการยืนยัน * สถานะปัจจุบันของอุปกรณ์เป็นไปตามนโยบายผู้ใช้ระดับองค์กร เช่น นโยบายอาจระบุว่าอุปกรณ์ต้องไม่อยู่ในโหมดนักพัฒนาซอฟต์แวร์ * คีย์สาธารณะที่ได้จากการยืนยันจะเชื่อมโยงกับฮาร์ดแวร์ของอุปกรณ์ปัจจุบันและผู้ใช้ที่ลงชื่อเข้าใช้ในปัจจุบันอย่างแน่นหนา ฟังก์ชันนี้ถูกจำกัดอย่างเข้มงวดและจะดำเนินการไม่สำเร็จหากอุปกรณ์ปัจจุบันไม่มีการจัดการ ผู้ใช้ปัจจุบันไม่มีการจัดการ หรือหากนโยบายผู้ใช้ระดับองค์กรไม่ได้เปิดใช้การดำเนินการนี้อย่างชัดแจ้งสำหรับผู้โทร คีย์ผู้ใช้ระดับองค์กรไม่ได้อยู่ในโทเค็น "user" และ API อื่นๆ จะเข้าถึงไม่ได้
พารามิเตอร์
-
ชาเลนจ์
ArrayBuffer
คำถามที่ส่งโดย Verified Access Web API
-
registerKey
บูลีน
หากตั้งค่าไว้ ระบบจะลงทะเบียนคีย์ผู้ใช้ระดับองค์กรปัจจุบันด้วยโทเค็น
"user"และสละบทบาทคีย์ผู้ใช้ระดับองค์กร จากนั้นคุณจะเชื่อมโยงคีย์กับใบรับรองและใช้คีย์ดังกล่าวได้เหมือนกับคีย์ Signing อื่นๆ คีย์นี้เป็น RSA 2048 บิต การเรียกใช้ฟังก์ชันนี้ในครั้งต่อๆ ไปจะสร้างคีย์ผู้ใช้ระดับองค์กรใหม่
การคืนสินค้า
-
Promise<ArrayBuffer>
Chrome 131 ขึ้นไป browser.* ตั้งแต่ Chrome 148แสดงผล Promise ซึ่งจะได้รับการแก้ไขด้วยการตอบกลับการตรวจสอบสิทธิ์
getCertificates()
browser.enterprise.platformKeys.getCertificates(
tokenId: string,
): Promise<ArrayBuffer[]>
แสดงรายการใบรับรองไคลเอ็นต์ทั้งหมดที่ใช้ได้จากโทเค็นที่ระบุ ใช้เพื่อตรวจสอบการมีอยู่และวันหมดอายุของใบรับรองไคลเอ็นต์ที่ใช้ได้สำหรับการตรวจสอบสิทธิ์บางอย่าง
พารามิเตอร์
-
tokenId
สตริง
รหัสของโทเค็นที่แสดงผลโดย
getTokens
การคืนสินค้า
-
Promise<ArrayBuffer[]>
Chrome 131 ขึ้นไป browser.* ตั้งแต่ Chrome 148แสดงผล Promise ซึ่งจะแก้ไขด้วยรายการใบรับรองที่ใช้ได้
getTokens()
browser.enterprise.platformKeys.getTokens(): Promise<Token[]>
แสดงผลโทเค็นที่ใช้ได้ ในเซสชันของผู้ใช้ทั่วไป รายการจะมีโทเค็นของผู้ใช้ที่มี id "user" เสมอ หากมีโทเค็น TPM ทั่วทั้งระบบ รายการที่แสดงผลจะมีโทเค็นทั่วทั้งระบบที่มี id "system" ด้วย โทเค็นทั้งระบบจะเหมือนกันทั้งหมดสำหรับทุกเซสชันในอุปกรณ์นี้ (อุปกรณ์ในความหมาย เช่น Chromebook)
การคืนสินค้า
-
Promise<Token[]>
Chrome 131 ขึ้นไป browser.* ตั้งแต่ Chrome 148เรียกใช้โดย
getTokensพร้อมรายการโทเค็นที่ใช้ได้
importCertificate()
browser.enterprise.platformKeys.importCertificate(
tokenId: string,
certificate: ArrayBuffer,
): Promise<void>
นำเข้า certificate ไปยังโทเค็นที่ระบุหากคีย์ที่ผ่านการรับรองจัดเก็บไว้ในโทเค็นนี้แล้ว หลังจากส่งคำขอการรับรองสำเร็จแล้ว ควรใช้ฟังก์ชันนี้เพื่อจัดเก็บใบรับรองที่ได้รับ และทำให้ใบรับรองพร้อมใช้งานในระบบปฏิบัติการและเบราว์เซอร์สำหรับการตรวจสอบสิทธิ์
พารามิเตอร์
-
tokenId
สตริง
รหัสของโทเค็นที่แสดงผลโดย
getTokens -
ใบรับรอง
ArrayBuffer
การเข้ารหัส DER ของใบรับรอง X.509
การคืนสินค้า
-
Promise<void>
Chrome 131 ขึ้นไป browser.* ตั้งแต่ Chrome 148แสดงผล Promise ซึ่งจะได้รับการแก้ไขเมื่อการดำเนินการนี้เสร็จสิ้น
removeCertificate()
browser.enterprise.platformKeys.removeCertificate(
tokenId: string,
certificate: ArrayBuffer,
): Promise<void>
นำ certificate ออกจากโทเค็นที่ระบุ หากมี ควรใช้เพื่อนำใบรับรองที่ล้าสมัยออก เพื่อไม่ให้ระบบพิจารณาใบรับรองดังกล่าวในระหว่างการตรวจสอบสิทธิ์และไม่ทำให้ตัวเลือกใบรับรองรก ควรใช้เพื่อเพิ่มพื้นที่เก็บข้อมูลในที่เก็บใบรับรอง
พารามิเตอร์
-
tokenId
สตริง
รหัสของโทเค็นที่แสดงผลโดย
getTokens -
ใบรับรอง
ArrayBuffer
การเข้ารหัส DER ของใบรับรอง X.509
การคืนสินค้า
-
Promise<void>
Chrome 131 ขึ้นไป browser.* ตั้งแต่ Chrome 148แสดงผล Promise ซึ่งจะได้รับการแก้ไขเมื่อการดำเนินการนี้เสร็จสิ้น