استخدام شهادة TLS/SSL في التعليمة البرمجية في Azure App Service
في رمز التطبيق، يمكنك الوصول إلى الشهادات العامة أو الخاصة التي تضيفها إلى App Service. قد يعمل رمز التطبيق كعميل ويصل إلى خدمة خارجية تتطلب مصادقة الشهادة، أو قد يحتاج إلى تنفيذ مهام تشفير. يوضح هذا الدليل الإرشادي كيفية استخدام الشهادات العامة أو الخاصة في التعليمات البرمجية للتطبيق.
يستخدم هذا النهج لاستخدام الشهادات في التعليمات البرمجية وظيفة طبقة النقل الآمنة في App Service، والتي تتطلب أن يكون تطبيقك في الطبقة الأساسية أو أعلى. إذا كان تطبيقك في الطبقة المجانية أو المشتركة ، فيمكنك تضمين ملف الشهادة في مستودع التطبيق.
عندما تسمح ل App Service بإدارة شهادات TLS/SSL، يمكنك الاحتفاظ بالشهادات ورمز التطبيق بشكل منفصل وحماية بياناتك الحساسة.
المتطلبات الأساسية
اتبع هذا الدليل الإرشادي:
العثور على بصمة الإبهام
في مدخل Azure، من القائمة اليمنى، حدد App-name-App> Services<>.
من شريط التنقل الأيمن لتطبيقك، حدد إعدادات TLS/SSL، ثم حدد شهادات المفتاح الخاص (.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>
لتسهيل الوصول إلى جميع شهاداتك، قم بتعيين القيمة إلى *.
تحميل الشهادة في تطبيقات Windows
WEBSITE_LOAD_CERTIFICATES يتيح إعداد التطبيق إمكانية الوصول إلى الشهادات المحددة لتطبيقك المستضاف Windows في مخزن شهادات Windows، في User\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, avaliable 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 الوصول إلى مخزن الشهادات حتى إذا قمت بتحميل شهادة من ملف. لتحميل ملف شهادة في تطبيق .NET Windows، قم بتحميل ملف تعريف المستخدم الحالي باستخدام الأمر التالي في Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_LOAD_USER_PROFILE=1
يستخدم هذا النهج لاستخدام الشهادات في التعليمات البرمجية وظيفة طبقة النقل الآمنة في 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 أو Ruby، راجع الوثائق الخاصة باللغة أو النظام الأساسي للويب المعني.
شهادة التحميل في حاويات 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 تحميل الشهادات في مخزن الشهادات تلقائيا، في 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 أو Ruby، راجع الوثائق الخاصة باللغة أو النظام الأساسي للويب المعني.