2 votes

Comment obtenir le certificat secret depuis C# dans une application Service Fabric sur Unix ?

J'ai ce qui suit dans mon applicationmanifest.xml :

Sur les clusters Windows, j'ai utilisé l'empreinte pour effectuer une recherche dans LocalMachine sans problèmes.

X509Certificate2 cert = X509.LocalMachine.My.Thumbprint.Find(options.Thumbprint, validOnly: false).FirstOrDefault();

Sans problèmes.

Lors du déploiement sur un cluster Unix, j'ai rencontré l'exception suivante :

 Unix LocalMachine X509Store is limited to the Root and CertificateAuthority stores. Unix LocalMachine X509Store is limited to the Root and CertificateAuthority stores.

Je comprends ce qu'il me dit ; je ne peux pas utiliser LocalMachine. Mais juste pour être sûr, comment puis-je trouver le certificat X509Certificate2 sur les machines Unix? (Est-ce une chose .NET Core ou Service Fabric?)

1voto

Diego Mendes Points 136

À partir de la docs:

Service Fabric s'attend généralement à ce que les certificats X.509 soient présents dans le répertoire /var/lib/sfcerts sur les nœuds de cluster Linux. Cela est vrai pour les certificats de cluster, les certificats clients, etc. Dans certains cas, vous pouvez spécifier un emplacement autre que le dossier var/lib/sfcerts pour les certificats.

et..

Les certificats spécifiés dans le manifeste de l'application, par exemple, à travers les éléments SecretsCertificate ou EndpointCertificate, doivent être présents dans le répertoire /var/lib/sfcerts. Les éléments utilisés pour spécifier les certificats dans le manifeste de l'application n'acceptent pas d'attribut de chemin, donc les certificats doivent être présents dans le répertoire par défaut. Ces éléments acceptent un attribut X509StoreName facultatif. La valeur par défaut est "My", ce qui pointe vers le répertoire /var/lib/sfcerts sur les nœuds Linux. Toute autre valeur est indéfinie sur un cluster Linux. Nous vous recommandons d'omettre l'attribut X509StoreName pour les applications qui s'exécutent sur des clusters Linux.

Je n'ai pas utilisé SF Linux depuis un moment, donc je n'ai aucun script ou extrait pour aider, mais les docs devraient être simples.

0voto

crimbo Points 572

Les documentation sur les certificats Service Fabric Linux sont incorrectes - du moins pour un service .NET Core, StoreLocation.LocalMachine + StoreName.My ne fournit pas d'accès aux fichiers de certificats situés à /var/lib/sfcerts. La documentation peut être correcte pour les certificats utilisés par l'infrastructure Service Fabric, mais elle est trompeuse et simplement fausse pour les services SF qui nécessitent un accès aux certificats.

Le document .NET Core qui sert de spécification publique pour le support de X509Store sur Linux indique explicitement qu'un new X509Store(StoreName.My, StoreLocation.LocalMachine) entraîne une CryptographicException, ce qui est conforme au message original et à mon expérience.

Vous devrez donc trouver une approche alternative pour obtenir les certificats. Deux approches me semblent viables :

  1. Copiez les fichiers de certificats vers un emplacement où le compte de service SF peut les récupérer au démarrage, et les lire directement, ou les écrire dans new X509Store(StoreName.My, StoreLocation.CurrentUser) pour une utilisation ultérieure. Vous pouvez utiliser un SetupEntryPoint qui s'exécute en tant qu'utilisateur avec AccountType="LocalSystem" pour exécuter le SetupEntryPoint en tant que root sur Linux. root est nécessaire pour lire les fichiers de /var/lib/sfcerts.

  2. Obtenez le certificat à partir d'une autre source, par exemple KeyVault. Pour sécuriser cela, vous voudrez probablement utiliser le nouveau support de Service Fabric pour l'identité de service gérée.

En résumé : Il n'est certainement pas trivial d'obtenir des certificats à partir d'un service Service Fabric sur Linux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X