استخدام شهادة TLS/SSL في التعليمات البرمجية الخاصة بك في Azure App Service

في رمز التطبيق الخاص بك، يمكنك الوصول إلى الشهادات العامة أو الخاصة التي تضيفها إلى خدمة التطبيق. قد يعمل رمز التطبيق الخاص بك كعميل ويصل إلى خدمة خارجية تتطلب مصادقة الشهادة، أو قد يحتاج إلى أداء مهام التشفير. يوضح هذا الدليل كيفية استخدام الشهادات العامة أو الخاصة في رمز الطلب الخاص بك.

يستخدم هذا الأسلوب لاستخدام الشهادات في التعليمات البرمجية وظيفة TLS في App Service، مما يتطلب أن يكون تطبيقك في المستوى الأساسي أو أعلى. إذا كان تطبيقك موجودًا في المستوى مجانًا أو مشارك، يمكنك تضمين ملف الشهادة في مستودع التطبيق الخاص بك .

عندما تسمح لـ App Service بإدارة شهادات TLS/SSL الخاصة بك، يمكنك الاحتفاظ بالشهادات ورمز التطبيق الخاص بك بشكل منفصل وحماية بياناتك الحساسة.

المتطلبات الأساسية

اتبع هذا الدليل الإرشادي:

ابحث عن بصمة الإبهام

في مدخل Microsoft Azure، من القائمة اليسرى، حدد App Services><اسم التطبيق>.

من التنقل الأيمن لتطبيقك، حدد الشهادات، ثم حدد إحضار الشهادات الخاصة بك (.pfx) أو شهادات المفتاح العام (.cer).

ابحث عن الشهادة التي تريد استخدامها ونسخ بصمة الإبهام.

انسح بصمة الشهادة

جعل الشهادة متاحة

للوصول إلى شهادة في رمز التطبيق الخاص بك، أضف بصمة الإبهام إلى إعداد التطبيق WEBSITE_LOAD_CERTIFICATES، من خلال تشغيل الأمر التالي في Cloud Shell:

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

لجعل جميع شهاداتك متاحة، حدد القيمة بـ *.

إشعار

عند WEBSITE_LOAD_CERTIFICATES تعيين *، يمكن الوصول إلى جميع الشهادات المضافة مسبقا إلى التعليمات البرمجية للتطبيق. إذا أضفت شهادة إلى تطبيقك لاحقا، فعد تشغيل التطبيق لجعل الشهادة الجديدة متاحة لتطبيقك. لمزيد من المعلومات، راجع عند تحديث (تجديد) شهادة.

شهادة التحميل في تطبيقات Windows

يجعل إعداد التطبيق WEBSITE_LOAD_CERTIFICATES الشهادات المحددة متاحة لتطبيق Windows المستضاف في متجر شهادات Windows، في المستخدم الحالي\My .

في تعليمة C#‎ البرمجية، يمكنك الوصول إلى الشهادة بواسطة بصمة الإبهام. التعلمية البرمجية التالية تحمل شهادة ببصمة الإبهام E661583E8FABEF4C0BEF694CBC41C28FB81CD870.

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 البرمجية، يمكنك الوصول إلى الشهادة من متجر "Windows-MY" باستخدام حقل اسم الموضوع المشترك (انظر الشهادة العامة الرئيسية). توضح التعليمية البرمجية التالية كيفية تحميل شهادة عامة خاصة:

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، راجع شهادة التحميل من الملف .

شهادة التحميل من الملف

إذا كنت بحاجة إلى تحميل ملف شهادة تقوم بتحميله يدويًا، فمن الأفضل تحميل الشهادة باستخدام FTPS بدلًا من Git، على سبيل المثال. يجب عليك إبقاء البيانات الحساسة مثل شهادة خاصة خارج نطاق سيطرة المصدر.

إشعار

يجب أن يصل كل من ASP.NET و ASP.NET Core على Windows إلى متجر الشهادات حتى إن قمت بتحميل شهادة من ملف. لتحميل ملف شهادة في تطبيق Windows .NET، قم بتحميل ملف تعريف المستخدم الحالي بالأمر التالي في Cloud Shell :

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

