5

Devo installare un certificato in un cluster di Service Fabric che ho creato utilizzando un modello ARM. Sono stato in grado di installare un certificato con la chiave privata con il seguente comando aiutante PowerShell:Installare un certificato in un cluster Fabric Service senza una chiave privata

> Invoke-AddCertToKeyVault 

https://github.com/ChackDan/Service-Fabric/tree/master/Scripts/ServiceFabricRPHelpers

Una volta che questo certificato è in Azure Key Vault posso modificare il mio modello ARM per installare il certificato automaticamente i nodi del cluster:

"osProfile": { 
    "secrets": [ 
     { 
      "sourceVault": { 
       "id": "[parameters('vaultId')]" 
      }, 
      "vaultCertificates": [ 
       { 
        "certificateStore": "My", 
        "certificateUrl": "https://mykeyvault.vault.azure.net:443/secrets/fabrikam/9d1adf93371732434" 
       } 
      ]   
     } 
    ] 
} 

il problema è che l'Invoke-AddCertToKeyVault si aspetta me per fornire un file pfx supponendo che ho la chiave privata.

Lo script sta creando il seguente JSON blob:

$jsonBlob = @{ 
    data = $base64 
    dataType = 'pfx' 
    password = $Password 
} | ConvertTo-Json 

ho modificato lo script per rimuovere la password e cambiare dataType a 'cer', ma quando ho schierato il modello in Azure ha detto che il dataType non era più valido .

Come posso distribuire un certificato in un fabric fabric del servizio che non include la chiave privata?

risposta

3

1) SF non interessa se hai usato .cer o .pfx. Tutte le esigenze di SF sono che il certificato sia disponibile nel negozio di certificati locali nella VM.

2) Il problema che si sta verificando è che l'agente CRP, che installa il certificato da keyvault al negozio di certificati locale nella VM, supporta solo .pfx oggi.

Così ora si hanno due opzioni

1) Creare un file pfx senza una chiave privata e usarlo

Ecco come fare tramite C# (o powershell) caricare il certificato in un oggetto X509Certificate2 quindi utilizzare il metodo di esportazione per X509ContentType = Pfx https://msdn.microsoft.com/en-us/library/24ww6yzk(v=vs.110).aspx

2) Distribuire l'cer utilizzando un interno VM personalizzato. Poiché .cer è solo un certificato di chiave pubblica, non dovrebbero esserci requisiti di privacy. Puoi semplicemente caricare il certificato in un BLOB e avere un'estensione di script personalizzata scaricarlo e installarlo sulla macchina.