X.509-certificaten

X.509-certificaten zijn digitale documenten die een gebruiker, computer, service of apparaat vertegenwoordigen. Een certificeringsinstantie (CA), onderliggende CA of registratie-instantie geeft X.509-certificaten uit. De certificaten bevatten de openbare sleutel van het certificaatonderwerp. Ze bevatten niet de persoonlijke sleutel van het onderwerp, die veilig moet worden opgeslagen. RFC 5280 documenteerde openbare-sleutelcertificaten, met inbegrip van hun velden en extensies. Openbare-sleutelcertificaten zijn digitaal ondertekend en bevatten doorgaans de volgende informatie:

  • Informatie over het certificaatonderwerp
  • De openbare sleutel die overeenkomt met de persoonlijke sleutel van het onderwerp
  • Informatie over de verlenende CA
  • De ondersteunde versleutelings- en/of digitale ondertekeningsalgoritmen
  • Informatie om de intrekkings- en geldigheidsstatus van het certificaat te bepalen

Certificaatvelden

Er zijn drie incrementele versies van de X.509-certificaatstandaard en elke volgende versie voegt certificaatvelden toe aan de standaard:

  • Versie 1 (v1), gepubliceerd in 1988, volgt de oorspronkelijke X.509-standaard voor certificaten.
  • Versie 2 (v2), gepubliceerd in 1993, voegt twee velden toe aan de velden die zijn opgenomen in versie 1.
  • Versie 3 (v3), gepubliceerd in 2008, vertegenwoordigt de huidige versie van de X.509-standaard. Deze versie voegt ondersteuning toe voor certificaatextensies.

Deze sectie is bedoeld als algemene referentie voor de certificaatvelden en certificaatextensies die beschikbaar zijn in X.509-certificaten. Zie de RFC 5280-specificatie voor meer informatie over certificaatvelden en certificaatextensies, waaronder gegevenstypen, beperkingen en andere details.

Versie 1 velden

In de volgende tabel worden certificaatvelden voor versie 1 voor X.509-certificaten beschreven. Alle velden in deze tabel zijn beschikbaar in volgende X.509-certificaatversies.

Naam Beschrijving
Versie Een geheel getal dat het versienummer van het certificaat aangeeft.
Serienummer Een geheel getal dat het unieke getal vertegenwoordigt voor elk certificaat dat is uitgegeven door een certificeringsinstantie (CA).
Handtekening De id voor het cryptografische algoritme dat door de CA wordt gebruikt om het certificaat te ondertekenen. De waarde bevat zowel de id van het algoritme als eventuele optionele parameters die door dat algoritme worden gebruikt, indien van toepassing.
Verlener De DN(DN) van de verlenende CA van het certificaat.
Geldigheid De inclusieve periode waarvoor het certificaat geldig is.
Onderwerp De DN-naam (DN) van het certificaatonderwerp.
Informatie over openbare sleutel van onderwerp De openbare sleutel die eigendom is van het certificaatonderwerp.

Versie 2 velden

In de volgende tabel worden de velden beschreven die zijn toegevoegd voor versie 2, met informatie over de certificaatverlener. Deze velden worden echter zelden gebruikt. Alle velden in deze tabel zijn beschikbaar in volgende X.509-certificaatversies.

Naam Beschrijving
Unieke id van verlener Een unieke id die de verlenende CA vertegenwoordigt, zoals gedefinieerd door de verlenende CA.
Unieke onderwerp-id Een unieke id die het certificaatonderwerp vertegenwoordigt, zoals gedefinieerd door de verlenende CA.

Velden voor versie 3

In de volgende tabel wordt het veld beschreven dat is toegevoegd voor versie 3, dat een verzameling X.509-certificaatextensies vertegenwoordigt.

Naam Beschrijving
Extensies Een verzameling standaard- en internetspecifieke certificaatextensies. Zie Certificaatextensies voor meer informatie over de certificaatextensies die beschikbaar zijn voor X.509 v3-certificaten.

Certificaatextensies

