Certyfikaty X.509

Certyfikaty X.509 to dokumenty cyfrowe reprezentujące użytkownika, komputer, usługę lub urządzenie. Urząd certyfikacji, podrzędny urząd certyfikacji lub urząd rejestracji wystawia certyfikaty X.509. Certyfikaty zawierają klucz publiczny podmiotu certyfikatu. Nie zawierają klucza prywatnego podmiotu, który musi być przechowywany bezpiecznie. Dokument RFC 5280 dokumentuje certyfikaty kluczy publicznych, w tym ich pola i rozszerzenia. Certyfikaty kluczy publicznych są podpisane cyfrowo i zwykle zawierają następujące informacje:

  • Informacje o podmiotie certyfikatu
  • Klucz publiczny odpowiadający kluczowi prywatnemu podmiotu
  • Informacje o wystawiającym urzędzie certyfikacji
  • Obsługiwane algorytmy szyfrowania i/lub podpisywania cyfrowego
  • Informacje określające stan odwołania i ważności certyfikatu

Pola certyfikatu

Istnieją trzy przyrostowe wersje standardu certyfikatu X.509, a każda kolejna wersja dodała pola certyfikatu do standardu:

  • Wersja 1 (wersja 1), opublikowana w 1988 roku, jest zgodna z początkowym standardem X.509 dla certyfikatów.
  • Wersja 2 (wersja 2), opublikowana w 1993 roku, dodaje dwa pola do pól zawartych w wersji 1.
  • Wersja 3 (wersja 3), opublikowana w 2008 r., reprezentuje bieżącą wersję standardu X.509. Ta wersja dodaje obsługę rozszerzeń certyfikatów.

Ta sekcja jest przeznaczona jako ogólna dokumentacja pól certyfikatów i rozszerzeń certyfikatów dostępnych w certyfikatach X.509. Aby uzyskać więcej informacji na temat pól certyfikatów i rozszerzeń certyfikatów, w tym typów danych, ograniczeń i innych szczegółów, zobacz specyfikację RFC 5280 .

Pola wersji 1

W poniższej tabeli opisano pola certyfikatów w wersji 1 dla certyfikatów X.509. Wszystkie pola zawarte w tej tabeli są dostępne w kolejnych wersjach certyfikatów X.509.

Nazwa Opis
Wersja Liczba całkowita, która identyfikuje numer wersji certyfikatu.
Serial Number (Numer seryjny) Liczba całkowita reprezentująca unikatową liczbę dla każdego certyfikatu wystawionego przez urząd certyfikacji.
Podpis Identyfikator algorytmu kryptograficznego używanego przez urząd certyfikacji do podpisania certyfikatu. Wartość zawiera zarówno identyfikator algorytmu, jak i wszelkie opcjonalne parametry używane przez ten algorytm, jeśli ma to zastosowanie.
Wystawca Nazwa wyróżniająca (DN) urzędu wystawiającego certyfikat.
Ważności Okres inkluzywny, dla którego certyfikat jest ważny.
Temat Nazwa wyróżniająca podmiotu certyfikatu ( DN).
Informacje o kluczu publicznym podmiotu Klucz publiczny należący do podmiotu certyfikatu.

Pola w wersji 2

W poniższej tabeli opisano pola dodane dla wersji 2 zawierające informacje o wystawcy certyfikatu. Te pola są jednak rzadko używane. Wszystkie pola zawarte w tej tabeli są dostępne w kolejnych wersjach certyfikatów X.509.

Nazwa Opis
Unikatowy identyfikator wystawcy Unikatowy identyfikator reprezentujący urząd wystawiający certyfikat zgodnie z definicją urzędu wystawiającego certyfikat.
Unikatowy identyfikator podmiotu Unikatowy identyfikator reprezentujący podmiot certyfikatu zdefiniowany przez urząd wystawiający certyfikat.

Pola w wersji 3

W poniższej tabeli opisano pole dodane dla wersji 3 reprezentujące kolekcję rozszerzeń certyfikatów X.509.

Nazwa Opis
Rozszerzenia Kolekcja standardowych i internetowych rozszerzeń certyfikatów. Aby uzyskać więcej informacji na temat rozszerzeń certyfikatów dostępnych dla certyfikatów X.509 v3, zobacz Rozszerzenia certyfikatów.

Rozszerzenia certyfikatów

Rozszerzenia certyfikatów wprowadzone w wersji 3 zapewniają metody kojarzenia większej liczby atrybutów z użytkownikami lub kluczami publicznymi oraz zarządzania relacjami między urzędami certyfikacji. Aby uzyskać więcej informacji na temat rozszerzeń certyfikatów , zobacz sekcję Rozszerzenia certyfikatów specyfikacji RFC 5280 .

