Oefening: clientcertificaten gebruiken voor beveiligde toegang tot een API

Voltooid

U gaat API Management instellen op het accepteren van clientcertificaten op basis van binnenkomende beleidsregels.

Stel dat uw weerbedrijf heeft besloten om de API te beveiligen via certificaatverificatie voor bepaalde clients die al certificaatverificatie gebruiken in andere systemen. Met deze installatie kunnen deze clients bestaande certificaten gebruiken om zichzelf te verifiëren bij de API Management-gateway.

In deze les leert u het volgende:

  • Een zelfondertekend certificaat maken
  • De gateway instellen op het aanvragen van clientcertificaten
  • De vingerafdruk voor het certificaat ophalen
  • Het binnenkomende beleid bewerken zodat alleen clients met het opgegeven certificaat in de aanvraag zijn toegestaan
  • De API Management-gateway aanroepen en het certificaat doorgeven met behulp van curl

Notitie

In deze oefening worden de resources gebruikt die u in de vorige oefening hebt ingesteld.

Zelfondertekend certificaat maken

Gebruik eerst Cloud Shell om een zelfondertekend certificaat te maken, dat u vervolgens gebruikt voor verificatie tussen de client en de API Management-gateway.

  1. Voer de volgende opdrachten uit in Cloud Shell om de persoonlijke sleutel en het certificaat te maken.

    pwd='<Enter a secure password here>'
    pfxFilePath='selfsigncert.pfx'
    openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out selfsigncert.crt -subj /CN=localhost
    

    Om dit voorbeeld eenvoudig te volgen, bevatten de voorgaande opdrachten het wachtwoord dat wordt gebruikt om de persoonlijke sleutel te beveiligen. Wanneer u een persoonlijke sleutel genereert voor uw eigen gebruik, moet u ervoor zorgen dat u een beveiligd wachtwoord genereert en de toegang tot deze sleutel op de juiste manier kunt beheren.

  2. Converteer nu het certificaat naar de PEM-indeling, die het curl hulpprogramma kan gebruiken, door de volgende opdrachten uit te voeren:

    openssl pkcs12 -export -out $pfxFilePath -inkey privateKey.key -in selfsigncert.crt -password pass:$pwd
    openssl pkcs12 -in selfsigncert.pfx -out selfsigncert.pem -nodes
    

    Wanneer u hierom wordt gevraagd, voert u uw beveiligde wachtwoord in en drukt u op Enter.

De gateway instellen op het aanvragen van clientcertificaten

Omdat u de verbruikslaag voor API Management gebruikt, moet u de gateway configureren om clientcertificaten te accepteren. Volg deze stappen.

  1. Selecteer in de Azure-portal die al is geopend uw API Management-service (apim-WeatherDataNNNNN).

  2. Selecteer aangepaste domeinen in het linkermenuvenster onder Implementatie en infrastructuur. Het deelvenster Aangepaste domeinen voor uw API Management-service wordt weergegeven.

  3. Voor *Clientcertificaat aanvragen selecteert u Ja en selecteert u opslaan in de bovenste menubalk.

    Configureer de gateway om certificaten aan te vragen.

De vingerafdruk voor het certificaat ophalen

In deze sectie configureert u API Management om alleen een aanvraag te accepteren als het een certificaat met een bepaalde vingerafdruk (vingerafdruk) heeft. Laten we die vingerafdruk ophalen uit het certificaat.

Notitie

Een vingerafdruk van een SSL-certificaat wordt ook wel ssl-certificaatvingerafdruk genoemd.

  1. Voer in Cloud Shell de volgende code uit.

    Fingerprint="$(openssl x509 -in selfsigncert.pem -noout -fingerprint)"
    Fingerprint="${Fingerprint//:}"
    echo ${Fingerprint#*=}
    
  2. Kopieer de volledige uitvoer (een hexadecimale tekenreeks) en plak deze vingerafdrukwaarde in een tekstbestand.

Het binnenkomende beleid zo bewerken dat alleen aanvragen met een geldig certificaat worden toegestaan

Maak nu het verificatiebeleid in de API Management-gateway.

  1. Selecteer uw API Management-service in Azure Portal. Selecteer indien nodig in het azure-resourcemenu of op de startpagina alle resources en selecteer vervolgens uw API Management-service.

  2. Selecteer API's in het linkermenuvenster onder API's. Het deelvenster API's voor uw API Management-service wordt weergegeven.

  3. Selecteer Weersgegevens in het secundaire menu.

  4. Selecteer in het vak Voor binnenkomende verwerking het </>-pictogram om de code-editor Voor beleidsregels te openen. De HTML-code voor het beleidsknooppunt wordt weergegeven.

    Knop Beleid voor binnenkomende verwerking.

  5. Vervang het <inbound> knooppunt van het beleidsbestand door de volgende XML, waarbij u de vingerafdruk vervangt die u eerder hebt gekopieerd voor de desired-fingerprint tijdelijke aanduiding:

    <inbound>
        <choose>
            <when condition="@(context.Request.Certificate == null || context.Request.Certificate.Thumbprint != "desired-fingerprint")" >
                <return-response>
                    <set-status code="403" reason="Invalid client certificate" />
                </return-response>
            </when>
        </choose>
        <base />
    </inbound>
    
  6. Selecteer Opslaan.

De gateway aanroepen en het clientcertificaat doorgeven

U kunt nu het nieuwe verificatiebeleid testen met en zonder het certificaat.

  1. Als u de API zonder het certificaat wilt testen, voert u de volgende opdracht uit in Cloud Shell, waarbij u de waarden van de tijdelijke aanduiding vervangt door de naam en abonnementssleutel van uw API-gateway.

    curl -X -v GET https://[api-gateway-name].azure-api.net/api/Weather/53/-1 \
      -H 'Ocp-Apim-Subscription-Key: [Subscription Key]' 
    

    Met deze opdracht moet clientcertificaatfout 403 worden geretourneerd, zonder gegevens.

  2. Als u in Cloud Shell de API wilt testen met het certificaat, kopieert en plakt u de volgende cURL-opdracht met behulp van de primaire abonnementssleutel uit de eerste oefening (u kunt deze primaire sleutel ook verkrijgen in het deelvenster Abonnementen voor uw WeatherData API Management-service). Vergeet niet om de naam van uw API-gateway op te nemen.

    curl -X GET https://[api-gateway-name].azure-api.net/api/Weather/53/-1 \
      -H 'Ocp-Apim-Subscription-Key: [subscription-key]' \
      --cert-type pem \
      --cert selfsigncert.pem
    

    Deze opdracht moet resulteren in een geslaagd antwoord met weergegeven weersgegevens die vergelijkbaar zijn met de volgende.

    {"mainOutlook":{"temperature":32,"humidity":34},"wind":{"speed":11,"direction":239.0},"date":"2019-05-16T00:00:00+00:00","latitude":53.0,"longitude":-1.0}