Certificaatextensies, geïntroduceerd met versie 3, bieden methoden voor het koppelen van meer kenmerken aan gebruikers of openbare sleutels en voor het beheren van relaties tussen certificeringsinstanties. Zie de sectie Certificaatextensies van de RFC 5280-specificatie voor meer informatie over certificaatextensies.

Standaardextensies

De X.509-standaard definieert de extensies die in deze sectie zijn opgenomen, voor gebruik in de openbare-sleutelinfrastructuur (PKI).

Naam Beschrijving
Sleutel-id van CA Een id die het certificaatonderwerp en het serienummer van het CA-certificaat aangeeft dat dit certificaat heeft uitgegeven, of een hash van de openbare sleutel van de verlenende CA.
Identifier onderwerpsleutel Een hash van de openbare sleutel van het huidige certificaat.
Sleutelgebruik Een bitmapwaarde die de services definieert waarvoor een certificaat kan worden gebruikt.
Gebruiksperiode van persoonlijke sleutel De geldigheidsperiode voor het persoonlijke sleutelgedeelte van een sleutelpaar.
Certificaatbeleid Een verzameling beleidsinformatie die wordt gebruikt om het certificaatonderwerp te valideren.
Beleidstoewijzingen Een verzameling beleidstoewijzingen, die elk beleid in de ene organisatie toewijzen aan beleid in een andere organisatie.
Alternatieve onderwerpnaam Een verzameling alternatieve namen voor het onderwerp.
Alternatieve naam van verlener Een verzameling alternatieve namen voor de verlenende CA.
Kenmerken van onderwerpmap Een verzameling kenmerken uit een X.500- of LDAP-directory.
Basisbeperkingen Een verzameling beperkingen waarmee het certificaat kan aangeven of het is uitgegeven aan een CA of aan een gebruiker, computer, apparaat of service. Deze extensie bevat ook een padlengtebeperking die het aantal onderliggende CA's beperkt dat kan bestaan.
Naambeperkingen Een verzameling beperkingen die aangeven welke naamruimten zijn toegestaan in een certificaat dat is uitgegeven door een CA.
Beleidsbeperkingen Een verzameling beperkingen die kunnen worden gebruikt om beleidstoewijzingen tussen CA's te verbieden.
Uitgebreide sleutelgebruik Een verzameling waarden voor sleuteldoeleinden die aangeven hoe de openbare sleutel van een certificaat kan worden gebruikt, naast de doeleinden die zijn opgegeven in de extensie Sleutelgebruik .
CRL-distributiepunten Een verzameling URL's waarin de basiscertificaatintrekkingslijst (CRL) wordt gepubliceerd.
AnyPolicy remmen Remt het gebruik van de OID Alle uitgiftebeleid (2.5.29.32.0) in onderliggende CA-certificaten
Meest recente CRL Deze extensie, ook wel bekend als het Delta CRL-distributiepunt, bevat een of meer URL's waarop de delta-CRL van de verlenende CA wordt gepubliceerd.

Privé-internetextensies

De extensies in deze sectie zijn vergelijkbaar met standaardextensies en kunnen worden gebruikt om toepassingen om te leiden naar online informatie over de verlenende CA of het certificaatonderwerp.

Naam Beschrijving
Toegang tot autoriteitsgegevens Een verzameling vermeldingen die de indeling en locatie van aanvullende informatie van de verlenende CA beschrijven.
Toegang tot onderwerpgegevens Een verzameling vermeldingen die de indeling en locatie van aanvullende informatie van het certificaatonderwerp beschrijven.

Certificaatindelingen

Certificaten kunnen in verschillende indelingen worden opgeslagen. Azure IoT Hub verificatie maakt doorgaans gebruik van de indelingen Privacy-Enhanced Mail (PEM) en Personal Information Exchange (PFX). In de volgende tabel worden veelgebruikte bestanden en indelingen beschreven die worden gebruikt om certificaten te vertegenwoordigen.

