說明
使用 chrome.platformKeys API 存取平台管理的用戶端憑證。如果使用者或政策授予權限,擴充功能就能在自訂驗證通訊協定中使用這類憑證。舉例來說,這可讓第三方 VPN 使用平台管理的憑證 (請參閱 chrome.vpnProvider)。
權限
platformKeys可用性
類型
ClientCertificateRequest
屬性
-
certificateAuthorities
ArrayBuffer[]
伺服器允許的憑證授權單位辨別名稱清單。每個項目都必須是 DER 編碼的 X.509 DistinguishedName。
-
certificateTypes
這個欄位會列出要求的憑證類型,並依伺服器的偏好順序排序。系統只會擷取這份清單中包含的憑證類型。不過,如果
certificateTypes是空白清單,系統會傳回任何類型的憑證。
ClientCertificateType
列舉
"rsaSign"
"ecdsaSign"
Match
屬性
-
憑證
ArrayBuffer
X.509 憑證的 DER 編碼。
-
keyAlgorithm
物件
認證金鑰的 KeyAlgorithm。其中包含憑證金鑰固有的演算法參數 (例如金鑰長度)。其他參數 (例如簽署函式使用的雜湊函式) 則不包含在內。
SelectDetails
屬性
-
clientCerts
ArrayBuffer[] 選填
如果提供,
selectClientCertificates會在這個清單上運作。否則,系統會從平台的憑證存放區取得這項擴充功能可用的所有憑證清單。如果擴充功能沒有權限或不符合要求,系統會移除該項目。 -
互動
布林值
如果設為 true,系統會向使用者顯示篩選後的清單,讓使用者手動選取憑證,並授予擴充功能存取憑證和金鑰的權限。系統只會傳回所選憑證。如果為 false,清單會縮減為擴充功能已獲准存取 (自動或手動) 的所有憑證。
-
系統只會傳回符合這項要求的憑證。
VerificationDetails
屬性
-
主機名稱
字串
要驗證憑證的伺服器主機名稱,例如提供
serverCertificateChain的伺服器。 -
serverCertificateChain
ArrayBuffer[]
每個鏈結項目都必須是 X.509 憑證的 DER 編碼,第一個項目必須是伺服器憑證,且每個項目都必須認證前一個項目。
VerificationResult
屬性
-
debug_errors
string[]
如果信任驗證失敗,這個陣列會包含基礎網路層回報的錯誤。否則,這個陣列會是空白。
注意:這份清單僅供偵錯,可能未列出所有相關錯誤。這項 API 日後修訂時,傳回的錯誤可能會有所變更,且不保證向前或回溯相容。
-
值得信任
布林值
信任驗證結果:如果可以建立指定驗證詳細資料的信任關係,則為 true;如果因任何原因拒絕信任關係,則為 false。
方法
getKeyPair()
browser.platformKeys.getKeyPair(
certificate: ArrayBuffer,
parameters: object,
callback: function,
): void
將 certificate 的金鑰組傳遞給 callback,以便與 platformKeys.subtleCrypto 搭配使用。
參數
-
憑證
ArrayBuffer
selectClientCertificates傳回的Match憑證。 -
parameters
物件
除了金鑰本身固定的參數外,還會決定簽章/雜湊演算法參數。接受的參數與 WebCrypto 的 importKey 函式相同,例如 RSASSA-PKCS1-v1_5 金鑰的
RsaHashedImportParams和 EC 金鑰的EcKeyImportParams。此外,如果是 RSASSA-PKCS1-v1_5 金鑰,雜湊演算法名稱參數可指定為下列其中一個值:「none」、「SHA-1」、「SHA-256」、「SHA-384」或「SHA-512」,例如{"hash": { "name": "none" } }。接著,簽署函式會套用 PKCS#1 v1.5 填補,但不會對指定資料進行雜湊處理。目前,這個方法僅支援「RSASSA-PKCS1-v1_5」和「ECDSA」演算法。
-
callback
函式
callback參數如下:(publicKey: object, privateKey?: object) => void
-
publicKey
物件
-
privateKey
物件 選填
如果這項擴充功能無法存取,則可能為
null。
-
getKeyPairBySpki()
browser.platformKeys.getKeyPairBySpki(
publicKeySpkiDer: ArrayBuffer,
parameters: object,
callback: function,
): void
將 publicKeySpkiDer 識別的金鑰組傳遞給 callback,以便與 platformKeys.subtleCrypto 搭配使用。
參數
-
publicKeySpkiDer
ArrayBuffer
DER 編碼的 X.509 SubjectPublicKeyInfo,例如透過呼叫 WebCrypto 的 exportKey 函式 (format="spki") 取得。
-
parameters
物件
提供簽章和雜湊演算法參數,以及金鑰本身固定的參數。接受的參數與 WebCrypto 的 importKey 函式相同,例如 RSASSA-PKCS1-v1_5 金鑰的
RsaHashedImportParams。如果是 RSASSA-PKCS1-v1_5 金鑰,我們也需要傳遞「雜湊」參數{ "hash": { "name": string } }。「hash」參數代表簽署前,摘要作業要使用的雜湊演算法名稱。您可以將「none」做為雜湊名稱傳遞,在這種情況下,簽署函式會套用 PKCS#1 v1.5 填補,但不會對指定資料進行雜湊處理。目前,這個方法支援「ECDSA」演算法 (搭配具名曲線 P-256) 和「RSASSA-PKCS1-v1_5」演算法 (搭配「none」、「SHA-1」、「SHA-256」、「SHA-384」和「SHA-512」其中一種雜湊演算法)。
-
callback
函式
callback參數如下:(publicKey: object, privateKey?: object) => void
-
publicKey
物件
-
privateKey
物件 選填
如果這項擴充功能無法存取,則可能為
null。
-
selectClientCertificates()
browser.platformKeys.selectClientCertificates(
details: SelectDetails,
): Promise<Match[]>
這個方法會從用戶端憑證清單中篩選出平台已知的憑證,這些憑證必須符合 request,且擴充功能有權存取憑證及其私密金鑰。如果 interactive 為 True,系統會顯示對話方塊,讓使用者從相符的憑證中選取,並授予擴充功能憑證存取權。系統會將所選/篩選出的用戶端憑證傳送至 callback。
參數
-
詳細資料
傳回
-
Promise<Match[]>
Chrome 121 以上版本 Chrome 148 以上版本為 browser.*
subtleCrypto()
browser.platformKeys.subtleCrypto(): object | undefined
WebCrypto 的 SubtleCrypto 實作,可對這個擴充功能可用的用戶端憑證金鑰執行加密編譯作業。
傳回
-
object | undefined
verifyTLSServerCertificate()
browser.platformKeys.verifyTLSServerCertificate(
details: VerificationDetails,
): Promise<VerificationResult>
根據平台的信任設定,檢查 details.serverCertificateChain 是否可信任 details.hostname。注意:信任驗證的實際行為並未完全指定,日後可能會有變動。API 實作會驗證憑證到期日、驗證憑證路徑,並檢查已知 CA 的信任。實作時應遵循 EKU serverAuth,並支援主體別名。
參數
-
詳細資料
傳回
-
Promise<VerificationResult>
Chrome 121 以上版本 Chrome 148 以上版本為 browser.*