Share via


Distribuera ett Service Fabric-kluster som använder certifikatets eget namn i stället för tumavtryck

Inga två certifikat kan ha samma tumavtryck, vilket gör det svårt att återställa eller hantera klustercertifikat. Flera certifikat kan dock ha samma eget namn eller ämne. Ett kluster med hjälp av vanliga certifikatnamn gör certifikathanteringen mycket enklare. I den här artikeln beskrivs hur du distribuerar ett Service Fabric-kluster för att använda certifikatets eget namn i stället för tumavtrycket för certifikatet.

Anteckning

Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. Information om hur du migrerar till Az PowerShell-modulen finns i artikeln om att migrera Azure PowerShell från AzureRM till Az.

Hämta ett certifikat

Hämta först ett certifikat från en certifikatutfärdare (CA). Certifikatets gemensamma namn ska vara för den anpassade domän som du äger och som köpts från en domänregistrator. Till exempel "azureservicefabricbestpractices.com"; de som inte är Microsoft-anställda kan inte etablera certifikat för MS-domäner, så du kan inte använda DNS-namnen på din lastbalanserare eller Traffic Manager som vanliga namn för ditt certifikat, och du måste etablera en Azure DNS-zon om din anpassade domän ska kunna matchas i Azure. Du vill också deklarera din anpassade domän som ditt klusters "managementEndpoint" om du vill att portalen ska återspegla det anpassade domänaliaset för klustret.

I testsyfte kan du få ett CA-signerat certifikat från en kostnadsfri eller öppen certifikatutfärdare.

Anteckning

Självsignerade certifikat, inklusive de som genereras när du distribuerar ett Service Fabric-kluster i Azure Portal, stöds inte.

Ladda upp certifikatet till ett nyckelvalv

I Azure distribueras ett Service Fabric-kluster på en VM-skalningsuppsättning. Ladda upp certifikatet till ett nyckelvalv. När klustret distribueras installeras certifikatet på vm-skalningsuppsättningen som klustret körs på.

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    

Ladda ned och uppdatera en exempelmall

I den här artikeln används mallen för exempel på säkra kluster och mallparametrar med 5 noder . Ladda ned filerna azuredeploy.json och azuredeploy.parameters.json till datorn.

Uppdatera parameterfilen

Öppna först filen azuredeploy.parameters.json i en textredigerare och lägg till följande parametervärde:

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

Ange sedan parametervärdena certificateCommonName, sourceVaultValue och certificateUrlValue till de värden som returnerades av föregående skript:

"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"
},

Uppdatera mallfilen

Öppna sedan filen azuredeploy.json i en textredigerare och gör tre uppdateringar för att stödja certifikatets eget namn.

  1. I avsnittet parametrar lägger du till parametern certificateCommonName :

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

    Överväg också att ta bort certifikatetThumbprint. Det kanske inte längre behövs.

  2. Ange värdet för variabeln sfrpApiVersion till "2018-02-01":

    "sfrpApiVersion": "2018-02-01",
    
  3. I resursen Microsoft.Compute/virtualMachineScaleSets uppdaterar du tillägget för virtuella datorer så att det använder det gemensamma namnet i certifikatinställningarna i stället för tumavtrycket. I virtualMachineProfile-extensionProfile-extensions-properties-settings-certificate>>>>> lägger du till

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

    och ta bort "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. I resursen Microsoft.ServiceFabric/clusters uppdaterar du API-versionen till "2018-02-01". Lägg även till en certificateCommonNames-inställning med en commonNames-egenskap och ta bort certifikatinställningen (med tumavtrycksegenskapen) som i följande exempel:

    {
        "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')]"
        },
        ...
    

    Anteckning

    Fältet "certificateIssuerThumbprint" gör det möjligt att ange förväntade utfärdare av certifikat med ett angivet ämnesnamn. Det här fältet accepterar en kommaavgränsad uppräkning av SHA1-tumavtryck. Observera att detta är en förstärkning av certifikatverifieringen – om utfärdaren inte har angetts eller är tom godkänns certifikatet för autentisering om dess kedja kan skapas och hamnar i en rot som är betrodd av validatorn. Om utfärdaren anges godkänns certifikatet om tumavtrycket för dess direkta utfärdare matchar något av de värden som anges i det här fältet – oavsett om roten är betrodd eller inte. Observera att en PKI kan använda olika certifikatutfärdare för att utfärda certifikat för samma ämne, så det är viktigt att ange alla förväntade tumavtryck för utfärdaren för ett visst ämne.

    Det är bästa praxis att ange utfärdaren. även om du utelämnar det kommer det att fortsätta att fungera - för certifikat som kedjar upp till en betrodd rot - har det här beteendet begränsningar och kan fasas ut inom en snar framtid. Observera också att kluster som distribueras i Azure och skyddas med X509-certifikat som utfärdats av en privat PKI och deklarerats av ämne kanske inte kan verifieras av Azure Service Fabric-tjänsten (för kommunikation mellan kluster och tjänster), om PKI:s certifikatprincip inte kan identifieras, är tillgänglig och tillgänglig.

Distribuera den uppdaterade mallen

Distribuera om den uppdaterade mallen när du har gjort ändringarna.

# 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

Nästa steg