Indeling Beschrijving
Binair certificaat Een binair certificaat in onbewerkte vorm met behulp van ASN.1-codering (Distinguished Encoding Rules).
ASCII PEM-indeling Een PEM-certificaatbestand (.pem) bevat een Base64-gecodeerd certificaat dat begint met -----BEGIN CERTIFICATE----- en eindigt met -----END CERTIFICATE-----. Een van de meest voorkomende indelingen voor X.509-certificaten, pem-indeling is vereist voor IoT Hub bij het uploaden van bepaalde certificaten, zoals apparaatcertificaten.
ASCII PEM-sleutel Bevat een Met Base64 gecodeerde DER-sleutel, optioneel met meer metagegevens over het algoritme dat wordt gebruikt voor wachtwoordbeveiliging.
PKCS #7-certificaat Een indeling die is ontworpen voor het transport van ondertekende of versleutelde gegevens. Het kan de hele certificaatketen bevatten. RFC 2315 definieert deze indeling.
PKCS #8-sleutel De indeling voor een persoonlijke sleutelarchief. RFC 5208 definieert deze indeling.
PKCS #12-sleutel en -certificaat Een complexe indeling waarmee een sleutel en de hele certificaatketen kunnen worden opgeslagen en beveiligd. Het wordt vaak gebruikt met de extensie .p12 of .pfx. PKCS #12 is synoniem met de PFX-indeling. RFC 7292 definieert deze indeling.

Zelfondertekende certificaten

U kunt een apparaat verifiëren bij uw IoT Hub voor testdoeleinden met behulp van twee zelfondertekende certificaten. Dit type verificatie wordt ook wel vingerafdrukverificatie genoemd, omdat de certificaten worden geïdentificeerd door berekende hashwaarden die vingerafdrukken of vingerafdrukken worden genoemd. Deze berekende hash-waarden worden door IoT Hub gebruikt om uw apparaten te verifiëren.

Belangrijk

U wordt aangeraden certificaten te gebruiken die zijn ondertekend door een verlenende certificeringsinstantie (CA), zelfs voor testdoeleinden. Gebruik nooit zelfondertekende certificaten in productie.

Een zelfondertekend certificaat maken

U kunt OpenSSL gebruiken om zelfondertekende certificaten te maken. De volgende stappen laten zien hoe u OpenSSL-opdrachten uitvoert in een bash-shell om een zelfondertekend certificaat te maken en een certificaatvingerafdruk op te halen die kan worden gebruikt voor het verifiëren van uw apparaat in IoT Hub.

Notitie

Als u zelfondertekende certificaten wilt gebruiken voor het testen, moet u twee certificaten voor elk apparaat maken.

  1. Voer de volgende opdracht uit om een persoonlijke sleutel te genereren en een met PEM gecodeerd bestand met persoonlijke sleutels (.key) te maken, waarbij u de volgende tijdelijke aanduidingen vervangt door de bijbehorende waarden. De persoonlijke sleutel die wordt gegenereerd door de volgende opdracht maakt gebruik van het RSA-algoritme met 2048-bits versleuteling.

    {KeyFile}. De naam van uw persoonlijke sleutelbestand.

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  2. Voer de volgende opdracht uit om een PKCS #10-aanvraag voor certificaatondertekening (CSR) te genereren en een CSR-bestand (.csr) te maken, waarbij u de volgende tijdelijke aanduidingen vervangt door de bijbehorende waarden. Zorg ervoor dat u de apparaat-id van het IoT-apparaat voor uw zelfondertekende certificaat opgeeft wanneer u hierom wordt gevraagd.

    {KeyFile}. De naam van uw persoonlijke sleutelbestand.

    {CsrFile}. De naam van uw CSR-bestand.

    {DeviceID}. De naam van uw IoT-apparaat.

    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. Voer de volgende opdracht uit om uw CSR te controleren en te verifiëren, waarbij u de volgende tijdelijke aanduidingen vervangt door de bijbehorende waarden.

    {CsrFile}. De naam van het certificaatbestand.

    openssl req -text -in {CsrFile} -verify -noout
    
  4. Voer de volgende opdracht uit om een zelfondertekend certificaat te genereren en een PEM-gecodeerd certificaatbestand (.crt) te maken, waarbij u de volgende tijdelijke aanduidingen vervangt door de bijbehorende waarden. Met de opdracht wordt uw CSR geconverteerd en ondertekend met uw persoonlijke sleutel, waardoor een zelfondertekend certificaat wordt gegenereerd dat over 365 dagen verloopt.

    {KeyFile}. De naam van uw persoonlijke sleutelbestand.

    {CsrFile}. De naam van uw CSR-bestand.

    {CrtFile}. De naam van het certificaatbestand.

    openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
    
  5. Voer de volgende opdracht uit om de vingerafdruk van het certificaat op te halen, waarbij u de volgende tijdelijke aanduidingen vervangt door de bijbehorende waarden. De vingerafdruk van een certificaat is een berekende hashwaarde die uniek is voor dat certificaat. U hebt de vingerafdruk nodig om uw IoT-apparaat in IoT Hub te configureren voor testen.

    {CrtFile}. De naam van het certificaatbestand.

    openssl x509 -in {CrtFile} -noout -fingerprint
    

