X.509-certificaten

X.509-certificaten zijn digitale documenten die een gebruiker, computer, dienst of apparaat vertegenwoordigen. Een certificaatautoriteit (CA), een ondergeschikte CA of registratieautoriteit geeft X.509-certificaten uit. De certificaten bevatten de publieke sleutel van het certificaatsubject. Ze bevatten niet de privésleutel van het subject, die veilig moet worden bewaard. RFC 5280 documenteert publieke sleutelcertificaten, inclusief hun velden en extensies. Publieke sleutelcertificaten zijn digitaal ondertekend en bevatten doorgaans de volgende informatie:

  • Informatie over het certificaatonderwerp
  • De publieke sleutel die overeenkomt met de privésleutel van het onderwerp
  • Informatie over de uitgevende CA
  • De ondersteunde encryptie- en/of digitale ondertekeningsalgoritmen
  • Informatie om de intrekking en geldigheidsstatus van het certificaat te bepalen

Certificaatvelden

Er zijn drie incrementele versies van de X.509-certificaatstandaard, en elke volgende versie voegde 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 in Versie 1 zijn opgenomen.
  • Versie 3 (v3), gepubliceerd in 2008, vertegenwoordigt de huidige versie van de X.509-standaard. Deze versie voegt ondersteuning toe voor certificaatuitbreidingen.

Deze sectie is bedoeld als algemene referentie voor de certificaatvelden en certificaatuitbreidingen die beschikbaar zijn in X.509-certificaten. Voor meer informatie over certificaatvelden en certificaatuitbreidingen, inclusief datatypen, constraints en andere details, zie de RFC 5280-specificatie .

Velden voor versie 1

De volgende tabel beschrijft de certificaatvelden van versie 1 voor X.509-certificaten. Alle velden die in deze tabel zijn opgenomen, zijn beschikbaar in latere X.509-certificaatversies.

Naam Beschrijving
Versie Een geheel getal dat het versienummer van het certificaat identificeert.
Serienummer Een geheel getal dat het unieke nummer van elk certificaat van een certificaatautoriteit (CA) weergeeft.
handtekening De identificatie voor het cryptografische algoritme dat door de CA wordt gebruikt om het certificaat te ondertekenen. De waarde omvat zowel de identificatie van het algoritme als eventuele optionele parameters die door dat algoritme worden gebruikt, indien van toepassing.
Uitgever De onderscheidende naam (DN) van de CA die het certificaat uitgeeft.
Geldigheid De inclusieve periode waarin het certificaat geldig is.
Onderwerp De onderscheiden naam (DN) van het certificaatonderwerp.
Onderwerp Openbare Sleutelinformatie De publieke sleutel die eigendom is van het certificaatsubject.

Velden voor versie 2

De volgende tabel beschrijft de velden die zijn toegevoegd voor Versie 2, met informatie over de certificaatuitgever. Deze velden worden echter zelden gebruikt. Alle velden die in deze tabel zijn opgenomen, zijn beschikbaar in latere X.509-certificaatversies.

Naam Beschrijving
Unieke ID van de uitgever Een unieke identificatie die de uitgevende CA vertegenwoordigt, zoals gedefinieerd door de uitgevende CA.
Unieke ID van het onderwerp Een unieke identificatie die het certificaatonderwerp vertegenwoordigt, zoals gedefinieerd door de uitgevende CA.

Velden van versie 3

De volgende tabel beschrijft het veld dat is toegevoegd voor Versie 3, dat een verzameling X.509-certificaatuitbreidingen vertegenwoordigt.

Naam Beschrijving
Extensies Een verzameling standaard- en internetspecifieke certificaatuitbreidingen. Voor meer informatie over de certificaatuitbreidingen die beschikbaar zijn voor X.509 v3-certificaten, zie Certificaatuitbreidingen.

Certificaatuitbreidingen

Certificaatuitbreidingen, geïntroduceerd met Versie 3, bieden methoden om meer attributen aan gebruikers of publieke sleutels te koppelen en om relaties tussen certificaatautoriteiten te beheren. Voor meer informatie over certificaatuitbreidingen, zie de sectie Certificaatverlengingen van de RFC 5280-specificatie .

Standaardextensies

De X.509-standaard definieert de extensies die in deze sectie zijn opgenomen, voor gebruik in de Internet public key infrastructure (PKI).

