Cvičení – použití klientských certifikátů k zabezpečení přístupu k rozhraní API

Dokončeno

Nakonfigurujte službu API Management, aby přijímala klientské certifikáty, pomocí příchozích zásad.

Předpokládejme, že se vaše meteorologická společnost rozhodla zabezpečit své rozhraní API prostřednictvím ověřování certifikátů pro určité klienty, kteří už používají ověřování certifikátů v jiných systémech. Toto nastavení umožní těmto klientům používat existující certifikáty k ověření vůči bráně služby API Management.

V této lekci:

  • Vytvoření certifikátu podepsaného jeho držitelem (self-signed certificate)
  • Konfigurace brány na vyžadování klientských certifikátů
  • Získání kryptografického otisku pro certifikát
  • Úprava příchozích zásad, aby povolovaly pouze klienty se zadaným certifikátem v požadavku
  • Volání brány služby API Management a předání certifikátu pomocí curl

Poznámka:

V tomto cvičení se používají prostředky, které jste nastavili v předchozím cvičení.

Vytvoření certifikátu podepsaného svým držitelem

Nejprve pomocí Cloud Shellu vytvořte certifikát podepsaný svým držitelem, který pak použijete k ověřování mezi klientem a bránou služby API Management.

  1. Pokud chcete vytvořit privátní klíč a certifikát, spusťte v Cloud Shellu následující příkazy.

    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
    

    Aby byl tento příklad snadno použitelný, obsahují předchozí příkazy heslo použité k zabezpečení privátního klíče. Při každém vygenerování privátního klíče pro vlastní použití se ujistěte, že vygenerujete zabezpečené heslo a odpovídajícím způsobem k němu řídíte přístup.

  2. Nyní převeďte certifikát do formátu PEM, který curl nástroj může použít, spuštěním těchto příkazů:

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

    Po zobrazení výzvy zadejte svoje zabezpečené heslo a stiskněte Enter.

Konfigurace brány na vyžadování klientských certifikátů

Vzhledem k tomu, že používáte úroveň Consumption pro SLUŽBU API Management, musíte bránu nakonfigurovat tak, aby přijímala klientské certifikáty. Postupujte podle těchto kroků.

  1. Na webu Azure Portal, který je již otevřený, vyberte službu API Management (apim-WeatherDataNNNN).

  2. V levém podokně nabídek v části Nasazení a infrastruktura vyberte Vlastní domény. Zobrazí se podokno Vlastní domény pro vaši službu API Management.

  3. V části *Požadovat klientský certifikát, vyberte Ano a v horním řádku nabídek vyberte Uložit.

    Nakonfigurujte bránu tak, aby požadovala certifikáty.

Získání kryptografického otisku pro certifikát

V této části nakonfigurujete službu API Management tak, aby přijímala požadavek jenom v případě, že má certifikát s určitým kryptografickým otiskem (otisk prstu). Pojďme tento kryptografický otisk získat z certifikátu.

Poznámka:

Kryptografický otisk certifikátu SSL se také označuje jako otisk certifikátu SSL.

  1. V Cloud Shellu spusťte následující kód.

    Fingerprint="$(openssl x509 -in selfsigncert.pem -noout -fingerprint)"
    Fingerprint="${Fingerprint//:}"
    echo ${Fingerprint#*=}
    
  2. Zkopírujte úplný výstup (šestnáctkový řetězec) a vložte tuto hodnotu otisku prstu do textového souboru.

Úprava příchozích zásad, aby povolovaly pouze požadavky s platným certifikátem

Teď vytvořte zásadu ověřování v bráně služby API Management.

  1. Na webu Azure Portal vyberte svou službu API Management. V případě potřeby v nabídce prostředků Azure nebo na domovské stránce vyberte Všechny prostředky a pak vyberte službu API Management.

  2. V levém podokně nabídek v části Rozhraní API vyberte rozhraní API. Zobrazí se podokno rozhraní API pro vaši službu API Management.

  3. V sekundární nabídce vyberte Data počasí.

  4. V poli Příchozí zpracování vyberte< ikonu /> a otevřete editor kódu Zásad. Zobrazí se kód HTML pro uzel zásad.

    Tlačítko zásady příchozího zpracování

  5. <inbound> Nahraďte uzel souboru zásad následujícím kódem XML a nahraďte otisk prstu, který jste zkopírovali dříve pro desired-fingerprint zástupný symbol:

    <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. Zvolte Uložit.

Volání brány a předání klientského certifikátu

Teď můžete otestovat nové zásady ověřování s certifikátem i bez certifikátu.

  1. Pokud chcete otestovat rozhraní API bez certifikátu, spusťte v Cloud Shellu následující příkaz a nahraďte zástupné hodnoty názvem brány rozhraní API a klíčem předplatného.

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

    Tento příkaz by měl vrátit chybu klientského certifikátu 403 a neměl by vrátit žádná data.

  2. Pokud chcete v Cloud Shellu otestovat rozhraní API pomocí certifikátu, zkopírujte a vložte následující příkaz cURL pomocí primárního klíče předplatného z prvního cvičení (tento primární klíč můžete získat také z podokna Předplatná pro službu WeatherData API Management). Nezapomeňte zahrnout název brány rozhraní API.

    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
    

    Výsledkem tohoto příkazu by měla být úspěšná odpověď zobrazující data o počasí podobná následujícímu.

    {"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}