يستخدم هذا الأسلوب لاستخدام الشهادات في التعليمات البرمجية وظيفة TLS في App Service، مما يتطلب أن يكون تطبيقك في المستوى الأساسي أو أعلى.

مثال C#‎ التالي يحمل شهادة عامة من مسار نسبي في تطبيقك:

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

لمعرفة كيفية تحميل شهادة TLS/SSL من ملف في Node.js أو PHP أو Python أو Java، راجع وثائق اللغة أو النظام الأساسي للويب المعني.

شهادة التحميل في حاويات Linux/Windows

WEBSITE_LOAD_CERTIFICATES يجعل إعداد التطبيق الشهادات المحددة قابلة للوصول إلى حاويات Windows أو Linux المخصصة (بما في ذلك حاويات Linux المضمنة) كملفات. وتوجد الملفات تحت الأدلة التالية:

النظام الأساسي للحاوية الشهادات العامة شهادات خاصة
حاوية Windows C:\appservice\certificates\public C:\appservice\certificates\private
حاوية Linux /var/ssl/certs /var/ssl/private

أسماء ملفات الشهادات هي بصمات الشهادات.

إشعار

تقوم App Service بحقن مسارات الشهادات في حاويات Windows باعتبارها المتغيرات البيئية التالية WEBSITE_PRIVATE_CERTS_PATH،WEBSITE_INTERMEDIATE_CERTS_PATH،WEBSITE_PUBLIC_CERTS_PATH وWEBSITE_ROOT_CERTS_PATH. من الأفضل الرجوع إلى مسار الشهادة مع متغيرات البيئة بدلاً من ترميز مسار الشهادة، في حالة تغير مسارات الشهادة في المستقبل.

بالإضافة إلى ذلك، تقوم حاويات Windows Server Core وWindows Nano Server بتحميل الشهادات في مخزن الشهادات تلقائيا، في LocalMachine\My. لتحميل الشهادات، اتبع نفس نمط شهادة تحميل في تطبيقات Windows . بالنسبة للحاويات المستندة إلى Windows Nano، استخدم مسارات الملفات هذه تحميل الشهادة مباشرة من الملف.

توضح تعليمة C#‎ البرمجية التالية كيفية تحميل شهادة عامة في تطبيق Linux.

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

توضح تعليمة C#‎ البرمجية التالية كيفية تحميل شهادة خاصة في تطبيق Linux.

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

لمعرفة كيفية تحميل شهادة TLS/SSL من ملف في Node.js أو PHP أو Python أو Java، راجع وثائق اللغة أو النظام الأساسي للويب المعني.

عند تحديث (تجديد) شهادة

عند تجديد شهادة وإضافتها إلى تطبيقك، تحصل على بصمة إبهام جديدة، والتي تحتاج أيضا إلى الوصول إليها. تعتمد كيفية عملها على نوع الشهادة.

إذا قمت بتحميل الشهادة العامة أو الخاصة يدويا:

  • إذا قمت بإدراج بصمات الإبهام بشكل صريح في WEBSITE_LOAD_CERTIFICATES، أضف بصمة الإبهام الجديدة إلى إعداد التطبيق.
  • إذا WEBSITE_LOAD_CERTIFICATES تم تعيين إلى *، فقم بإعادة تشغيل التطبيق لتسهيل الوصول إلى الشهادة الجديدة.

إذا قمت بتجديد شهادة في Key Vault، مثل شهادة App Service، فإن المزامنة اليومية من Key Vault تقوم بإجراء التحديث الضروري تلقائيا عند مزامنة تطبيقك مع الشهادة المجددة.

  • إذا كانت WEBSITE_LOAD_CERTIFICATES تحتوي على بصمة الإبهام القديمة للشهادة التي تم تجديدها، تقوم المزامنة اليومية بتحديث بصمة الإبهام القديمة إلى بصمة الإبهام الجديدة تلقائيا.
  • إذا WEBSITE_LOAD_CERTIFICATES تم تعيين إلى *، فإن المزامنة اليومية تجعل الشهادة الجديدة قابلة للوصول تلقائيا.

المزيد من الموارد