Práce s protokolem SSL ve webovém rozhraní API

Několik běžných schémat ověřování není zabezpečené oproti prostému protokolu HTTP. Zejména základní ověřování a ověřování pomocí formulářů odesílají nešifrované přihlašovací údaje. Aby byla tato schémata ověřování zabezpečená, musí používat PROTOKOL SSL. Kromě toho je možné k ověřování klientů použít klientské certifikáty SSL.

Povolení protokolu SSL na serveru

Nastavení SSL ve službě IIS 7 nebo novější:

  • Vytvořte nebo získejte certifikát. Pro účely testování můžete vytvořit certifikát podepsaný svým držitelem.
  • Přidejte vazbu HTTPS.

Podrobnosti najdete v tématu Nastavení SSL ve službě IIS 7.

Pro místní testování můžete povolit SSL v IIS Express ze sady Visual Studio. V okno Vlastnosti nastavte povoleno SSL na Hodnotu True. Všimněte si hodnoty ADRESY URL PROTOKOLU SSL; tuto adresu URL použijte k testování připojení HTTPS.

Obrázek S S L s povolenou true ve vlastnostech

Vynucování SSL v kontroleru webového rozhraní API

Pokud máte vazbu HTTPS i HTTP, můžou klienti pro přístup k lokalitě používat protokol HTTP. Některé prostředky můžete povolit, aby byly dostupné prostřednictvím protokolu HTTP, zatímco jiné vyžadují PROTOKOL SSL. V takovém případě použijte filtr akcí k vyžadování protokolu SSL pro chráněné prostředky. Následující kód ukazuje filtr ověřování webového rozhraní API, který kontroluje SSL:

public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
        {
            actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
            {
                ReasonPhrase = "HTTPS Required"
            };
        }
        else
        {
            base.OnAuthorization(actionContext);
        }
    }
}

Přidejte tento filtr do všech akcí webového rozhraní API, které vyžadují SSL:

public class ValuesController : ApiController
{
    [RequireHttps]
    public HttpResponseMessage Get() { ... }
}

Klientské certifikáty SSL

SSL poskytuje ověřování pomocí certifikátů infrastruktury veřejných klíčů. Server musí poskytnout certifikát, který ověřuje server pro klienta. Je méně běžné, že klient poskytuje serveru certifikát, ale toto je jedna z možností ověřování klientů. Pokud chcete používat klientské certifikáty s protokolem SSL, potřebujete způsob, jak distribuovat podepsané certifikáty uživatelům. U mnoha typů aplikací to nebude dobré uživatelské prostředí, ale v některých prostředích (například v podniku) to může být možné.

Výhody Nevýhody
– Přihlašovací údaje certifikátu jsou silnější než uživatelské jméno a heslo. - SSL poskytuje kompletní zabezpečený kanál s ověřováním, integritou zpráv a šifrováním zpráv. – Musíte získat a spravovat certifikáty PKI. – Klientská platforma musí podporovat klientské certifikáty SSL.

Pokud chcete nakonfigurovat službu IIS tak, aby přijímala klientské certifikáty, otevřete Správce služby IIS a proveďte následující kroky:

  1. Klikněte na uzel webu ve stromovém zobrazení.

  2. V prostředním podokně poklikejte na funkci Nastavení SSL .

  3. V části Klientské certifikáty vyberte jednu z těchto možností:

    • Přijmout: Služba IIS přijme certifikát od klienta, ale nevyžaduje ho.
    • Vyžadovat: Vyžaduje klientský certifikát. (Pokud chcete tuto možnost povolit, musíte také vybrat možnost Vyžadovat SSL.)

V souboru ApplicationHost.config můžete také nastavit tyto možnosti:

<system.webServer>
    <security>
        <access sslFlags="Ssl, SslNegotiateCert" />
        <!-- To require a client cert: -->
        <!-- <access sslFlags="Ssl, SslRequireCert" /> -->
    </security>
</system.webServer>

Příznak SslNegotiateCert znamená, že služba IIS přijme certifikát od klienta, ale nevyžaduje ho (ekvivalent možnosti Přijmout ve Správci služby IIS). Pokud chcete vyžadovat certifikát, nastavte příznak SslRequireCert . Pro účely testování můžete tyto možnosti nastavit také v IIS Express v místním souboru applicationhost.Config umístěném v umístění Documents\IISExpress\config.

Vytvoření klientského certifikátu pro testování

Pro účely testování můžete použít MakeCert.exe k vytvoření klientského certifikátu. Nejprve vytvořte kořenovou autoritu testu:

makecert.exe -n "CN=Development CA" -r -sv TempCA.pvk TempCA.cer

Makecert vás vyzve k zadání hesla pro privátní klíč.

Dále přidejte certifikát do úložiště důvěryhodných kořenových certifikačních autorit testovacího serveru následujícím způsobem:

  1. Otevřete konzolu MMC.
  2. V části Soubor vyberte Přidat nebo odebrat modul snap-in.
  3. Vyberte Účet počítače.
  4. Vyberte Místní počítač a dokončete průvodce.
  5. V navigačním podokně rozbalte uzel Důvěryhodné kořenové certifikační autority.
  6. V nabídce Akcepřejděte na Všechny úkoly a potom kliknutím na Importovat spusťte Průvodce importem certifikátu.
  7. Přejděte do souboru certifikátu TempCA.cer.
  8. Klikněte na Otevřít, pak na Další a dokončete průvodce. (Zobrazí se výzva k opětovnému zadání hesla.)

Teď vytvořte klientský certifikát podepsaný prvním certifikátem:

makecert.exe -pe -ss My -sr CurrentUser -a sha1 -sky exchange -n "CN=name" 
     -eku 1.3.6.1.5.5.7.3.2 -sk SignedByCA -ic TempCA.cer -iv TempCA.pvk

Použití klientských certifikátů ve webovém rozhraní API

Na straně serveru můžete získat klientský certifikát voláním GetClientCertificate ve zprávě požadavku. Metoda vrátí hodnotu null, pokud neexistuje žádný klientský certifikát. V opačném případě vrátí instanci X509Certificate2 . Tento objekt slouží k získání informací z certifikátu, například vystavitele a předmětu. Tyto informace pak můžete použít k ověřování nebo autorizaci.

X509Certificate2 cert = Request.GetClientCertificate();
string issuer = cert.Issuer;
string subject = cert.Subject;