Opis
Użyj tego interfejsu API, aby udostępnić platformie certyfikaty, które mogą być używane do uwierzytelniania TLS.
Uprawnienia
certificateProviderDostępność
Pojęcia i zastosowanie
Typowe użycie tego interfejsu API do udostępniania certyfikatów klienta w ChromeOS obejmuje te czynności:
- Rozszerzenie rejestruje się w przypadku zdarzeń onCertificatesUpdateRequestedionSignatureRequested.
- Po zainicjowaniu rozszerzenie wywołuje funkcję setCertificates(), aby podać początkową listę certyfikatów.
- Rozszerzenie monitoruje zmiany na liście dostępnych certyfikatów i wywołuje funkcję setCertificates(), aby powiadomić przeglądarkę o każdej takiej zmianie.
- Podczas uzgadniania połączenia TLS przeglądarka otrzymuje żądanie certyfikatu klienta. W przypadku zdarzenia onCertificatesUpdateRequestedprzeglądarka prosi rozszerzenie o zgłoszenie wszystkich certyfikatów, które obecnie udostępnia.
- Rozszerzenie przesyła informacje o obecnie dostępnych certyfikatach za pomocą metody setCertificates().
- Przeglądarka dopasowuje wszystkie dostępne certyfikaty do żądania certyfikatu klienta z hosta zdalnego. Dopasowania są wyświetlane użytkownikowi w oknie wyboru.
- Użytkownik może wybrać certyfikat i w ten sposób zatwierdzić uwierzytelnianie lub je przerwać.
 
  - Jeśli użytkownik przerwie uwierzytelnianie lub żaden certyfikat nie pasuje do żądania, uwierzytelnianie klienta TLS zostanie przerwane.
- W przeciwnym razie, jeśli użytkownik zatwierdzi uwierzytelnianie za pomocą certyfikatu dostarczonego przez to rozszerzenie, przeglądarka poprosi rozszerzenie o podpisanie danych w celu kontynuowania uzgadniania połączenia TLS. Prośba jest wysyłana jako zdarzenie onSignatureRequested.
- To zdarzenie zawiera dane wejściowe, deklaruje, który algorytm ma być użyty do wygenerowania podpisu, i odwołuje się do jednego z certyfikatów zgłoszonych przez to rozszerzenie. Rozszerzenie musi utworzyć podpis dla podanych danych za pomocą klucza prywatnego powiązanego z odwołującym się do niego certyfikatem. Utworzenie podpisu może wymagać dodania przedrostka DigestInfo i wypełnienia wyniku przed podpisaniem.
- Rozszerzenie odsyła podpis do przeglądarki za pomocą metody reportSignature(). Jeśli nie można obliczyć podpisu, metodę należy wywołać bez podpisu.
- Jeśli podpis został podany, przeglądarka kończy uzgadnianie połączenia TLS.
Rzeczywista kolejność czynności może być inna. Na przykład użytkownik nie zobaczy prośby o wybranie certyfikatu, jeśli używana jest zasada przedsiębiorstwa dotycząca automatycznego wybierania certyfikatu (patrz AutoSelectCertificateForUrls i zasady Chrome dotyczące użytkowników).
W rozszerzeniu może to wyglądać podobnie do tego fragmentu kodu:
function collectAvailableCertificates() {
  // Return all certificates that this Extension can currently provide.
  // For example:
  return [{
    certificateChain: [new Uint8Array(...)],
    supportedAlgorithms: ['RSASSA_PKCS1_v1_5_SHA256']
  }];
}
// The Extension calls this function every time the currently available list of
// certificates changes, and also once after the Extension's initialization.
function onAvailableCertificatesChanged() {
  chrome.certificateProvider.setCertificates({
    clientCertificates: collectAvailableCertificates()
  });
}
function handleCertificatesUpdateRequest(request) {
  // Report the currently available certificates as a response to the request
  // event. This is important for supporting the case when the Extension is
  // unable to detect the changes proactively.
  chrome.certificateProvider.setCertificates({
    certificatesRequestId: request.certificatesRequestId,
    clientCertificates: collectAvailableCertificates()
  });
}
// Returns a private key handle for the given DER-encoded certificate.
// |certificate| is an ArrayBuffer.
function getPrivateKeyHandle(certificate) {...}
// Digests and signs |input| with the given private key. |input| is an
// ArrayBuffer. |algorithm| is an Algorithm.
// Returns the signature as ArrayBuffer.
function signUnhashedData(privateKey, input, algorithm) {...}
function handleSignatureRequest(request) {
  // Look up the handle to the private key of |request.certificate|.
  const key = getPrivateKeyHandle(request.certificate);
  if (!key) {
    // Handle if the key isn't available.
    console.error('Key for requested certificate no available.');
    // Abort the request by reporting the error to the API.
    chrome.certificateProvider.reportSignature({
      signRequestId: request.signRequestId,
      error: 'GENERAL_ERROR'
    });
    return;
  }
  const signature = signUnhashedData(key, request.input, request.algorithm);
  chrome.certificateProvider.reportSignature({
    signRequestId: request.signRequestId,
    signature: signature
  });
}
chrome.certificateProvider.onCertificatesUpdateRequested.addListener(
    handleCertificatesUpdateRequest);