Certificaat handmatig verifiëren na het uploaden

Wanneer u het basiscertificaat (CA) of het onderliggende CA-certificaat uploadt naar uw IoT-hub, kunt u ervoor kiezen om het certificaat automatisch te verifiëren. Als u er niet voor hebt gekozen om uw certificaat automatisch te verifiëren tijdens het uploaden, wordt uw certificaat weergegeven met de status ingesteld op Niet-geverifieerd. U moet de volgende stappen uitvoeren om uw certificaat handmatig te verifiëren.

  1. Selecteer het certificaat om het dialoogvenster Certificaatdetails weer te geven.

  2. Selecteer Verificatiecode genereren in het dialoogvenster.

    Schermopname van het dialoogvenster certificaatdetails.

  3. Kopieer de verificatiecode naar het klembord. U moet deze verificatiecode gebruiken als het certificaatonderwerp in de volgende stappen. Als de verificatiecode bijvoorbeeld is 75B86466DA34D2B04C0C4C9557A119687ADAE7D4732BDDB3, voegt u dat toe als het onderwerp van uw certificaat, zoals wordt weergegeven in de volgende stap.

  4. Er zijn drie manieren om een verificatiecertificaat te genereren:

    • Als u het PowerShell-script gebruikt dat door Microsoft is geleverd, voert u uit New-CACertsVerificationCert "<verification code>" om een certificaat te maken met de naam VerifyCert4.cer, waarbij u vervangt door <verification code> de eerder gegenereerde verificatiecode. Zie Ca-testcertificaten voor voorbeelden en zelfstudies beheren in de GitHub-opslagplaats voor de Azure IoT Hub Device SDK voor C voor meer informatie.

    • Als u het Bash-script van Microsoft gebruikt, voert u uit ./certGen.sh create_verification_certificate "<verification code>" om een certificaat met de naam verification-code.cert.pem te maken, waarbij <verification code> u vervangt door de eerder gegenereerde verificatiecode. Zie Test-CA-certificaten voor voorbeelden en zelfstudies beheren in de GitHub-opslagplaats voor de Azure IoT Hub Device SDK voor C voor meer informatie.

    • Als u OpenSSL gebruikt om uw certificaten te genereren, moet u eerst een persoonlijke sleutel genereren en vervolgens een CSR-bestand (Certificate Signing Request) genereren. Vervang in het volgende voorbeeld door <verification code> de eerder gegenereerde verificatiecode:

    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 []:
    

    Maak vervolgens een certificaat met behulp van het juiste configuratiebestand voor de basis-CA of de onderliggende CA en het CSR-bestand. In het volgende voorbeeld ziet u hoe u OpenSSL gebruikt om het certificaat te maken op basis van een basis-CA-configuratiebestand en het CSR-bestand.

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

    Zie Zelfstudie: certificaten maken en uploaden voor testen voor meer informatie.

  5. Selecteer het nieuwe certificaat in de weergave Certificaatdetails .

  6. Nadat het certificaat is geüpload, selecteert u Verifiëren. De certificaatstatus moet worden gewijzigd in Geverifieerd.

Voor meer informatie

Zie de volgende artikelen voor meer informatie over X.509-certificaten en hoe ze worden gebruikt in IoT Hub: