Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Számos gyakori hitelesítési séma nem biztonságos egyszerű HTTP-kapcsolaton keresztül. Az egyszerű hitelesítés és az űrlaphitelesítés különösen titkosítatlan hitelesítő adatokat küld. A biztonság érdekében ezeknek a hitelesítési sémáknak SSL-t kell használniuk. Emellett SSL-ügyféltanúsítványok is használhatók az ügyfelek hitelesítésére.
SSL engedélyezése a kiszolgálón
Az SSL beállítása az IIS 7-ben vagy újabb verzióiban:
- Tanúsítvány létrehozása vagy lekérése. Teszteléshez létrehozhat egy önaláírt tanúsítványt.
- HTTPS-kötés hozzáadása.
További információ: SSL beállítása az IIS 7.
Helyi teszteléshez engedélyezheti az SSL-t az IIS Expressben a Visual Studióból. A Tulajdonságok ablakban állítsa SSL-kompatibilisTrueértékre. Figyelje meg SSL URL-értékét; HTTPS-kapcsolatok teszteléséhez használja ezt az URL-címet.
SSL kényszerítése webes API-vezérlőben
Ha HTTPS- és HTTP-kötéssel is rendelkezik, az ügyfelek továbbra is HTTP-t használhatnak a webhely eléréséhez. Előfordulhat, hogy egyes erőforrások HTTP-kapcsolaton keresztül érhetők el, míg más erőforrások SSL-t igényelnek. Ebben az esetben használjon műveletszűrőt az SSL megköveteléséhez a védett erőforrásokhoz. Az alábbi kód egy SSL-t ellenőrző webes API-hitelesítési szűrőt mutat be:
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);
}
}
}
Adja hozzá ezt a szűrőt az SSL-t igénylő webes API-műveletekhez:
public class ValuesController : ApiController
{
[RequireHttps]
public HttpResponseMessage Get() { ... }
}
SSL-ügyféltanúsítványok
Az SSL nyilvános kulcsú infrastruktúra-tanúsítványok használatával biztosít hitelesítést. A kiszolgálónak meg kell adnia egy tanúsítványt, amely hitelesíti a kiszolgálót az ügyfél számára. Kevésbé gyakori, hogy az ügyfél tanúsítványt ad a kiszolgálónak, de ez az ügyfelek hitelesítésének egyik lehetősége. Ahhoz, hogy az ügyféltanúsítványokat SSL-lel használhassa, meg kell adnia az aláírt tanúsítványok terjesztésének módját a felhasználók számára. Sok alkalmazástípus esetén ez nem lesz jó felhasználói élmény, de bizonyos környezetekben (például nagyvállalati környezetben) megvalósítható.
| Előnye | Hátrányai |
|---|---|
| - A tanúsítvány hitelesítő adatai erősebbek, mint a felhasználónév/jelszó. - Az SSL teljes körű biztonságos csatornát biztosít hitelesítéssel, üzenetintegritással és üzenettitkosítással. | – PKI-tanúsítványokat kell beszereznie és kezelnie. – Az ügyfélplatformnak támogatnia kell az SSL-ügyféltanúsítványokat. |
Ha az IIS-t ügyféltanúsítványok elfogadására szeretné konfigurálni, nyissa meg az IIS Managert, és hajtsa végre a következő lépéseket:
Kattintson a helycsomópontra a fa nézetben.
Kattintson duplán az SSL-beállítások funkcióra a középső panelen.
Az ügyféltanúsítványokterületen válasszon az alábbi lehetőségek közül:
- Elfogadás: Az IIS elfogad egy tanúsítványt az ügyféltől, de nem igényel egyet.
- megkövetelése: Ügyféltanúsítvány szükséges. (A beállítás engedélyezéséhez az "SSL megkövetelése" lehetőséget is ki kell választania)
Ezeket a beállításokat a ApplicationHost.config fájlban is megadhatja:
<system.webServer>
<security>
<access sslFlags="Ssl, SslNegotiateCert" />
<!-- To require a client cert: -->
<!-- <access sslFlags="Ssl, SslRequireCert" /> -->
</security>
</system.webServer>
Az SslNegotiateCert jelző azt jelenti, hogy az IIS elfogad egy tanúsítványt az ügyféltől, de nem igényel egyet (egyenértékű az IIS Manager "Elfogadás" lehetőségével). Tanúsítvány megköveteléséhez állítsa be a SslRequireCert jelzőt. A teszteléshez ezeket a beállításokat az IIS Expressben, a helyi applicationhostban is beállíthatja. A "Documents\IISExpress\config" fájlban található konfigurációs fájl.
Ügyféltanúsítvány létrehozása teszteléshez
Tesztelési célokra az MakeCert.exe használatával hozhat létre ügyféltanúsítványt. Először hozzon létre egy tesztgyökér-tanúsítványhatóságot:
makecert.exe -n "CN=Development CA" -r -sv TempCA.pvk TempCA.cer
A Makecert kérni fogja, hogy adjon meg jelszót a titkos kulcshoz.
Ezután adja hozzá a tanúsítványt a tesztkiszolgáló "Megbízható legfelső szintű hitelesítésszolgáltatók" tárolójába az alábbiak szerint:
- Nyissa meg az MMC-t.
- A Fájlmenüben válassza a Beépülő modul hozzáadása/eltávolításalehetőséget.
- Az Elérhető beépülő modulokterületen válassza a Tanúsítványoklehetőséget, majd kattintson a Hozzáadásgombra.
- Válassza Számítógépfiók.
- Válassza a Helyi számítógép lehetőséget, és fejezze be a varázslót.
- A navigációs panelen bontsa ki a "Megbízható legfelső szintű hitelesítésszolgáltatók" csomópontot.
- A Művelet menüben mutasson rá a Minden feladatelemre, majd kattintson a Importálás gombra a Tanúsítványimportálási varázsló elindításához.
- Keresse meg a tanúsítványfájlt, TempCA.cer.
- Kattintson a Megnyitásgombra, majd a Tovább gombra, és fejezze be a varázslót. (A rendszer kérni fogja, hogy adja meg újra a jelszót.)
Most hozzon létre egy ügyféltanúsítványt, amelyet az első tanúsítvány ír alá:
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
Ügyféltanúsítványok használata a Web API-ban
A kiszolgálóoldalon az ügyféltanúsítványt úgy szerezheti be, hogy meghívja GetClientCertificate a kérelemüzenetben. A metódus null értéket ad vissza, ha nincs ügyféltanúsítvány. Ellenkező esetben egy X509Certificate2-példányt ad vissza. Ezzel az objektummal információkat kérhet le a tanúsítványból, például a kiállítótól és a tulajdonostól. Ezután ezeket az információkat használhatja hitelesítéshez és/vagy engedélyezéshez.
X509Certificate2 cert = Request.GetClientCertificate();
string issuer = cert.Issuer;
string subject = cert.Subject;