Delen via


Een Service Fabric-cluster implementeren dat gebruikmaakt van algemene certificaatnaam in plaats van vingerafdruk

Er kunnen geen twee certificaten dezelfde vingerafdruk hebben, waardoor het rollover- of beheer van clustercertificaten lastig wordt. Meerdere certificaten kunnen echter dezelfde algemene naam of hetzelfde onderwerp hebben. Een cluster met algemene namen van certificaten maakt certificaatbeheer veel eenvoudiger. In dit artikel wordt beschreven hoe u een Service Fabric-cluster implementeert om de algemene naam van het certificaat te gebruiken in plaats van de vingerafdruk van het certificaat.

Notitie

Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.

Een certificaat ophalen

Haal eerst een certificaat op van een certificeringsinstantie (CA). De algemene naam van het certificaat moet zijn voor het aangepaste domein waarvan u eigenaar bent en die u hebt gekocht bij een domeinregistrar. Bijvoorbeeld 'azureservicefabricbestpractices.com'; degenen die geen Microsoft-werknemers zijn, kunnen geen certificaten inrichten voor MS-domeinen, dus u kunt de DNS-namen van uw LB of Traffic Manager niet gebruiken als algemene namen voor uw certificaat en u moet een Azure DNS-zone inrichten als uw aangepaste domein kan worden omgezet in Azure. U wilt ook uw aangepaste domein declareren dat u bezit als 'managementEndpoint' van uw cluster als u wilt dat de portal de alias van het aangepaste domein voor uw cluster weergeeft.

Voor testdoeleinden kunt u een door een CA ondertekend certificaat ophalen van een gratis of open certificeringsinstantie.

Notitie

Zelfondertekende certificaten, inclusief certificaten die worden gegenereerd bij het implementeren van een Service Fabric-cluster in Azure Portal, worden niet ondersteund.

Het certificaat uploaden naar een sleutelkluis

In Azure wordt een Service Fabric-cluster geïmplementeerd op een virtuele-machineschaalset. Upload het certificaat naar een sleutelkluis. Wanneer het cluster wordt geïmplementeerd, wordt het certificaat geïnstalleerd op de virtuele-machineschaalset waarop het cluster wordt uitgevoerd.

Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force

$SubscriptionId  =  "<subscription ID>"

# Sign in to your Azure account and select your subscription
Login-AzAccount -SubscriptionId $SubscriptionId

$region = "southcentralus"
$KeyVaultResourceGroupName  = "mykeyvaultgroup"
$VaultName = "mykeyvault"
$certFilename = "C:\users\sfuser\myclustercert.pfx"
$certname = "myclustercert"
$Password  = "P@ssw0rd!123"

# Create new Resource Group 
New-AzResourceGroup -Name $KeyVaultResourceGroupName -Location $region

# Create the new key vault
$newKeyVault = New-AzKeyVault -VaultName $VaultName -ResourceGroupName $KeyVaultResourceGroupName -Location $region -EnabledForDeployment 
$resourceId = $newKeyVault.ResourceId 

# Add the certificate to the key vault.
$PasswordSec = ConvertTo-SecureString -String $Password -AsPlainText -Force
$KVSecret = Import-AzKeyVaultCertificate -VaultName $vaultName -Name $certName  -FilePath $certFilename -Password $PasswordSec

$CertificateThumbprint = $KVSecret.Thumbprint
$CertificateURL = $KVSecret.SecretId
$SourceVault = $resourceId
$CommName    = $KVSecret.Certificate.SubjectName.Name

Write-Host "CertificateThumbprint    :"  $CertificateThumbprint
Write-Host "CertificateURL           :"  $CertificateURL
Write-Host "SourceVault              :"  $SourceVault
Write-Host "Common Name              :"  $CommName    

Een voorbeeldsjabloon downloaden en bijwerken

In dit artikel worden de voorbeeldsjabloon en sjabloonparameters voor een beveiligd cluster met vijf knooppunten gebruikt. Download de azuredeploy.json - en azuredeploy.parameters.json-bestanden naar uw computer.

Parameterbestand bijwerken

Open eerst het azuredeploy.parameters.json-bestand in een teksteditor en voeg de volgende parameterwaarde toe:

"certificateCommonName": {
    "value": "myclustername.southcentralus.cloudapp.azure.com"
},
"certificateIssuerThumbprint": {
    "value": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},

Stel vervolgens de parameterwaarden certificateCommonName, sourceVaultValue en certificateUrlValue in op de waarden die worden geretourneerd door het voorgaande script:

