Azure App Service'te kodunuzda TLS/SSL sertifikası kullanma

Uygulama kodunuzda, App Service'e eklediğiniz genel veya özel sertifikalara erişebilirsiniz. Uygulama kodunuz bir istemci işlevi görür ve sertifika kimlik doğrulaması gerektiren bir dış hizmete erişebilir veya şifreleme görevleri gerçekleştirmesi gerekebilir. Bu nasıl yapılır kılavuzu, uygulama kodunuzda genel veya özel sertifikaların nasıl kullanılacağını gösterir.

Kodunuzda sertifika kullanma yaklaşımı, App Service'teki TLS işlevselliğinden yararlanarak uygulamanızın Temel katmanda veya daha yüksek bir katmanda olmasını gerektirir. Uygulamanız Ücretsiz veya Paylaşılan katmanındaysa, sertifika dosyasını uygulama deponuza ekleyebilirsiniz.

App Service'in TLS/SSL sertifikalarınızı yönetmesine izin verdiğinizde sertifikaları ve uygulama kodunuzu ayrı ayrı koruyabilir ve hassas verilerinizi koruyabilirsiniz.

Önkoşullar

Bu nasıl yapılır kılavuzunu izlemek için:

Parmak izini bulma

Azure portalında, soldaki menüden App Services<>uygulama adı'nı> seçin.

Uygulamanızın sol gezinti bölmesinde Sertifikalar'ı ve ardından Kendi sertifikalarınızı getir (.pfx) veya Ortak anahtar sertifikaları (.cer) seçeneğini belirleyin.

Kullanmak istediğiniz sertifikayı bulun ve parmak izini kopyalayın.

Copy the certificate thumbprint

Sertifikayı erişilebilir hale getirme

Uygulama kodunuzdaki bir sertifikaya WEBSITE_LOAD_CERTIFICATES erişmek için Cloud Shell'de aşağıdaki komutu çalıştırarak sertifikanın parmak izini uygulama ayarına ekleyin:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_CERTIFICATES=<comma-separated-certificate-thumbprints>

Tüm sertifikalarınızın erişilebilir olmasını sağlamak için değerini olarak *ayarlayın.

Dekont

WEBSITE_LOAD_CERTIFICATES ayarlandığında*, daha önce eklenen tüm sertifikalara uygulama kodu tarafından erişilebilir. Daha sonra uygulamanıza bir sertifika eklerseniz, yeni sertifikayı uygulamanız için erişilebilir hale getirmek için uygulamayı yeniden başlatın. Daha fazla bilgi için bkz . Sertifikayı güncelleştirirken (yenilerken).

Windows uygulamalarında sertifika yükleme

Uygulama WEBSITE_LOAD_CERTIFICATES ayarı, belirtilen sertifikaları Geçerli Kullanıcı\My içindeki Windows sertifika deposundaki Windows barındırılan uygulamanız için erişilebilir hale getirir.

C# kodunda sertifikaya sertifika parmak iziyle erişirsiniz. Aşağıdaki kod parmak izi E661583E8FABEF4C0BEF694CBC41C28FB81CD870olan bir sertifika yükler.

using System;
using System.Linq;
using System.Security.Cryptography.X509Certificates;

string certThumbprint = "E661583E8FABEF4C0BEF694CBC41C28FB81CD870";
bool validOnly = false;

using (X509Store certStore = new X509Store(StoreName.My, StoreLocation.CurrentUser))
{
  certStore.Open(OpenFlags.ReadOnly);

  X509Certificate2Collection certCollection = certStore.Certificates.Find(
                              X509FindType.FindByThumbprint,
                              // Replace below with your certificate's thumbprint
                              certThumbprint,
                              validOnly);
  // Get the first cert with the thumbprint
  X509Certificate2 cert = certCollection.OfType<X509Certificate2>().FirstOrDefault();

  if (cert is null)
      throw new Exception($"Certificate with thumbprint {certThumbprint} was not found");

  // Use certificate
  Console.WriteLine(cert.FriendlyName);
  
  // Consider to call Dispose() on the certificate after it's being used, available in .NET 4.6 and later
}

Java kodunda, Konu Ortak Adı alanını kullanarak sertifikaya "Windows-MY" deposundan erişirsiniz (bkz . Ortak anahtar sertifikası). Aşağıdaki kod, özel anahtar sertifikasının nasıl yükleneceklerini gösterir:

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import java.security.KeyStore;
import java.security.cert.Certificate;
import java.security.PrivateKey;

...
KeyStore ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null); 
Certificate cert = ks.getCertificate("<subject-cn>");
PrivateKey privKey = (PrivateKey) ks.getKey("<subject-cn>", ("<password>").toCharArray());

// Use the certificate and key
...

Windows sertifika deposu için desteklemeyen veya yetersiz destek sunmayan diller için bkz . Dosyadan sertifika yükleme.

Dosyadan sertifika yükleme