Rozszerzenia standardowe

Standard X.509 definiuje rozszerzenia zawarte w tej sekcji do użycia w internetowej infrastrukturze kluczy publicznych (PKI).

Nazwa Opis
Identyfikator klucza urzędu certyfikacji Identyfikator reprezentujący podmiot certyfikatu i numer seryjny certyfikatu urzędu certyfikacji, który wystawił ten certyfikat, lub skrót klucza publicznego urzędu wystawiającego urząd certyfikacji.
Identyfikator klucza podmiotu Skrót klucza publicznego bieżącego certyfikatu.
Użycie klucza Wartość map bitowa definiująca usługi, dla których można użyć certyfikatu.
Okres użycia klucza prywatnego Okres ważności dla części klucza prywatnego pary kluczy.
Zasady certyfikatów Kolekcja informacji o zasadach używanych do weryfikowania podmiotu certyfikatu.
Mapowania zasad Kolekcja mapowań zasad, z których każda mapuje zasady w jednej organizacji na zasady w innej organizacji.
Alternatywna nazwa podmiotu Kolekcja alternatywnych nazw podmiotu.
Alternatywna nazwa wystawcy Kolekcja alternatywnych nazw urzędu wystawiającego certyfikaty.
Atrybuty katalogu podmiotu Kolekcja atrybutów z katalogu X.500 lub LDAP.
Podstawowe warunki ograniczające Kolekcja ograniczeń, które umożliwiają wyznaczenie certyfikatu, czy jest wystawiony dla urzędu certyfikacji, czy dla użytkownika, komputera, urządzenia lub usługi. To rozszerzenie zawiera również ograniczenie długości ścieżki, które ogranicza liczbę podrzędnych urzędów certyfikacji, które mogą istnieć.
Ograniczenia nazw Kolekcja ograniczeń określających, które przestrzenie nazw są dozwolone w certyfikacie wystawionym przez urząd certyfikacji.
Ograniczenia zasad Kolekcja ograniczeń, których można użyć do zakazu mapowania zasad między urzędami certyfikacji.
Rozszerzone użycie klucza Kolekcja wartości celu klucza, które wskazują, jak można użyć klucza publicznego certyfikatu, poza celami określonymi w rozszerzeniu Użycie klucza .
Punkty dystrybucji listy CRL Kolekcja adresów URL, na których opublikowano listę odwołania certyfikatów podstawowych (CRL).
Hamuj dowolną zasadę Hamuje użycie identyfikatora OID wszystkich zasad wystawiania (2.5.29.32.0) w podrzędnych certyfikatach urzędu certyfikacji
Najświeższa lista CRL To rozszerzenie, znane również jako punkt dystrybucji różnicowej listy CRL, zawiera co najmniej jeden adres URL, na którym opublikowano różnicową listę CRL urzędu wystawiającego urząd certyfikacji.

Prywatne rozszerzenia internetowe

Rozszerzenia zawarte w tej sekcji są podobne do standardowych rozszerzeń i mogą służyć do kierowania aplikacji do informacji online na temat wystawiającego urzędu certyfikacji lub podmiotu certyfikatu.

Nazwa Opis
Dostęp do informacji o urzędzie Kolekcja wpisów opisujących format i lokalizację dodatkowych informacji dostarczonych przez urząd wystawiający certyfikaty.
Dostęp do informacji o podmiotach Kolekcja wpisów opisujących format i lokalizację dodatkowych informacji dostarczonych przez podmiot certyfikatu.

Formaty certyfikatów

Certyfikaty można zapisywać w różnych formatach. Uwierzytelnianie Azure IoT Hub zwykle używa formatów poczty Privacy-Enhanced (PEM) i wymiany informacji osobistych (PFX). W poniższej tabeli opisano często używane pliki i formaty używane do reprezentowania certyfikatów.

