كيفية التوقيع على حزم تكوين الجهاز

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

لتمكين هذا السيناريو، هناك خطوتان تحتاج إلى إكمالهما. قم بتشغيل cmdlet لتوقيع حزمة المحتوى، وإلحاق علامة بالأجهزة التي يجب أن تتطلب توقيع التعليمات البرمجية.

التحقق من صحة التوقيع باستخدام شهادة توقيع التعليمات البرمجية

لاستخدام ميزة التحقق من صحة التوقيع، قم بتشغيل Protect-GuestConfigurationPackage cmdlet لتوقيع الحزمة قبل نشرها. يتطلب الأمر cmdlet هذا شهادة "توقيع التعليمات البرمجية". إذا لم يكن لديك شهادة "توقيع التعليمات البرمجية"، فاستخدم البرنامج النصي التالي لإنشاء شهادة موقعة ذاتيا لأغراض الاختبار لمتابعة المثال.

التحقق من صحة توقيع Windows

# How to create a self sign cert and use it to sign Machine Configuration
# custom policy package

# Create Code signing cert
$codeSigningParams = @{
    Type          = 'CodeSigningCert'
    DnsName       = 'GCEncryptionCertificate'
    HashAlgorithm = 'SHA256'
}
$mycert = New-SelfSignedCertificate @codeSigningParams

# Export the certificates
$mypwd = ConvertTo-SecureString -String "Password1234" -Force -AsPlainText
$mycert | Export-PfxCertificate -FilePath C:\demo\GCPrivateKey.pfx -Password $mypwd
$mycert | Export-Certificate -FilePath "C:\demo\GCPublicKey.cer" -Force

# Import the certificate
$importParams = @{
    FilePath          = 'C:\demo\GCPrivateKey.pfx'
    Password          = $mypwd
    CertStoreLocation = 'Cert:\LocalMachine\My'
}
Import-PfxCertificate @importParams

# Sign the policy package
$certToSignThePackage = Get-ChildItem -Path cert:\LocalMachine\My |
    Where-Object { $_.Subject-eq "CN=GCEncryptionCertificate" }
$protectParams = @{
    Path        = 'C:\demo\AuditWindowsService.zip'
    Certificate = $certToSignThePackage
    Verbose     = $true
}
Protect-GuestConfigurationPackage @protectParams

التحقق من صحة توقيع Linux

# generate gpg key
gpg --gen-key

# export public key
gpg --output public.gpg --export <email-id-used-to-generate-gpg-key>

# export private key
gpg --output private.gpg --export-secret-key <email-id-used-to-generate-gpg-key>

# Sign linux policy package
Import-Module GuestConfiguration
$protectParams = @{
    Path              = './not_installed_application_linux.zip'
    PrivateGpgKeyPath = './private.gpg'
    PublicGpgKeyPath  = './public.gpg'
    Verbose           = $true
}
Protect-GuestConfigurationPackage

معلمات Protect-GuestConfigurationPackage cmdlet:

  • Path: المسار الكامل لحزمة تكوين الجهاز.
  • الشهادة: شهادة توقيع التعليمات البرمجية لتوقيع الحزمة. يتم دعم هذه المعلمة فقط عند توقيع محتوى Windows.

متطلبات الشهادة

يتوقع عامل تكوين الجهاز أن يكون المفتاح العام للشهادة موجودا في "الناشرون الموثوق بهم" على أجهزة Windows وفي المسار /usr/local/share/ca-certificates/gc على أجهزة Linux. لكي تتحقق العقدة من المحتوى الموقَّع، قم بتثبيت المفتاح العام للشهادة على الجهاز قبل تطبيق النهج المخصص. يمكن إجراء هذه العملية باستخدام أي تقنية داخل الجهاز الظاهري أو باستخدام نهج Azure. يتوفر قالب مثال لنشر جهاز بشهادة. يجب أن يسمح نهج الوصول Key Vault لموفر موارد الحساب بالوصول إلى الشهادات أثناء عمليات النشر. للحصول على خطوات مفصلة، راجع إعداد Key Vault للأجهزة الظاهرية في Azure Resource Manager.

فيما يلي مثال لتصدير المفتاح العام من شهادة توقيع، للاستيراد إلى الجهاز.

$Cert = Get-ChildItem -Path cert:\LocalMachine\My |
    Where-Object { $_.Subject-eq "CN=mycert3" } |
    Select-Object -First 1
$Cert | Export-Certificate -FilePath "$env:temp\DscPublicKey.cer" -Force

متطلبات العلامة

بعد نشر المحتوى الخاص بك، قم بإلحاق علامة بالاسم GuestConfigPolicyCertificateValidation والقيمة enabled إلى جميع الأجهزة الظاهرية إذ يجب أن يكون توقيع التعليمات البرمجية مطلوبًا. راجع نماذج العلامة لمعرفة كيفية تسليم العلامات على نطاق واسع باستخدام نهج Azure. بمجرد وضع هذه العلامة في مكانها، يمكّن تعريف النهج الذي تم إنشاؤه باستخدام New-GuestConfigurationPolicy cmdlet المتطلبات من خلال ملحق تكوين الجهاز.