Sdílet prostřednictvím


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

Několik běžných schémat ověřování není zabezpečené přes prostý protokol HTTP. Zejména základní ověřování a ověřování pomocí formulářů odesílá 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é použít klientské certifikáty SSL k ověřování klientů.

Povolení 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 Jak nastavit PROTOKOL SSL ve službě IIS 7.

Pro místní testování můžete v sadě Visual Studio povolit SSL ve službě IIS Express. V okně Vlastnosti nastavte SSL Enabled na True. Poznamenejte si hodnotu adresy URL PROTOKOLU SSL; tuto adresu URL použijte k testování připojení HTTPS.

Obrázek SSL povoleno ve vlastnostech

Vynucení SSL v kontroleru webového rozhraní API

Pokud máte jak https, tak vazbu HTTP, můžou klienti dál používat protokol HTTP pro přístup k lokalitě. Můžete povolit, aby některé prostředky byly dostupné prostřednictvím protokolu HTTP, zatímco jiné prostředky vyžadují PROTOKOL SSL. V takovém případě použijte filtr akcí, který vyžaduje ssl pro chráněné prostředky. Následující kód ukazuje filtr ověřování webového rozhraní API, který kontroluje protokol 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í protokol 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 klientovi. Pro klienta je méně běžné poskytnout serveru certifikát, jedná se ale o jednu možnost pro 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 certifikáty klienta SSL.

Chcete-li 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 lokality ve stromovém zobrazení.

  2. Poklikejte na funkci nastavení protokolu SSL v prostředním podokně.

  3. V části klientské certifikátyvyberte jednu z těchto možností:

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

Tyto možnosti můžete také nastavit v souboru ApplicationHost.config:

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

Příznak SslNegotiate Cert znamená, že služba IIS přijme certifikát z 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 také nastavit tyto možnosti ve službě IIS Express v místním hostiteli aplikací. Konfigurační soubor umístěný ve složce Documents\IISExpress\config.

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

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

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 Souborvyberte Přidat/Odebrat modul snap-in.
  3. V části Dostupné moduly snap-invyberte Certifikátya potom klikněte na Přidat.
  4. Vyberte účet počítače.
  5. Vyberte místní počítač a dokončete průvodce.
  6. V navigačním podokně rozbalte uzel "Důvěryhodné kořenové certifikační autority".
  7. V nabídce Akce přejděte na příkaz Všechny úkolya kliknutím na Importovat spusťte Průvodce importem certifikátu.
  8. Přejděte do souboru certifikátu TempCA.cer.
  9. Klikněte na Otevříta potom klikněte 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 klientský certifikát získat 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 subjektu. 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;