Sertifikaları kullanarak API'lerin güvenliğini sağlama
Sertifikalar, istemci ile API ağ geçidi arasında Aktarım Katmanı Güvenliği (TLS) karşılıklı kimlik doğrulaması sağlamak için kullanılabilir. API Management ağ geçidini yalnızca belirli bir parmak izi içeren sertifikaların bulunduğu isteklere izin verecek şekilde yapılandırabilirsiniz. Ağ geçidi düzeyinde kimlik doğrulaması gelen ilkeler aracılığıyla işlenir.
Aktarım Katmanı Güvenliği istemci kimlik doğrulaması
TLS istemci kimlik doğrulamasıyla API Management ağ geçidi istemci isteğinin içindeki sertifikayı inceleyebilir ve şunlar gibi özelliklerini denetleyebilir:
Özellik | Açıklama |
---|---|
Sertifika Yetkilisi (CA) | Yalnızca belirli bir CA tarafından imzalanmış sertifikalara izin verin |
Parmak İzi | Belirtilen parmak izini içeren sertifikalara izin verin |
Konu | Yalnızca belirtilen konuyu içeren sertifikalara izin verir |
Bitiş Tarihi | Süresi dolan sertifikalara izin verme |
Bu özellikler birbirini dışlamaz ve kendi ilke gereksinimlerinizi oluşturmak için birlikte karıştırılabilir. Örneğin, istekte geçirilen sertifikanın imzalandığını ve süresinin dolmadığını belirtebilirsiniz.
İstemci sertifikaları, üzerinde oynanmadığından emin olmak için imzalanır. İş ortağınız size bir sertifika gönderdiğinde sertifikanın bir sahtekardan değil iş ortağınızdan geldiğini doğrulayın. Sertifikayı doğrulamanın iki yaygın yolu vardır:
- Sertifikayı kimin verdiğini denetleyin. Sertifikayı veren güvendiğiniz bir sertifika yetkilisiyse, sertifikayı kullanabilirsiniz. Bu süreci otomatikleştirmek için Azure portalında güvenilen sertifika yetkililerini yapılandırabilirsiniz.
- Sertifika iş ortağı tarafından verildiyse, ondan geldiğini doğrulayın. Örneğin sertifikayı bizzat verdiyse bu sertifikanın özgün olduğundan emin olabilirsiniz. Bunlar otomatik olarak imzalanan sertifikalar olarak bilinir.
Tüketim katmanında istemci sertifikalarını kabul etme
API Management'ta Tüketim katmanı sunucusuz tasarım ilkelerine uygun olarak tasarlanmıştır. API'lerinizi Azure İşlevleri gibi sunucusuz teknolojilerle oluşturuyorsanız bu katman çok uygundur. Tüketim katmanında istemci sertifikalarının kullanımını açıkça etkinleştirmeniz gerekir ve bunu Özel etki alanları sayfasında yapabilirsiniz. Bu adım diğer katmanlarda gerekli değildir.
Sertifika Yetkilendirme İlkeleri
Bu ilkeleri API Management ağ geçidinin içindeki gelen işlem ilkesi dosyasında oluşturun:
İstemci sertifikasının parmak izini denetleme
Her istemci sertifikasının bir parmak izi vardır, bu parmak izi diğer sertifika özellikleri kullanılarak hesaplanan bir karmadır. Parmak izi, sertifika yetkilisi tarafından verildiğinden bu yana sertifikadaki değerlerin değiştirilmemesini sağlar. İlkenizde parmak izini denetleyebilirsiniz. Aşağıdaki örnekte istekte geçirilen sertifikanın parmak izi denetlenir:
<choose>
<when condition="@(context.Request.Certificate == null || context.Request.Certificate.Thumbprint != "desired-thumbprint")" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>
API Management'a yüklenen sertifikalarda parmak izini denetleme
Önceki örnekte tek parmak izi yeterliydi çünkü tek bir sertifika doğrulanıyordu. Genellikle her müşteri veya iş ortağı farklı parmak izine sahip farklı bir sertifika geçirebilir. Bu senaryoyu desteklemek için iş ortaklarınızdan sertifikaları alın ve Azure portalındaki İstemci sertifikaları sayfasını kullanarak bunları API Management kaynağına yükleyin. Sonra ilkenize şu kodu ekleyin:
<choose>
<when condition="@(context.Request.Certificate == null || !context.Request.Certificate.Verify() || !context.Deployment.Certificates.Any(c => c.Value.Thumbprint == context.Request.Certificate.Thumbprint))" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>
İstemci sertifikasında sertifikayı vereni ve sertifika konusunu denetleme
Bu örnekte istekte geçirilen sertifikada sertifikayı veren ve sertifika konusu denetlenir:
<choose>
<when condition="@(context.Request.Certificate == null || context.Request.Certificate.Issuer != "trusted-issuer" || context.Request.Certificate.SubjectName.Name != "expected-subject-name")" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>