El ile yüklediğiniz bir sertifika dosyasını yüklemeniz gerekiyorsa, örneğin Git yerine FTPS kullanarak sertifikayı karşıya yüklemek daha iyidir. Özel sertifika gibi hassas verileri kaynak denetiminin dışında tutmalısınız.

Dekont

Windows'da ASP.NET ve ASP.NET Core, bir dosyadan sertifika yükleseniz bile sertifika deposuna erişmelidir. Bir Windows .NET uygulamasına sertifika dosyası yüklemek için Cloud Shell'de aşağıdaki komutla geçerli kullanıcı profilini yükleyin:

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1

Kodunuzda sertifika kullanma yaklaşımı, App Service'teki TLS işlevselliğinden yararlanarak uygulamanızın Temel katmanda veya daha yüksek bir katmanda olmasını gerektirir.

Aşağıdaki C# örneği, uygulamanızdaki göreli bir yoldan genel sertifika yükler:

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...
var bytes = File.ReadAllBytes("~/<relative-path-to-cert-file>");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Node.js, PHP, Python veya Java'daki bir dosyadan TLS/SSL sertifikası yüklemeyi görmek için ilgili dil veya web platformunun belgelerine bakın.

Linux/Windows kapsayıcılarında sertifika yükleme

Uygulama WEBSITE_LOAD_CERTIFICATES ayarı, belirtilen sertifikaları Windows veya Linux özel kapsayıcılarınız (yerleşik Linux kapsayıcıları dahil) için dosya olarak erişilebilir hale getirir. Dosyalar aşağıdaki dizinler altında bulunur:

Kapsayıcı platformu Ortak sertifikalar Özel sertifikalar
Windows kapsayıcısı C:\appservice\certificates\public C:\appservice\certificates\private
Linux kapsayıcısı /var/ssl/certs /var/ssl/private

Sertifika dosya adları, sertifika parmak izleridir.

Dekont

App Service, sertifika yollarını Windows kapsayıcılarına aşağıdaki ortam değişkenleri WEBSITE_PRIVATE_CERTS_PATH, , WEBSITE_INTERMEDIATE_CERTS_PATHWEBSITE_PUBLIC_CERTS_PATHve WEBSITE_ROOT_CERTS_PATHolarak ekler. Sertifika yollarının gelecekte değişmesi durumunda sertifika yolunu sabit kodlamak yerine ortam değişkenleriyle sertifika yoluna başvurmak daha iyidir.

Ayrıca, Windows Server Core kapsayıcıları sertifikaları LocalMachine\My konumundaki sertifika deposuna otomatik olarak yükler. Sertifikaları yüklemek için Windows uygulamalarında Sertifika yükle ile aynı deseni izleyin. Windows Nano tabanlı kapsayıcılar için bu dosya yollarını kullanın Sertifikayı doğrudan dosyadan yükleyin.

Aşağıdaki C# kodu, Bir Linux uygulamasında genel sertifikanın nasıl yükleneceklerini gösterir.

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;

...
var bytes = File.ReadAllBytes("/var/ssl/certs/<thumbprint>.der");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Aşağıdaki C# kodu, Linux uygulamasına özel sertifika yükleme işlemini gösterir.

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
...
var bytes = File.ReadAllBytes("/var/ssl/private/<thumbprint>.p12");
var cert = new X509Certificate2(bytes);

// Use the loaded certificate

Node.js, PHP, Python veya Java'daki bir dosyadan TLS/SSL sertifikası yüklemeyi görmek için ilgili dil veya web platformunun belgelerine bakın.

Sertifikayı güncelleştirirken (yenilerken)

Bir sertifikayı yenileyip uygulamanıza eklediğinizde, yeni bir parmak izi alır ve bu parmak izi de erişilebilir hale getirilmelidir. Nasıl çalıştığı sertifika türüne bağlıdır.

Genel veya özel sertifikayı el ile karşıya yüklerseniz:

  • parmak izlerini içinde WEBSITE_LOAD_CERTIFICATESaçıkça listeliyorsanız, yeni parmak izini uygulama ayarına ekleyin.
  • olarak ayarlanırsa WEBSITE_LOAD_CERTIFICATES*, yeni sertifikayı erişilebilir hale getirmek için uygulamayı yeniden başlatın.

Key Vault'ta app service sertifikası gibi bir sertifikayı yenilerseniz, Key Vault'tan yapılan günlük eşitleme, uygulamanızı yenilenen sertifikayla eşitlerken gerekli güncelleştirmeyi otomatik olarak yapar.

  • WEBSITE_LOAD_CERTIFICATES Yenilenen sertifikanızın eski parmak izini içeriyorsa, günlük eşitleme eski parmak izini yeni parmak iziyle otomatik olarak güncelleştirir.
  • olarak ayarlanırsa WEBSITE_LOAD_CERTIFICATES*, günlük eşitleme yeni sertifikanın otomatik olarak erişilebilir olmasını sağlar.

Diğer kaynaklar