chrome.certificateProvider.onSignatureRequested.addListener(
    handleSignatureRequest);
Typy
Algorithm
Typy obsługiwanych algorytmów podpisu kryptograficznego.
Typ wyliczeniowy
"RSASSA_PKCS1_v1_5_MD5_SHA1" 
 Określa algorytm podpisu RSASSA PKCS#1 w wersji 1.5 z funkcją mieszającą MD5-SHA-1. Rozszerzenie nie może dodawać prefiksu DigestInfo, a jedynie dopełnienie PKCS#1. Ten algorytm jest wycofany i od wersji 109 nie będzie już nigdy używany przez Chrome.
"RSASSA_PKCS1_v1_5_SHA1" 
 Określa algorytm podpisu RSASSA PKCS#1 v1.5 z funkcją haszowania SHA-1.
"RSASSA_PKCS1_v1_5_SHA256" 
 Określa algorytm podpisu RSASSA PKCS#1 v1.5 z funkcją skrótu SHA-256.
"RSASSA_PKCS1_v1_5_SHA384" 
 Określa algorytm podpisu RSASSA PKCS#1 v1.5 z funkcją haszowania SHA-384.
"RSASSA_PKCS1_v1_5_SHA512" 
 Określa algorytm podpisu RSASSA PKCS#1 v1.5 z funkcją haszowania SHA-512.
„RSASSA_PSS_SHA256” 
 Określa algorytm podpisu RSASSA PSS z funkcją skrótu SHA-256, funkcją generowania maski MGF1 i solą o rozmiarze takim samym jak skrót.
„RSASSA_PSS_SHA384” 
 Określa algorytm podpisu RSASSA PSS z funkcją skrótu SHA-384, funkcją generowania maski MGF1 i solą o rozmiarze takim samym jak skrót.
„RSASSA_PSS_SHA512” 
 Określa algorytm podpisu RSASSA PSS z funkcją haszowania SHA-512, funkcją generowania maski MGF1 i ciągiem zaburzającym o tym samym rozmiarze co skrót.
CertificateInfo
Właściwości
- 
    certyfikatArrayBuffer Musi to być kodowanie DER certyfikatu X.509. Obecnie obsługiwane są tylko certyfikaty kluczy RSA. 
- 
    supportedHashesHash[] Musi być ustawiona na wszystkie skróty obsługiwane w przypadku tego certyfikatu. To rozszerzenie będzie wymagać podpisów skrótów obliczonych za pomocą jednego z tych algorytmów haszujących. Powinny być one podane w kolejności malejącej preferencji haszowania. 
CertificatesUpdateRequest
Właściwości
- 
    certificatesRequestIdliczba Identyfikator żądania do przekazania do setCertificates.
ClientCertificateInfo
Właściwości
- 
    certificateChainArrayBuffer[] Pierwszym elementem tablicy musi być kodowanie DER certyfikatu klienta X.509. Musi on zawierać dokładnie 1 certyfikat. 
- 
    supportedAlgorithmsWszystkie algorytmy obsługiwane w przypadku tego certyfikatu. Rozszerzenie będzie proszone o podpisywanie tylko za pomocą jednego z tych algorytmów. 
Error
Rodzaje błędów, które rozszerzenie może zgłaszać.
Wartość
„GENERAL_ERROR” 
 
Hash
Rola wycofana. Zastąpione przez Algorithm.
Typ wyliczeniowy
„MD5_SHA1” 
 Określa algorytmy haszowania MD5 i SHA1.