Format Opis
Certyfikat binarny Nieprzetworzonego certyfikatu binarnego formularza używającego kodowania ASN.1 Distinguished Encoding Rules (DER).
Format PEM ASCII Plik certyfikatu PEM (pem) zawiera certyfikat zakodowany w formacie Base64 rozpoczynający się od -----BEGIN CERTIFICATE----- i kończący się ciągiem -----END CERTIFICATE-----. Jeden z najbardziej typowych formatów certyfikatów X.509, format PEM jest wymagany przez IoT Hub podczas przekazywania niektórych certyfikatów, takich jak certyfikaty urządzeń.
Klucz PEM ASCII Zawiera klucz DER zakodowany w formacie Base64, opcjonalnie z większą ilością metadanych dotyczących algorytmu używanego do ochrony haseł.
Certyfikat PKCS #7 Format przeznaczony do transportu podpisanych lub zaszyfrowanych danych. Może zawierać cały łańcuch certyfikatów. RFC 2315 definiuje ten format.
Klucz PKCS #8 Format magazynu kluczy prywatnych. RFC 5208 definiuje ten format.
Klucz i certyfikat PKCS #12 Złożony format, który może przechowywać i chronić klucz oraz cały łańcuch certyfikatów. Jest on często używany z rozszerzeniem p12 lub pfx. Protokół PKCS #12 jest synonimem formatu PFX. RFC 7292 definiuje ten format.

Certyfikaty z podpisem własnym

Urządzenie można uwierzytelnić w centrum IoT w celu testowania przy użyciu dwóch certyfikatów z podpisem własnym. Ten typ uwierzytelniania jest czasami nazywany uwierzytelnianiem odciskiem palca , ponieważ certyfikaty są identyfikowane przez obliczone wartości skrótu nazywane odciskami palców lub odciskami palców. Te obliczone wartości skrótu są używane przez IoT Hub do uwierzytelniania urządzeń.

Ważne

Zalecamy używanie certyfikatów podpisanych przez urząd wystawiający certyfikaty, nawet do celów testowych. Nigdy nie używaj certyfikatów z podpisem własnym w środowisku produkcyjnym.

Tworzenie certyfikatu z podpisem własnym

Do tworzenia certyfikatów z podpisem własnym można użyć protokołu OpenSSL . Poniższe kroki pokazują, jak uruchamiać polecenia OpenSSL w powłoce bash w celu utworzenia certyfikatu z podpisem własnym i pobrania odcisku palca certyfikatu, który może służyć do uwierzytelniania urządzenia w IoT Hub.

Uwaga

Jeśli chcesz użyć certyfikatów z podpisem własnym do testowania, musisz utworzyć dwa certyfikaty dla każdego urządzenia.

  1. Uruchom następujące polecenie, aby wygenerować klucz prywatny i utworzyć plik klucza prywatnego zakodowanego w formacie PEM (.key), zastępując następujące symbole zastępcze odpowiednimi wartościami. Klucz prywatny wygenerowany przez następujące polecenie używa algorytmu RSA z szyfrowaniem 2048-bitowym.

    {KeyFile}. Nazwa pliku klucza prywatnego.

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  2. Uruchom następujące polecenie, aby wygenerować żądanie podpisania certyfikatu PKCS #10 (CSR) i utworzyć plik CSR (csr), zastępując następujące symbole zastępcze odpowiednimi wartościami. Upewnij się, że po wyświetleniu monitu określono identyfikator urządzenia IoT dla certyfikatu z podpisem własnym.

    {KeyFile}. Nazwa pliku klucza prywatnego.

    {CsrFile}. Nazwa pliku CSR.

    {DeviceID}. Nazwa urządzenia IoT.

    openssl req -new -key {KeyFile} -out {CsrFile}
    
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:{DeviceID}
    Email Address []:.
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:.
    An optional company name []:.
    
  3. Uruchom następujące polecenie, aby sprawdzić i zweryfikować żądanie CSR, zastępując następujące symbole zastępcze odpowiednimi wartościami.

    {CsrFile}. Nazwa pliku certyfikatu.

    openssl req -text -in {CsrFile} -verify -noout
    
  4. Uruchom następujące polecenie, aby wygenerować certyfikat z podpisem własnym i utworzyć plik certyfikatu zakodowanego w standardzie PEM (crt), zastępując następujące symbole zastępcze odpowiednimi wartościami. Polecenie konwertuje i podpisuje żądanie CSR przy użyciu klucza prywatnego, generując certyfikat z podpisem własnym, który wygasa w ciągu 365 dni.

    {KeyFile}. Nazwa pliku klucza prywatnego.

    {CsrFile}. Nazwa pliku CSR.

    {CrtFile}. Nazwa pliku certyfikatu.

    openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
    
  5. Uruchom następujące polecenie, aby pobrać odcisk palca certyfikatu, zastępując następujące symbole zastępcze odpowiednimi wartościami. Odcisk palca certyfikatu jest obliczoną wartością skrótu, która jest unikatowa dla tego certyfikatu. Odcisk palca jest potrzebny do skonfigurowania urządzenia IoT w IoT Hub na potrzeby testowania.

    {CrtFile}. Nazwa pliku certyfikatu.

    openssl x509 -in {CrtFile} -noout -fingerprint
    

