Megosztás a következőn keresztül:


Az SSL használata a Web API-ban

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.

Kép az SSL engedélyezettségéről a tulajdonságokban

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:

  1. Kattintson a helycsomópontra a fa nézetben.

  2. Kattintson duplán az SSL-beállítások funkcióra a középső panelen.

  3. 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:

  1. Nyissa meg az MMC-t.
  2. A Fájlmenüben válassza a Beépülő modul hozzáadása/eltávolításalehetőséget.
  3. Az Elérhető beépülő modulokterületen válassza a Tanúsítványoklehetőséget, majd kattintson a Hozzáadásgombra.
  4. Válassza Számítógépfiók.
  5. Válassza a Helyi számítógép lehetőséget, és fejezze be a varázslót.
  6. A navigációs panelen bontsa ki a "Megbízható legfelső szintű hitelesítésszolgáltatók" csomópontot.
  7. 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.
  8. Keresse meg a tanúsítványfájlt, TempCA.cer.
  9. 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;