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. Bu kimlik doğrulama düzenlerinin güvenli olması için 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'yi Ayarlama.
Yerel test için, Visual Studio'dan IIS Express SSL'yi etkinleştirebilirsiniz. Özellikler penceresi SSL Etkin'iTrue olarak ayarlayın. SSL URL'sinin değerini not edin; HTTPS bağlantılarını test etme amacıyla bu URL'yi kullanın.
Web API Denetleyicisinde SSL'yi zorunlu tutma
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 olmasına 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 filtresini 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 yönteme ihtiyacınız vardır. Birçok uygulama türü için bu iyi bir kullanıcı deneyimi olmayacaktır, ancak bazı ortamlarda (örneğin, kuruluş) uygulanabilir olabilir.
Avantajlar | Dezavantajlar |
---|---|
- 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ı gerçekleştirin:
Ağaç görünümünde site düğümüne tıklayın.
Orta bölmedeki SSL Ayarları özelliğine çift tıklayın.
İstemci Sertifikaları'nın altında şu seçeneklerden birini belirleyin:
- Kabul Et: IIS istemciden bir sertifika kabul eder, ancak bir sertifika gerektirmez.
- Gerekli: İstemci sertifikası iste. (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 "Documents\IISExpress\config" konumundaki yerel applicationhost.Config dosyasındaki IIS Express da ayarlayabilirsiniz.
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:
- MMC'i açın.
- Dosya'nın altında Ek Bileşen Ekle/Kaldır'ı seçin.
- Bilgisayar Hesabı'ni seçin.
- Yerel bilgisayar'ı seçin ve sihirbazı tamamlayın.
- Gezinti bölmesinin altında "Güvenilen Kök Sertifika Yetkilileri" düğümünü genişletin.
- Eylem menüsünde, Tüm Görevler'in üzerine gelin ve ardından İçeri Aktar'a tıklayarak Sertifika İçeri Aktarma Sihirbazı'nı başlatın.
- TempCA.cer sertifika dosyasına göz atın.
- Aç'a tıklayın, ardından İleri'ye 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'i ç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;