Je dois télécharger et installer environ 50 listes CRL une fois par semaine et les installer sur plusieurs serveurs Windows. Le téléchargement est la partie facile, est-ce qu'il y a un moyen que je pourrais script le processus d'importation CRL?Installation par programme de la liste de révocation de certificats (CRL)
Répondre
Je ne connais pas un moyen de le faire via un script. Pouvez-vous écrire du code C? Si je comprends ce que vous voulez faire, vous utiliserez la fonction CryptUiWizImport et la structure CRYPTUI_WIZ_IMPORT_SRC_INFO.
est ici un sample of code that installs a Cert; l'importation CRL correspondante est similaire.
Addendum:
This post indique que les API Win32 (tels que CryptUiWizImport) ne sont pas directement accessibles à partir de PowerShell, et décrit ensuite une solution de contournement possible: à partir du script PowerShell, générer dynamiquement et compiler le code C# qui fait la P/Invoke stuff, puis exécutez l'assembly résultant. Cela vous permettrait de faire le CryptUiWizImport strictement à partir d'un script PowerShell, même si ce serait un peu exotique.
J'ai enveloppé la fonction CryptUIWizImport en tant qu'application de console C# et cela fonctionne comme un charme pour l'installation des certificats et des CRL. Merci beaucoup! – Goyuix
Vous étiez intéressé à poster la source, pour aider la prochaine personne? – Cheeso
Je serais vraiment intéressé par la source ... car j'ai exactement le même problème. – Mephisztoe
En Powershell il est un fournisseur Cert:
qui représente le magasin de certificats. La manipulation s'effectue à l'aide des cmdlets standard, ce qui vous permet d'intégrer une liste de révocation quelque part. Je n'en sais juste pas assez sur la manière dont Windows traite les certificats pour les aider ici.
Hm. Y at-il une raison de ne pas utiliser l'utilitaire certutil.exe? Je peux importer une liste de révocation de certificats dans le magasin approprié en exécutant la commande suivante:
certutil -addstore CA <FileName>.crl
certutil ne fait pas partie d'une installation standard. Je crois que c'est seulement installé quand les services de certificat ont été installés (bien que je puisse me tromper). – Goyuix
Voici ma source finale (légèrement frotté au public) - mais devrait fonctionner. Je ne changerai pas la réponse acceptée, mais j'espère que cela aidera (tout comme la question et les réponses!).
Remarque: Cela importera à la fois une liste de révocation de certificats ou un certificat ordinaire dans la banque de racines de confiance LOCAL MACHINE. Changer le CERT_SYSTEM_STORE_LOCAL_MACHINE
ci-dessous à CERT_SYSTEM_STORE_CURRENT_USER
dans l'appel CertOpenStore va le changer pour travailler pour le magasin de l'utilisateur actuel.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace ConsoleApplication2
{
class Program
{
public struct CRYPTUI_WIZ_IMPORT_SRC_INFO
{
public Int32 dwSize;
public Int32 dwSubjectChoice;
[MarshalAs(UnmanagedType.LPWStr)]public String pwszFileName;
public Int32 dwFlags;
[MarshalAs(UnmanagedType.LPWStr)]public String pwszPassword;
}
[DllImport("CryptUI.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern Boolean CryptUIWizImport(
Int32 dwFlags,
IntPtr hwndParent,
IntPtr pwszWizardTitle,
ref CRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc,
IntPtr hDestCertStore
);
[DllImport("CRYPT32.DLL", CharSet = CharSet.Auto, SetLastError = true)]
public static extern IntPtr CertOpenStore(
int storeProvider,
int encodingType,
IntPtr hcryptProv,
int flags,
String pvPara
);
public const Int32 CRYPTUI_WIZ_IMPORT_SUBJECT_FILE = 1;
public const Int32 CRYPT_EXPORTABLE = 0x00000001;
public const Int32 CRYPT_USER_PROTECTED = 0x00000002;
public const Int32 CRYPTUI_WIZ_NO_UI = 0x0001;
private static int CERT_STORE_PROV_SYSTEM = 10;
private static int CERT_SYSTEM_STORE_CURRENT_USER = (1 << 16);
private static int CERT_SYSTEM_STORE_LOCAL_MACHINE = (2 << 16);
static void Main(string[] args)
{
if (args.Length != 1)
{
Console.WriteLine("Usage: certimp.exe list.crl");
Environment.ExitCode = 1;
}
else
{
IntPtr hLocalCertStore = CertOpenStore(
CERT_STORE_PROV_SYSTEM,
0,
IntPtr.Zero,
CERT_SYSTEM_STORE_LOCAL_MACHINE,
"ROOT"
);
CRYPTUI_WIZ_IMPORT_SRC_INFO importSrc = new CRYPTUI_WIZ_IMPORT_SRC_INFO();
importSrc.dwSize = Marshal.SizeOf(importSrc);
importSrc.dwSubjectChoice = CRYPTUI_WIZ_IMPORT_SUBJECT_FILE;
importSrc.pwszFileName = args[0];
importSrc.pwszPassword = null;
importSrc.dwFlags = CRYPT_EXPORTABLE | CRYPT_USER_PROTECTED;
if (!CryptUIWizImport(
CRYPTUI_WIZ_NO_UI,
IntPtr.Zero,
IntPtr.Zero,
ref importSrc,
hLocalCertStore
))
{
Console.WriteLine("CryptUIWizImport error " + Marshal.GetLastWin32Error());
Environment.ExitCode = -1;
}
}
}
}
}
Remarque: Vous pouvez également créer un X509Store, l'ouvrir() et transmettre sa propriété StoreHandle en tant que dernier argument à CryptUIWizImport. – voetsjoeba
Remarque: Malgré ce que dit la documentation, aucun des drapeaux CRYPTUI_WIZ_NO_UI n'empêche une boîte de dialogue contextuelle demandant "Voulez-vous remplacer la liste de révocation de certificats en cours?" lorsque le magasin cible contient déjà une liste de révocation de certificats avec une durée de validité identique ou plus récente. (Testé sur Win2008 R2) – voetsjoeba
Remarque: Pour une manière plus directe d'ajouter une liste de révocation de certificats à un magasin de certificats Windows que (éventuellement) passer par une interface utilisateur, vous pouvez appeler la fonction CertAddCRLContextToStore Win32 à partir de crypt32.dll. – voetsjoeba
- 1. Modification de la liste modifiable par programme
- 2. Annulation d'une installation SQL Server Express lancée par programme
- 3. Magasin de certificats Windows
- 4. Édition par programme de la source Python
- 5. Déplacement de la souris par programme
- 6. Modifier la résolution de l'écran par programme?
- 7. Ajouter des éléments à la liste par programme
- 8. Modification de la sécurité sur les certificats installés
- 9. Comment réorganiser par programme des mappages de gestionnaire dans IIS7?
- 10. Ajout de tâches par programme dans la taskList dans sharepoint
- 11. Certificats de SmartCard en C#
- 12. Modification par programme de la propriété d'identifiant de UIBarButtonItem
- 13. Incorporation par programme de la base de données Java h2
- 14. Activation par programme de NSMenuItem
- 15. Liaison de données par programme
- 16. Augmenter par programme les privilèges de l'utilisateur
- 17. Vue par défaut de l'élément de liste par défaut Sharepoint
- 18. Définition de DataContext avec SelectedItem par programme
- 19. Comment actualiser une liaison de la source d'éléments d'une liste déroulante par programme?
- 20. Comment ajouter par programme des éléments à la liste/collection/collection de CollectionEditor? [modifié]
- 21. Outlook/Exchange - comment exporter par programme des utilisateurs dans la liste de distribution?
- 22. Obtenir la liste des voix de synthèse vocale Mac par programme?
- 23. Modification de l'icône de l'extension par programme
- 24. Comment désactiver la révocation de certificat pour le client d'un service WCF?
- 25. Désactiver la validation de la demande par programme
- 26. Problème de compréhension de la vérification de la chaîne de certificats SSL
- 27. Installation de Java Web Start pilotée
- 28. Installation personnalisée de Firebird
- 29. Comment obtenir l'ARP pour exécuter l'application d'amorçage de mon programme d'installation pour une installation de modification?
- 30. Installation de Xampp?
Quand vous dites que le téléchargement est la partie la plus facile? Pouvez-vous partager votre technique que vous avez utilisée pour accomplir ceci. Merci – Raj
@Raj à peu près chaque autorité de certification ou signataire publiera un emplacement CRL dans le cadre des métadonnées de certificat. Ouvrez le certificat en question et recherchez un champ appelé "Points de distribution CRL". Vraiment, il s'agit d'une question générale que vous devriez poser non seulement comme commentaire. – Goyuix
Oui, je connais les points de distribution comme champ dans le certificat. Actuellement, j'utilise les fonctions de récupération d'objets distants, [CryptoAPI] pour récupérer des CDP. Je comprends également que si vous copiez simplement l'URL et que vous la dépassez dans le navigateur, la CRL sera téléchargée aussi. La raison pour laquelle je vous ai demandé comme commentaire est que vous avez mentionné que la récupération de CRL est la partie facile, donc j'ai supposé que vous avez quelque utilité ou quelque chose qui fera ceci pour vous. Mais évidemment, mon hypothèse était fausse. Merci d'avoir répondu. – Raj