Aracılığıyla paylaş


Web API'sinde SSL ile çalışma

Bazı yaygın kimlik doğrulama düzenleri düz HTTP üzerinden güvenli değildir. Özellikle, Temel kimlik doğrulaması ve form kimlik doğrulaması şifrelenmemiş kimlik bilgileri gönderir. Güvenli olması için, bu kimlik doğrulama düzenlerinin SSL kullanması gerekir. Ayrıca, istemcilerin kimliğini doğrulamak için SSL istemci sertifikaları kullanılabilir.

Sunucuda SSL'yi etkinleştirme

IIS 7 veya sonraki sürümlerde SSL ayarlamak için:

  • Sertifika oluşturun veya alın. Test için otomatik olarak imzalanan bir sertifika oluşturabilirsiniz.
  • HTTPS bağlaması ekleyin.

Ayrıntılar için bkz. IIS 7'de SSL Ayarlama.

Yerel test için Visual Studio'dan IIS Express'te SSL'yi etkinleştirebilirsiniz. Özellikler penceresinde SSL Etkin ayarını Trueolarak ayarlayın. SSL URL'si değerini not edin; HTTPS bağlantılarını test için bu URL'yi kullanın.

Özelliklerde S S L etkin 'doğru' görüntüsü

Web API Denetleyicisinde SSL'yi zorlama

Hem HTTPS hem de HTTP bağlamanız varsa, istemciler siteye erişmek için HTTP kullanmaya devam edebilir. Bazı kaynakların HTTP üzerinden kullanılabilir duruma geçmesine izin verirken, diğer kaynaklar ssl gerektirir. Bu durumda, korumalı kaynaklar için SSL istemek üzere bir eylem filtresi kullanın. Aşağıdaki kod, SSL'yi denetleen bir Web API kimlik doğrulama filtresi gösterir:

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);
        }
    }
}

Bu filtreyi SSL gerektiren herhangi bir Web API'sine ekleyin:

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

SSL İstemci Sertifikaları

SSL, Ortak Anahtar Altyapısı sertifikalarını kullanarak kimlik doğrulaması sağlar. Sunucunun istemcide sunucunun kimliğini doğrulayan bir sertifika sağlaması gerekir. İstemcinin sunucuya sertifika sağlaması daha az yaygındır, ancak bu, istemcilerin kimliğini doğrulamak için bir seçenektir. İstemci sertifikalarını SSL ile kullanmak için, imzalı sertifikaları kullanıcılarınıza dağıtmak için bir yol gerekir. Birçok uygulama türü için bu iyi bir kullanıcı deneyimi olmayacaktır, ancak bazı ortamlarda (örneğin kurumsal) uygulanabilir olabilir.

Avantaj -ları Dezavantaj -ları
- Sertifika kimlik bilgileri kullanıcı adı/paroladan daha güçlü. - SSL, kimlik doğrulaması, ileti bütünlüğü ve ileti şifreleme ile eksiksiz bir güvenli kanal sağlar. - PKI sertifikalarını edinmeniz ve yönetmeniz gerekir. - İstemci platformu SSL istemci sertifikalarını desteklemelidir.

IIS'yi istemci sertifikalarını kabul etmek üzere yapılandırmak için IIS Yöneticisi'ni açın ve aşağıdaki adımları uygulayın:

  1. Ağaç görünümünde site düğümüne tıklayın.

  2. Orta bölmede ssl ayarları özelliğine çift tıklayın.

  3. İstemci Sertifikalarıaltında şu seçeneklerden birini belirleyin:

    • Kabul Et: IIS istemciden bir sertifika kabul eder, ancak bir sertifika gerektirmez.
    • Gerektir: İstemci sertifikası talep et. (Bu seçeneği etkinleştirmek için "SSL gerektir" seçeneğini de belirlemeniz gerekir)

Bu seçenekleri ApplicationHost.config dosyasında da ayarlayabilirsiniz:

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

SslNegotiateCert bayrağı, IIS'nin istemciden bir sertifika kabul edeceği, ancak bir sertifika gerektirmediği anlamına gelir (IIS Yöneticisi'ndeki "Kabul Et" seçeneğine eşdeğerdir). Sertifika istemek için SslRequireCert bayrağını ayarlayın. Test için, bu seçenekleri yerel applicationhost'taki IIS Express'te de ayarlayabilirsiniz. "Documents\IISExpress\config" konumunda bulunan yapılandırma dosyası.

Test için İstemci Sertifikası Oluşturma

Test amacıyla, istemci sertifikası oluşturmak için MakeCert.exe kullanabilirsiniz. İlk olarak bir test kök yetkilisi oluşturun:

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

Makecert, özel anahtar için bir parola girmenizi ister.

Ardından, sertifikayı aşağıdaki gibi test sunucusunun "Güvenilen Kök Sertifika Yetkilileri" deposuna ekleyin:

  1. MMC'i açın.
  2. Dosyaaltında, Eklenti Ekle/Kaldırseçin.
  3. Kullanılabilir ek bileşenleraltında, Sertifikalar'ü seçin ve ardından Ekle'ye tıklayın.
  4. bilgisayar hesabıseçin.
  5. yerel bilgisayar seçin ve sihirbazı tamamlayın.
  6. Gezinti bölmesinin altında "Güvenilen Kök Sertifika Yetkilileri" düğümünü genişletin.
  7. Eylem menüsünde, Tüm Görevlerüzerine gelin ve Sertifika İçeri Aktarma Sihirbazı'nı başlatmak için İçeri Aktar'a tıklayın.
  8. Sertifika dosyasına göz atın TempCA.cer.
  9. Aç'a tıklayın, ardından İleri 'e tıklayın ve sihirbazı tamamlayın. (Parolayı yeniden girmeniz istenir.)

Şimdi ilk sertifika tarafından imzalanan bir istemci sertifikası oluşturun:

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

Web API'sinde İstemci Sertifikalarını Kullanma

Sunucu tarafında, istek iletisinde getClientCertificate çağırarak istemci sertifikasını alabilirsiniz. İstemci sertifikası yoksa yöntemi null döndürür. Aksi takdirde, bir X509Certificate2 örneği döndürür. Sertifikadan veren ve konu gibi bilgileri almak için bu nesneyi kullanın. Ardından bu bilgileri kimlik doğrulaması ve/veya yetkilendirme için kullanabilirsiniz.

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