Sdílet prostřednictvím


Nasazení clusteru Service Fabric, který místo kryptografického otisku používá běžný název certifikátu

Žádné dva certifikáty nemohou mít stejný kryptografický otisk, což ztěžuje vrácení nebo správu certifikátů clusteru. Několik certifikátů ale může mít stejný běžný název nebo předmět. Cluster, který používá běžné názvy certifikátů, usnadňuje správu certifikátů. Tento článek popisuje, jak nasadit cluster Service Fabric tak, aby místo kryptografického otisku certifikátu používal běžný název certifikátu.

Poznámka:

Při práci s Azure doporučujeme používat modul Azure Az PowerShellu. Pokud chcete začít, přečtěte si téma Instalace Azure PowerShellu. Informace o tom, jak migrovat na modul Az PowerShell, najdete v tématu Migrace Azure PowerShellu z AzureRM na Az.

Získání certifikátu

Nejprve získejte certifikát od certifikační autority (CA). Běžný název certifikátu by měl být pro vlastní doménu, kterou vlastníte, a zakoupený od doménového registrátora. Například "azureservicefabricbestpractices.com"; ti, kteří nejsou zaměstnanci Microsoftu, nemůžou zřizovat certifikáty pro domény MS, takže nemůžete použít názvy DNS vašeho nástroje pro vyrovnávání zatížení nebo Traffic Manager jako běžné názvy vašeho certifikátu a pokud se má vaše vlastní doména v Azure přeložit, budete muset zřídit zónu Azure DNS. Vlastní doménu, kterou vlastníte, budete chtít deklarovat také jako "managementEndpoint" vašeho clusteru, pokud chcete, aby portál odrážel alias vlastní domény pro váš cluster.

Pro účely testování můžete získat certifikát podepsaný certifikační autoritou od bezplatné nebo otevřené certifikační autority.

Poznámka:

Certifikáty podepsané svým držitelem, včetně certifikátů generovaných při nasazování clusteru Service Fabric na webu Azure Portal, se nepodporují.

Nahrání certifikátu do trezoru klíčů

V Azure je cluster Service Fabric nasazený ve škálovací sadě virtuálních počítačů. Nahrajte certifikát do trezoru klíčů. Když se cluster nasadí, certifikát se nainstaluje do škálovací sady virtuálních počítačů, na které cluster běží.

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    

Stažení a aktualizace ukázkové šablony

Tento článek používá ukázkovou šablonu a parametry šablony zabezpečeného clusteru s 5 uzly. Stáhněte si soubory azuredeploy.json a azuredeploy.parameters.json do počítače.

Aktualizace souboru parametrů

Nejprve otevřete soubor azuredeploy.parameters.json v textovém editoru a přidejte následující hodnotu parametru:

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

Dále nastavte hodnoty parametrů certificateCommonName, sourceVaultValue a certificateUrlValue na hodnoty vrácené předchozím skriptem:

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

Aktualizace souboru šablony

Dále otevřete soubor azuredeploy.json v textovém editoru a proveďte tři aktualizace pro podporu společného názvu certifikátu.

  1. V části parametry přidejte parametr certificateCommonName:

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

    Zvažte také odebrání certifikátuThumbprint, nemusí už být potřeba.

  2. Nastavte hodnotu proměnné sfrpApiVersion na "2018-02-01":

    "sfrpApiVersion": "2018-02-01",
    
  3. V prostředku Microsoft.Compute/virtualMachineScaleSets aktualizujte rozšíření virtuálního počítače tak, aby místo kryptografického otisku používalo běžný název v nastavení certifikátu. V souboru virtualMachineProfile-extensionProfile-extensions-properties-settings-certificate>>>>> přidejte

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

    a odeberte "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. V prostředku Microsoft.ServiceFabric/clusters aktualizujte verzi rozhraní API na 2018-02-01. Přidejte také nastavení certificateCommonNames s vlastností commonNames a odeberte nastavení certifikátu (s vlastností kryptografického otisku), jak je znázorněno v následujícím příkladu:

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

    Poznámka:

    Pole certificateIssuerThumbprint umožňuje zadat očekávané vystavitele certifikátů s daným běžným názvem subjektu. Toto pole přijímá čárkami oddělený výčet kryptografických otisků SHA1. Všimněte si, že se jedná o posílení ověření certifikátu – v případě, že vystavitel není zadaný nebo prázdný, certifikát se přijme pro ověření, pokud je možné sestavit jeho řetěz, a skončí v kořenovém certifikátu důvěryhodném validátorem. Pokud je vystavitel zadán, certifikát bude přijat, pokud kryptografický otisk jeho přímého vystavitele odpovídá některé z hodnot zadaných v tomto poli – bez ohledu na to, jestli je kořen důvěryhodný nebo ne. Upozorňujeme, že infrastruktura veřejných klíčů může používat různé certifikační autority k vydávání certifikátů pro stejný subjekt, a proto je důležité zadat všechny očekávané kryptografické otisky vystavitele pro daný subjekt.

    Určení vystavitele se považuje za osvědčený postup; při vynechání bude dál fungovat – pro řetězení certifikátů až do důvěryhodného kořenového adresáře – toto chování má omezení a může být v blízké budoucnosti ukončeno. Všimněte si také, že clustery nasazené v Azure a zabezpečené pomocí certifikátů X509 vydaných privátní pkI a deklarované subjektem nemusí být možné ověřit službou Azure Service Fabric (pro komunikaci mezi clustery), pokud zásady certifikátu PKI nejsou zjistitelné, dostupné a přístupné.

Nasazení aktualizované šablony

Po provedení změn znovu nasaďte aktualizovanou šablonu.

# 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

Další kroky