Naam Beschrijving
Instantiesleutel-id Een identificatie die ofwel het certificaatonderwerp en het serienummer van het CA-certificaat dat dit certificaat heeft uitgegeven, of een hash van de publieke sleutel van de uitgevende CA vertegenwoordigt.
Onderwerpsleutel-id Een hash van de publieke sleutel van het huidige certificaat.
Sleutelgebruik Een bitmapped waarde die de diensten definieert waarvoor een certificaat kan worden gebruikt.
Periode van het gebruik van privésleutels De geldigheidsperiode voor het privésleutelgedeelte van een sleutelpaar.
Certificaatbeleid Een verzameling beleidsinformatie, gebruikt om het certificaatonderwerp te valideren.
Beleidsmappings Een verzameling beleidsmappings, die elk een beleid in de ene organisatie koppelen aan beleid in een andere organisatie.
Alternatieve onderwerpnaam Een verzameling alternatieve namen voor het onderwerp.
Alternatieve naam van de uitgever Een verzameling alternatieve namen voor de uitgevende CA.
Attributen van de Subjectdirectory Een verzameling attributen uit een X.500- of LDAP-directory.
Basisbeperkingen Een verzameling beperkingen die het certificaat toestaan aan te geven of het wordt uitgegeven aan een CA, of aan een gebruiker, computer, apparaat of dienst. Deze uitbreiding bevat ook een padlengtebeperking die het aantal ondergeschikte CA's dat kan bestaan beperkt.
Naambeperkingen Een verzameling beperkingen die aangeven welke namespaces zijn toegestaan in een door de CA uitgegeven certificaat.
Beleidsbeperkingen Een verzameling beperkingen die gebruikt kunnen worden om beleidsmappings tussen CA's te verbieden.
Gebruik van uitgebreide sleutels Een verzameling sleuteldoelwaarden die aangeven hoe de publieke sleutel van een certificaat kan worden gebruikt, buiten de doeleinden die in de Key Usage-extensie zijn geïdentificeerd.
CRL-distributiepunten Een verzameling URL's waarin de basiscertificaat-intrekkingslijst (CRL) wordt gepubliceerd.
Inhibit anyPolicy Belemmert het gebruik van de All Issue-beleidsregels OID (2.5.29.32.0) in ondergeschikte CA-certificaten
Meest vers CRL Deze extensie, ook bekend als het Delta CRL Distributiepunt, bevat één of meer URL's waarop de delta CRL van de uitgevende CA wordt gepubliceerd.

Private internetextensies

De extensies in deze sectie lijken op standaardextensies en kunnen worden gebruikt om applicaties te leiden naar online informatie over het uitgevende CA of certificaatonderwerp.

Naam Beschrijving
Toegang tot Informatie over Autoriteit Een verzameling vermeldingen die het format en de locatie beschrijven van aanvullende informatie die door de uitgevende CA wordt verstrekt.
Toegang tot onderwerpinformatie Een verzameling vermeldingen die het format en de locatie beschrijven van aanvullende informatie die door het certificaatonderwerp wordt verstrekt.

Certificaatindelingen

Certificaten kunnen in verschillende formaten worden opgeslagen. Azure IoT Hub authenticatie gebruikt doorgaans de Privacy-Enhanced Mail (PEM) en Personal Information Exchange (PFX) formaten. De volgende tabel beschrijft veelgebruikte bestanden en formaten die worden gebruikt om certificaten weer te geven.

Format Beschrijving
Binair certificaat Een ruwe vorm binair certificaat met Distinguished Encoding Rules (DER) ASN.1-codering.
ASCII PEM-formaat Een PEM-certificaatbestand (.pem) bevat een door Base64 gecodeerd certificaat dat begint met -----BEGIN CERTIFICATE----- en eindigt met -----END CERTIFICATE-----. Als een van de meest voorkomende formaten voor X.509-certificaten is het PEM-formaat vereist door de IoT Hub bij het uploaden van bepaalde certificaten, zoals apparaatcertificaten.
ASCII PEM-sleutel Bevat een Base64-gecodeerde DER-sleutel, eventueel met meer metadata over het algoritme dat wordt gebruikt voor wachtwoordbeveiliging.
PKCS #7 certificaat Een formaat ontworpen voor het transporteren van ondertekende of versleutelde data. Het kan de volledige certificaatketen omvatten. RFC 2315 definieert dit formaat.
PKCS #8 sleutel Het formaat voor een private key store. RFC 5208 definieert dit formaat.
PKCS #12 sleutel en certificaat Een complex formaat dat een sleutel en de volledige certificaatketen kan opslaan en beschermen. Het wordt vaak gebruikt met een .p12- of .pfx-extensie. PKCS #12 is synoniem met het PFX-formaat. RFC 7292 definieert dit formaat.

Zelfondertekende certificaten

Je kunt een apparaat authenticeren op je IoT-hub voor testdoeleinden door gebruik te maken van twee zelfondertekende certificaten. Dit type authenticatie wordt soms duimafdrukauthenticatie genoemd omdat de certificaten worden geïdentificeerd door berekende hashwaarden die vingerafdrukken of duimafdrukken worden genoemd. Deze berekende hashwaarden worden door IoT Hub gebruikt om je apparaten te authenticeren.

Important