"certificateCommonName": {
    "value": "myclustername.southcentralus.cloudapp.azure.com"
},
"certificateIssuerThumbprint": {
    "value": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
"sourceVaultValue": {
  "value": "/subscriptions/<subscription>/resourceGroups/testvaultgroup/providers/Microsoft.KeyVault/vaults/testvault"
},
"certificateUrlValue": {
  "value": "https://testvault.vault.azure.net:443/secrets/testcert/5c882b7192224447bbaecd5a46962655"
},

Het sjabloonbestand bijwerken

Open vervolgens het azuredeploy.json bestand in een teksteditor en breng drie updates aan om algemene naam van het certificaat te ondersteunen.

  1. Voeg in de sectie parameters een parameter certificateCommonName toe:

    "certificateCommonName": {
      "type": "string",
      "metadata": {
        "description": "Certificate Commonname"
      }
    },
    "certificateIssuerThumbprint": {
      "type": "string",
      "metadata": {
        "description": "Certificate Authority Issuer Thumpbrint for Commonname cert"
      }
    },
    

    Overweeg ook om het certificaatThumbprint te verwijderen. Mogelijk is het niet meer nodig.

  2. Stel de waarde van de variabele sfrpApiVersion in op '2018-02-01':

    "sfrpApiVersion": "2018-02-01",
    
  3. Werk in de resource Microsoft.Compute/virtualMachineScaleSets de extensie van de virtuele machine bij om de algemene naam in certificaatinstellingen te gebruiken in plaats van de vingerafdruk. In virtualMachineProfile-extensionProfile-extensions-properties-settings-certificate>>>>>, add

       "commonNames": [
        "[parameters('certificateCommonName')]"
       ],
    

    en verwijder "thumbprint": "[parameters('certificateThumbprint')]",.

    "virtualMachineProfile": {
      "extensionProfile": {
        "extensions": [
          {
            "name": "[concat('ServiceFabricNodeVmExt','_vmNodeType0Name')]",
            "properties": {
              "type": "ServiceFabricNode",
              "autoUpgradeMinorVersion": true,
              "protectedSettings": {
                "StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
                "StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('supportLogStorageAccountName')),'2015-05-01-preview').key2]"
              },
              "publisher": "Microsoft.Azure.ServiceFabric",
              "settings": {
                "clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
                "nodeTypeRef": "[variables('vmNodeType0Name')]",
                "dataPath": "D:\\SvcFab",
                "durabilityLevel": "Bronze",
                "enableParallelJobs": true,
                "nicPrefixOverride": "[variables('subnet0Prefix')]",
                "certificate": {
                  "commonNames": [
                     "[parameters('certificateCommonName')]"
                  ],
                  "x509StoreName": "[parameters('certificateStoreValue')]"
                }
              },
              "typeHandlerVersion": "1.0"
            }
          },
    
  4. Werk in de resource Microsoft.ServiceFabric/clusters de API-versie bij naar 2018-02-01. Voeg ook een certificateCommonNames-instelling toe met een commonNames-eigenschap en verwijder de certificaatinstelling (met de vingerafdrukeigenschap) zoals in het volgende voorbeeld:

    {
        "apiVersion": "2018-02-01",
        "type": "Microsoft.ServiceFabric/clusters",
        "name": "[parameters('clusterName')]",
        "location": "[parameters('clusterLocation')]",
        "dependsOn": [
        "[concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName'))]"
        ],
        "properties": {
        "addonFeatures": [
            "DnsService",
            "RepairManager"
        ],        
        "certificateCommonNames": {
            "commonNames": [
            {
                "certificateCommonName": "[parameters('certificateCommonName')]",
                "certificateIssuerThumbprint": "[parameters('certificateIssuerThumbprint')]"
            }
            ],
            "x509StoreName": "[parameters('certificateStoreValue')]"
        },
        ...
    

    Notitie

    Met het veld certificateIssuerThumbprint kunt u de verwachte verleners van certificaten opgeven met een bepaalde algemene naam voor het onderwerp. Dit veld accepteert een door komma's gescheiden opsomming van SHA1-vingerafdrukken. Let op: dit is een versterking van de certificaatvalidatie. In het geval dat de verlener niet is opgegeven of leeg is, wordt het certificaat geaccepteerd voor verificatie als de keten kan worden gebouwd en uiteindelijk in een basis wordt vertrouwd door de validator. Als de verlener is opgegeven, wordt het certificaat geaccepteerd als de vingerafdruk van de directe uitgever overeenkomt met een van de waarden die in dit veld zijn opgegeven, ongeacht of de basis wordt vertrouwd of niet. Houd er rekening mee dat een PKI verschillende certificeringsinstanties kan gebruiken om certificaten uit te geven voor hetzelfde onderwerp, en daarom is het belangrijk om alle verwachte vingerafdruk van verleners voor een bepaald onderwerp op te geven.

    Het opgeven van de verlener wordt beschouwd als een best practice; terwijl het weglaten blijft werken , voor certificaten die zijn gekoppeld aan een vertrouwde basis, heeft dit gedrag beperkingen en kan in de nabije toekomst worden uitgefaseerd. Houd er ook rekening mee dat clusters die zijn geïmplementeerd in Azure en zijn beveiligd met X509-certificaten die zijn uitgegeven door een persoonlijke PKI en die door het onderwerp zijn gedeclareerd, mogelijk niet kunnen worden gevalideerd door de Azure Service Fabric-service (voor cluster-naar-service-communicatie), als het certificaatbeleid van de PKI niet kan worden gedetecteerd, beschikbaar en toegankelijk is.

De bijgewerkte sjabloon implementeren

Implementeer de bijgewerkte sjabloon opnieuw nadat u de wijzigingen hebt aangebracht.

# Variables.
$groupname = "testclustergroup"
$clusterloc="southcentralus"  
$id="<subscription ID"

# Sign in to your Azure account and select your subscription
Login-AzAccount -SubscriptionId $id 

# Create a new resource group and deploy the cluster.
New-AzResourceGroup -Name $groupname -Location $clusterloc

New-AzResourceGroupDeployment -ResourceGroupName $groupname -TemplateParameterFile "C:\temp\cluster\AzureDeploy.Parameters.json" -TemplateFile "C:\temp\cluster\AzureDeploy.json" -Verbose

Volgende stappen