„SHA1” 
 Określa algorytm haszowania SHA1.
„SHA256” 
 Określa algorytm haszowania SHA256.
„SHA384” 
 Określa algorytm haszowania SHA384.
„SHA512” 
 Określa algorytm haszowania SHA512.
PinRequestErrorType
Rodzaje błędów, które mogą być wyświetlane użytkownikowi za pomocą funkcji requestPin.
Typ wyliczeniowy
„INVALID_PIN” 
 Określa, że kod PIN jest nieprawidłowy.
„INVALID_PUK” 
 Oznacza, że kod PUK jest nieprawidłowy.
„MAX_ATTEMPTS_EXCEEDED” 
 Określa, że przekroczono maksymalną liczbę prób.
„UNKNOWN_ERROR” 
 Oznacza, że błędu nie można przedstawić za pomocą powyższych typów.
PinRequestType
Typ kodu, o który rozszerzenie prosi za pomocą funkcji requestPin.
Typ wyliczeniowy
„PIN” 
 Określa, że żądany kod to PIN.
„PUK” 
 Określa, że żądany kod to PUK.
PinResponseDetails
Właściwości
- 
    userInputstring opcjonalny Kod podany przez użytkownika. Puste, jeśli użytkownik zamknął okno lub wystąpił inny błąd. 
ReportSignatureDetails
Właściwości
- 
    błąd"GENERAL_ERROR" 
 opcjonalnieBłąd, który wystąpił podczas generowania podpisu (jeśli wystąpił). 
- 
    signRequestIdliczba Identyfikator żądania, który został otrzymany za pomocą zdarzenia onSignatureRequested.
- 
    podpisArrayBuffer opcjonalny Podpis, jeśli został wygenerowany. 
RequestPinDetails
Właściwości
- 
    attemptsLeftnumber opcjonalny Liczba pozostałych prób. Jest to udostępniane, aby każdy interfejs mógł przedstawić te informacje użytkownikowi. Chrome nie powinien tego wymuszać. Zamiast tego rozszerzenie powinno wywołać stopPinRequest z wartością errorType = MAX_ATTEMPTS_EXCEEDED, gdy liczba żądań kodu PIN zostanie przekroczona. 
- 
    errorTypePinRequestErrorType opcjonalny Szablon błędu wyświetlany użytkownikowi. Należy ustawić tę wartość, jeśli poprzednia prośba nie powiodła się, aby powiadomić użytkownika o przyczynie niepowodzenia. 
- 
    requestTypePinRequestType opcjonalny Typ kodu, o który prosisz. Domyślnie jest to PIN. 
- 
    signRequestIdliczba Identyfikator nadany przez Chrome w SignRequest. 
SetCertificatesDetails
Właściwości
- 
    certificatesRequestIdnumber opcjonalny W przypadku wywołania w odpowiedzi na onCertificatesUpdateRequestedpowinien zawierać otrzymaną wartośćcertificatesRequestId. W przeciwnym razie powinna być nieustawiona.
- 
    clientCertificatesLista obecnie dostępnych certyfikatów klienta. 
- 
    błąd"GENERAL_ERROR" 
 opcjonalnieBłąd, który wystąpił podczas wyodrębniania certyfikatów (jeśli wystąpił). Ten błąd będzie wyświetlany użytkownikowi w odpowiednich sytuacjach. 
SignatureRequest
Właściwości
- 
    algorytmAlgorytm podpisu, który ma być używany. 
- 
    certyfikatArrayBuffer Kodowanie DER certyfikatu X.509. Rozszerzenie musi podpisać inputza pomocą powiązanego klucza prywatnego.
- 
    dane wejścioweArrayBuffer Dane do podpisania. Pamiętaj, że dane nie są zaszyfrowane. 
- 
    signRequestIdliczba Identyfikator żądania do przekazania do reportSignature.
SignRequest
Właściwości
- 
    certyfikatArrayBuffer Kodowanie DER certyfikatu X.509. Rozszerzenie musi podpisać digestza pomocą powiązanego klucza prywatnego.
- 
    skrótArrayBuffer Skrót, który musi zostać podpisany. 
- 
    hashOdwołuje się do algorytmu haszującego, który został użyty do utworzenia digest.