We raden aan om certificaten te gebruiken die zijn ondertekend door een uitgevende Certificaatautoriteit (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 je OpenSSL-commando's in een bash shell kunt uitvoeren om een zelfondertekend certificaat te creëren en een certificaatvingerafdruk op te halen die gebruikt kan worden om je apparaat in IoT Hub te authenticeren.

Note

Als je zelfondertekende certificaten wilt gebruiken voor testen, moet je twee certificaten voor elk apparaat aanmaken.

  1. Voer het volgende commando uit om een privésleutel te genereren en een PEM-gecodeerd privésleutelbestand (.key) aan te maken, waarbij de volgende plaatshouders worden vervangen door hun bijbehorende waarden. De privésleutel die door het volgende commando wordt gegenereerd, gebruikt het RSA-algoritme met 2048-bits encryptie.

    {KeyFile}. De naam van je privésleutelbestand.

    openssl genpkey -out {KeyFile} -algorithm RSA -pkeyopt rsa_keygen_bits:2048
    
  2. Voer het volgende commando uit om een PKCS #10 certificaatondertekeningsverzoek (CSR) te genereren en maak een CSR (.csr) bestand, waarbij de volgende plaatshouders worden vervangen door hun overeenkomstige waarden. Zorg ervoor dat je de apparaat-ID van het IoT-apparaat opgeeft voor je zelfondertekende certificaat wanneer daarom wordt gevraagd.

    {KeyFile}. De naam van je privésleutelbestand.

    {CsrFile}. De naam van je CSR-dossier.

    {DeviceID}. De naam van je 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 het volgende commando uit om je CSR te controleren en te verifiëren, waarbij je de volgende plaatshouders vervangt door hun bijbehorende waarden.

    {CsrFile}. De naam van je certificaatbestand.

    openssl req -text -in {CsrFile} -verify -noout
    
  4. Voer het volgende commando uit om een zelfondertekend certificaat te genereren en maak een PEM-gecodeerd certificaatbestand (.crt), waarbij de volgende plaatshouders worden vervangen door hun bijbehorende waarden. Het commando converteert en ondertekent je CSR met je privésleutel, waardoor een zelfondertekend certificaat wordt gegenereerd dat over 365 dagen verloopt.

    {KeyFile}. De naam van je privésleutelbestand.

    {CsrFile}. De naam van je CSR-dossier.

    {CrtFile}. De naam van je certificaatbestand.

    openssl x509 -req -days 365 -in {CsrFile} -signkey {KeyFile} -out {CrtFile}
    
  5. Voer het volgende commando uit om de vingerafdruk van het certificaat op te halen, waarbij de volgende plaatshouders worden vervangen door hun bijbehorende waarden. De vingerafdruk van een certificaat is een berekende hashwaarde die uniek is voor dat certificaat. Je hebt de vingerafdruk nodig om je IoT-apparaat in IoT Hub te configureren voor testen.

    {CrtFile}. De naam van je certificaatbestand.

    openssl x509 -in {CrtFile} -noout -fingerprint
    

Controleer het certificaat handmatig na het uploaden

Wanneer je je root certificate authority (CA) certificaat of ondergeschikt CA-certificaat uploadt naar je IoT-hub, kun je ervoor kiezen het certificaat automatisch te verifiëren. Als je ervoor koos om je certificaat niet automatisch te verifiëren tijdens het uploaden, wordt je certificaat weergegeven met de status op Niet geverifieerd. U moet de volgende stappen uitvoeren om uw certificaat handmatig te verifiëren.

  1. Selecteer het certificaat om het venster Certificaatdetails te bekijken.

  2. Selecteer Verificatiecode genereren in het dialoog.

    Screenshot toont het venster met certificaatdetails.

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

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

    • Als je het PowerShell-script van Microsoft gebruikt, start New-CACertsVerificationCert "<verification code>" dan om een certificaat te maken dat de eerder gegenereerde verificatiecode heetVerifyCert4.cer, en <verification code> vervang het door de eerder gegenereerde verificatiecode. Zie Test-CA-certificaten beheren voor voorbeelden en zelfstudies in de GitHub-opslagplaats voor de Azure IoT Hub Device SDK voor C voor meer informatie.

    • Als je het Bash-script van Microsoft gebruikt, start ./certGen.sh create_verification_certificate "<verification code>" dan om een certificaat te maken genaamd verification-code.cert.pem en vervang <verification code> het door de eerder gegenereerde verificatiecode. Voor meer informatie, zie Managing test CA certificates voor voorbeelden en tutorials in de GitHub-repository voor de Azure IoT Hub Device SDK voor C.

    • Als je OpenSSL gebruikt om je certificaten te genereren, moet je eerst een privésleutel genereren en daarna een certificaatondertekeningsverzoek (CSR) bestand. In het volgende voorbeeld vervangt <verification code> u 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 aan met het juiste configuratiebestand voor ofwel de root-CA of de ondergeschikte CA, en het CSR-bestand. Het volgende voorbeeld laat zien hoe je OpenSSL gebruikt om het certificaat te creëren uit een root-CA-configuratiebestand en het CSR-bestand.

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

    Voor meer informatie, zie Tutorial - Maak en upload certificaten voor testen.

  5. Selecteer het nieuwe certificaat in de weergave Certificaatdetails .

  6. Nadat het certificaat is geüpload, selecteer je Verifiëren. De status van het certificaat zou moeten veranderen in Geverifieerd.

Voor meer informatie

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