Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
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:
Klikněte na uzel lokality ve stromovém zobrazení.
Poklikejte na funkci nastavení protokolu SSL v prostředním podokně.
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:
- Otevřete konzolu MMC.
- V části Souborvyberte Přidat/Odebrat modul snap-in.
- V části Dostupné moduly snap-invyberte Certifikátya potom klikněte na Přidat.
- Vyberte účet počítače.
- Vyberte místní počítač a dokončete průvodce.
- V navigačním podokně rozbalte uzel "Důvěryhodné kořenové certifikační autority".
- V nabídce Akce přejděte na příkaz Všechny úkolya kliknutím na Importovat spusťte Průvodce importem certifikátu.
- Přejděte do souboru certifikátu TempCA.cer.
- 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;