- 
    signRequestIdliczba Chrome w wersji 57 lub nowszejUnikalny identyfikator, którego rozszerzenie może użyć, jeśli będzie musiało wywołać metodę, która go wymaga, np. requestPin. 
StopPinRequestDetails
Właściwości
- 
    errorTypePinRequestErrorType opcjonalny Szablon błędu. Jeśli jest obecny, jest wyświetlany użytkownikowi. Zawiera przyczynę zatrzymania przepływu, jeśli została spowodowana przez błąd, np. MAX_ATTEMPTS_EXCEEDED. 
- 
    signRequestIdliczba Identyfikator nadany przez Chrome w SignRequest. 
Metody
reportSignature()
chrome.certificateProvider.reportSignature(
details: ReportSignatureDetails,
): Promise<void>
Powinna być wywoływana w odpowiedzi na onSignatureRequested.
Rozszerzenie musi ostatecznie wywołać tę funkcję dla każdego zdarzenia onSignatureRequested. Po pewnym czasie implementacja interfejsu API przestanie czekać na to wywołanie i gdy ta funkcja zostanie wywołana, odpowie błędem przekroczenia limitu czasu.
Parametry
- 
    szczegóły
Zwroty
- 
            Promise<void> Chrome w wersji 96 lub nowszej
requestPin()
chrome.certificateProvider.requestPin(
details: RequestPinDetails,
): Promise<PinResponseDetails | undefined>
Prosi użytkownika o podanie kodu PIN. Dozwolona jest tylko 1 trwająca prośba naraz. Żądania wysyłane podczas trwania innego procesu są odrzucane. Jeśli trwa inny proces, rozszerzenie musi spróbować ponownie później.
Parametry
- 
    szczegółyZawiera szczegóły dotyczące żądanego okna. 
Zwroty
- 
            Promise<PinResponseDetails | undefined> Chrome w wersji 96 lub nowszej
setCertificates()
chrome.certificateProvider.setCertificates(
details: SetCertificatesDetails,
): Promise<void>
Ustawia listę certyfikatów do użycia w przeglądarce.
Rozszerzenie powinno wywoływać tę funkcję po inicjalizacji i przy każdej zmianie w zestawie obecnie dostępnych certyfikatów. Rozszerzenie powinno też wywoływać tę funkcję w odpowiedzi na onCertificatesUpdateRequested za każdym razem, gdy to zdarzenie zostanie odebrane.
Parametry
- 
    szczegółyCertyfikaty do ustawienia. Nieprawidłowe certyfikaty będą ignorowane. 
Zwroty
- 
            Promise<void> Chrome w wersji 96 lub nowszej
stopPinRequest()
chrome.certificateProvider.stopPinRequest(
details: StopPinRequestDetails,
): Promise<void>
Zatrzymuje żądanie kodu PIN rozpoczęte przez funkcję requestPin.
Parametry
- 
    szczegółyZawiera szczegóły dotyczące przyczyny przerwania przepływu żądań. 
Zwroty
- 
            Promise<void> Chrome w wersji 96 lub nowszej
Wydarzenia
onCertificatesUpdateRequested
chrome.certificateProvider.onCertificatesUpdateRequested.addListener(
callback: function,
)
To zdarzenie jest wywoływane, jeśli certyfikaty ustawione za pomocą funkcji setCertificates są niewystarczające lub przeglądarka żąda zaktualizowanych informacji. Rozszerzenie musi wywołać funkcję setCertificates ze zaktualizowaną listą certyfikatów i otrzymanym parametrem certificatesRequestId.
Parametry
- 
    callbackfunkcja Parametr callbackwygląda tak:(request: CertificatesUpdateRequest) => void - 
    żądanie
 
- 
    
onSignatureRequested
chrome.certificateProvider.onSignatureRequested.addListener(
callback: function,
)
To zdarzenie jest wywoływane za każdym razem, gdy przeglądarka musi podpisać wiadomość za pomocą certyfikatu dostarczonego przez to rozszerzenie za pomocą interfejsu setCertificates.
Rozszerzenie musi podpisać dane wejściowe z request za pomocą odpowiedniego algorytmu i klucza prywatnego oraz zwrócić je, wywołując funkcję reportSignature z otrzymanym parametrem signRequestId.
Parametry
- 
    callbackfunkcja Parametr callbackwygląda tak:(request: SignatureRequest) => void - 
    żądanie
 
-