0

J'ai besoin d'importer les certificats clients X509 de mes partenaires (avec la chaîne complète) sur tous mes nœuds de cluster de peut valider chaque demande entrante et authentifier chaque partenaire en fonction du certificat client. Cela signifie que lorsque j'importe un certificat client, je souhaite que le certificat intermédiaire associé (qui a signé le certificat client) et le certificat racine associé (qui a signé le certificat intermédiaire) soient automatiquement installés dans les magasins de certificats appropriés tels que 'Autorités de certification intermédiaires' et ' Autorités de certification racines de confiance dans le magasin de machines local.Importer un certificat client (avec chaîne) sur tous les nœuds du cluster de matrice de service pour la communication avec l'utilisateur

La raison pour laquelle je souhaite que la chaîne entière soit stockée dans des emplacements appropriés dans le magasin de certificats est parce que j'ai l'intention de valider le certificat client entrant en utilisant X509Chain dans l'espace de noms System.Security.Cryptography.X509Certificates dans mon composant de pipeline d'authentification de service. Le X509Chain semble dépendre du magasin «Trusted Root Certification Authorities» pour la validation complète du certificat racine.

Il existe de nombreuses informations sur la façon de sécuriser a) un nœud à un nœud et b) de gérer une communication client à cluster comme ceci: https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-cluster-security. Cependant, il n'y a pas beaucoup d'informations sur la sécurisation de la communication entre les services (hébergés dans le cluster Fabric) et les utilisateurs finaux utilisant des certificats clients. Si j'ai manqué cette information, s'il vous plaît faites le moi savoir.

Je n'ai pas beaucoup de certificats clients partenaires à configurer. Le nombre de partenaires est bien dans la plage gérable. De même, je ne peux pas recréer le cluster chaque fois qu'un nouveau certificat client partenaire est ajouté.

  1. Ai-je besoin de faire levier /ServiceManifest/CodePackage/élément SetupEntryPoint dans fichier SerivceManifest.xml et écrire du code personnalisé pour importer des certificats partenaires (qui sont stockés dans la voûte clé ou bien où)? Quels sont les avantages et les inconvénients de cette approche?
  2. Ou existe-t-il un autre moyen facile d'importer des certificats de partenaire qui satisfont toutes mes exigences? Si alors, veuillez détailler les étapes pour y parvenir.

Mise à jour: J'ai essayé la méthode proposée d'ajouter des certificats clients comme décrit ci-dessus dans la link vertu de l'article osProfile. Cela semblait assez simple.

Pour être en mesure de faire cela, j'ai d'abord besoin de pousser les certificats connexes (en tant que secrets) dans le coffre-fort de clé associé comme décrit au link. Dans cet article, il décrit (dans la section "Mise en forme des certificats pour l'utilisation du fournisseur de ressources Azure") comment formater les informations de certificat dans un format JSON avant de les stocker en tant que secret dans le coffre-fort. Ce JSON a le format suivant pour le téléchargement octets de fichiers PFX:

{ 
    "dataType": "pfx", 
    "data": "base64-encoded-cert-bytes-go-here", 
    "password": "pfx-password" 
} 

Cependant, puisque je traite avec la partie publique des certificats clients, je ne traite pas avec des fichiers PFX mais uniquement les fichiers cer base64 dans les fenêtres (qui sont apparemment identiques à fichiers pem ailleurs). Et il n'y a pas de mot de passe pour la partie publique des certificats.Alors j'ai changé le format JSON suivant:

{ 
    "dataType": "pem", 
    "data": "base64-encoded-cert-bytes-go-here" 
} 

Quand j'invoquais Nouvelle-AzureRmResourceGroupDeployment avec le modèle lié ARM avec des modifications appropriées dans la section osProfile, je reçois l'erreur suivante:

New-AzureRmResourceGroupDeployment : 11:08:11 PM - Resource Microsoft.Compute/virtualMachineScaleSets 'nt1vm' failed with message '{ 
    "status": "Failed", 
    "error": { 
    "code": "ResourceDeploymentFailure", 
    "message": "The resource operation completed with terminal provisioning state 'Failed'.", 
    "details": [ 
     { 
     "code": "CertificateImproperlyFormatted", 
     "message": "The secret's JSON representation retrieved from 
https://xxxx.vault.azure.net/secrets/ClientCert/ba6855f9866644ccb4c436bb2b7675d3 has data type pem which is not 
an accepted certificate type." 
     } 
    ] 
    } 
}' 

J'ai essayé également d'utiliser Le type de données 'cer' tel qu'illustré ci-dessous:

{ 
    "dataType": "cer", 
    "data": "base64-encoded-cert-bytes-go-here" 
} 

Cela a également entraîné la même erreur.

Qu'est-ce que je fais mal?

Répondre

0

Je considérerais l'importation d'un certificat sur tous les nœuds comme décrit here. (Étape 5) Vous pouvez ajouter plusieurs certificats dans des magasins spécifiés en utilisant des modèles ARM, qui référencent Azure Key Vault. Utilisez le niveau de durabilité Silver/Gold pour maintenir le cluster en cours de redéploiement.

Faites attention avec les certificats adding dans le magasin de confiance. Si un certificat est créé par une autorité de certification approuvée, il n'est pas nécessaire de mettre dans le magasin des autorités racines de confiance (car elles sont déjà présentes).

Validez les certificats clients à l'aide de X509Certificate2. Verify, sauf si chaque client a sa propre instance de service avec laquelle communiquer.

+0

1) Je comprends les dangers de placer des certificats dans le magasin de confiance. 2) Si vous ajoutez les certificats via ARM, que se passe-t-il lorsque j'ai besoin d'ajouter un cert pendant que le cluster est fonctionnel? – Raghu

+0

c'est ce que le niveau argent/or est pour, vos nœuds vmss seront redémarrés séquentiellement – LoekD

+0

LoekD: Pourriez-vous s'il vous plaît jeter un oeil à la partie mise à jour de ma question? – Raghu