Ręczne weryfikowanie certyfikatu po przekazaniu

Po przekazaniu certyfikatu głównego urzędu certyfikacji (CA) lub podrzędnego certyfikatu urzędu certyfikacji do centrum IoT Możesz wybrać automatyczne zweryfikowanie certyfikatu. Jeśli nie zdecydujesz się automatycznie zweryfikować certyfikatu podczas przekazywania, certyfikat zostanie wyświetlony ze stanem Niezweryfikowane. Aby ręcznie zweryfikować certyfikat, należy wykonać następujące czynności.

  1. Wybierz certyfikat, aby wyświetlić okno dialogowe Szczegóły certyfikatu .

  2. Wybierz pozycję Generuj kod weryfikacyjny w oknie dialogowym.

    Zrzut ekranu przedstawiający okno dialogowe szczegółów certyfikatu.

  3. Skopiuj kod weryfikacyjny do schowka. Ten kod weryfikacyjny należy użyć jako podmiotu certyfikatu w kolejnych krokach. Jeśli na przykład kod weryfikacyjny to 75B86466DA34D2B04C0C4C9557A119687ADAE7D4732BDDB3, dodaj go jako podmiot certyfikatu, jak pokazano w następnym kroku.

  4. Istnieją trzy sposoby generowania certyfikatu weryfikacji:

    • Jeśli używasz skryptu programu PowerShell dostarczonego przez firmę Microsoft, uruchom polecenie New-CACertsVerificationCert "<verification code>" , aby utworzyć certyfikat o nazwie VerifyCert4.cer, zastępując <verification code> element wcześniej wygenerowanym kodem weryfikacyjnym. Aby uzyskać więcej informacji, zobacz Managing test CA certificates for samples and tutorials in the GitHub repository for the Azure IoT Hub Device SDK for C (Zarządzanie certyfikatami testowego urzędu certyfikacji dla przykładów i samouczków w repozytorium GitHub dla zestawu SDK urządzenia Azure IoT Hub dla języka C).

    • Jeśli używasz skryptu powłoki Bash dostarczonego przez firmę Microsoft, uruchom polecenie ./certGen.sh create_verification_certificate "<verification code>" , aby utworzyć certyfikat o nazwie verification-code.cert.pem, zastępując <verification code> element wcześniej wygenerowanym kodem weryfikacyjnym. Aby uzyskać więcej informacji, zobacz Managing test CA certificates for samples and tutorials in the GitHub repository for the Azure IoT Hub Device SDK for C (Zarządzanie certyfikatami testowego urzędu certyfikacji dla przykładów i samouczków w repozytorium GitHub dla zestawu SDK urządzenia Azure IoT Hub dla języka C).

    • Jeśli używasz programu OpenSSL do generowania certyfikatów, musisz najpierw wygenerować klucz prywatny, a następnie wygenerować plik żądania podpisania certyfikatu (CSR). W poniższym przykładzie zastąp <verification code> element kodem weryfikacyjnym wygenerowany wcześniej:

    openssl genpkey -out pop.key -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
    openssl req -new -key pop.key -out pop.csr
    
    -----
    Country Name (2 letter code) [XX]:.
    State or Province Name (full name) []:.
    Locality Name (eg, city) [Default City]:.
    Organization Name (eg, company) [Default Company Ltd]:.
    Organizational Unit Name (eg, section) []:.
    Common Name (eg, your name or your server hostname) []:<verification code>
    Email Address []:
    
    Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:
    An optional company name []:
    

    Następnie utwórz certyfikat przy użyciu odpowiedniego pliku konfiguracji głównego urzędu certyfikacji lub podrzędnego urzędu certyfikacji oraz pliku CSR. W poniższym przykładzie pokazano, jak za pomocą protokołu OpenSSL utworzyć certyfikat z pliku konfiguracji głównego urzędu certyfikacji i pliku CSR.

    openssl ca -config rootca.conf -in pop.csr -out pop.crt -extensions client_ext
    

    Aby uzyskać więcej informacji, zobacz Samouczek — tworzenie i przekazywanie certyfikatów na potrzeby testowania.

  5. Wybierz nowy certyfikat w widoku Szczegóły certyfikatu .

  6. Po przekazaniu certyfikatu wybierz pozycję Weryfikuj. Stan certyfikatu powinien ulec zmianie na Zweryfikowano.

Więcej informacji

Aby uzyskać więcej informacji na temat certyfikatów X.509 i sposobu ich użycia w IoT Hub, zobacz następujące artykuły: