• Accueil
  • Blog
  • Rédiger des gestionnaires d'événements pour le système de gestion des certificats (CMS)

Rédiger des gestionnaires d'événements pour le système de gestion des certificats (CMS)

Le système de gestion des certificats (CMS), anciennement connu sous le nom d'outil de rapport sur les certificats (CRT), tel que référencé ci-dessous, fournit des capacités de rapport et de notification à une infrastructure à clé publique existante (PKI). Les rapports et les notifications sont hautement personnalisables en ce qui concerne le contenu, le calendrier et le public. En outre, des "gestionnaires de plugins d'événements" personnalisés peuvent être créés et enregistrés pour exécuter toute fonctionnalité souhaitée lorsque des événements prédéfinis se produisent. Deux types d'événements CRT sont exposés :

  • Avis généré: déclenché lorsqu'un certificat répond aux critères prédéfinis selon le modèle de certificat associé et les étapes du cycle de vie.
  • Alerte de certificat en attente générée: déclenchée lorsqu'une demande de certificat a été marquée comme étant en attente par l'autorité de certification.

Voici quelques exemples de fonctionnalités qui pourraient être mises en œuvre par l'intermédiaire des gestionnaires d'événements du CRT :

  • Détermination programmatique d'un contact par courrier électronique: supposons que tous les certificats de serveur web émis contenant "OU=finance" quelque part dans le nom de l'objet doivent faire l'objet d'avis délivrés à [email protected]. Le gestionnaire pourrait rechercher cette chaîne - voire un destinataire spécifique - et la modifier.
  • Recherche de l'adresse électronique d'un contact à partir d'une autre source: supposons que les coordonnées électroniques d'un contact soient stockées dans une autre base de données. Le gestionnaire pourrait utiliser (par exemple) le numéro de série du certificat comme clé de recherche pour trouver le contact électronique associé.
  • Effectuer un renouvellement de certificat: autoriser l'envoi de la notification par courrier électronique, mais invoquer une fonction qui prend des mesures et renouvelle le certificat. Cela peut être particulièrement utile sur les plateformes non Windows ou dans les situations où l'inscription automatique ne se fait pas automatiquement.
  • Approuver automatiquement une demande de certificat en attente: un flux de travail personnalisé peut être déclenché pour analyser la demande et l'approuver ou la rejeter selon les règles de l'entreprise.

Si un gestionnaire de plugin est défini et associé à un avis ou à une demande de certificat en attente, il sera appelé lorsqu'une alerte est générée pour un certificat ou une demande. Les gestionnaires peuvent être enregistrés auprès de la CRT via l'utilitaire de configuration de la CRT. L'architecture permet d'enregistrer plusieurs gestionnaires et de les associer à un ou plusieurs avis ou alertes de certificat en attente. Si un courriel doit être envoyé, le plugin sera appelé immédiatement avant que le courriel ne soit transmis au serveur.

La figure 1 ci-dessous présente un schéma conceptuel de la CRT. Notez le composant "Custom Plugin", surligné en rouge. Bien que le diagramme fasse référence à une base de données d'entreprise, ce n'est qu'un exemple. L'Active Directory (AD), un moteur de flux de travail ou une autre entité pourraient être substitués.

Figure 1 - Schéma conceptuel du CRT

Exemple de code

Le moteur CRT est une bibliothèque de liens dynamiques gérée (dll), et cet exemple est écrit en C#.NET, mais n'importe quel langage géré peut facilement être utilisé. Les étapes de base de la configuration d'un projet Visual Studio sont les suivantes :

  1. Si vous développez sur une machine de développement distante utilisant un serveursystème d'exploitation
    1. Installer le produit CRT sur la machine de développement
    2. Si vous développez sur une machine de développement distante utilisant un clientsystème d'exploitation
      1. Copier le fichier 'CSS.CRT.Core.dll' sur la machine de développement.
      2. Créez un nouveau projet Visual Studio, en utilisant le modèle "Class Library".
        1. Renommer "Class1" en "SampleNoticeHandler".
        2. Ajouter une référence au projet
          1. Naviguez jusqu'à l'emplacement contenant les fichiers dll de CRT
          2. Sélectionnez 'CSS.CRT.Core.dll'.
          3. Mettre en œuvre l'interface "ICRTNoticeHandler".

public class SampleNoticeHandler : CSS.CRT.Core.ICRTNoticeHandler

  1. Mettre en œuvre les méthodes de l'interface "ICRTNoticeHandler".
    1. NoticeCallback_Email - Cette méthode est appelée lorsqu'un avis est généré et que le système est configuré pour envoyer un courrier électronique. Cette méthode est appelée pour chaque destinataire de l'e-mail de notification.

i. string Subject - Objet original du message électronique

ii. message de chaîne - Texte original du message électronique

iii. string Recipient - destinataire de l'avis par courrier électronique

iv. out string newSubject - Objet du message électronique après traitement. Cette valeur doit être définie dans la méthode, même si elle n'est pas modifiée. S'il n'est pas mis à jour, il peut prendre la valeur de l'objet original.

v. out string newMessage - Texte du message électronique après traitement. Cette valeur doit être définie dans la méthode, même si elle n'est pas modifiée. Si elle n'est pas mise à jour, elle peut prendre la valeur du texte d'origine.

vi. out string newRecipient - Destinataire du courrier électronique après traitement. Cette valeur doit être définie dans la méthode, même si elle n'est pas modifiée. Si elle n'est pas mise à jour, elle peut prendre la valeur du destinataire d'origine.

vii. bool [valeur de retour] - Mettre cette valeur à "true" si le message doit encore être envoyé par la CRT, ou à "false" s'il ne doit pas être envoyé.

[sourcecode language=”csharp”]
public bool NoticeCallback_Email(string Subject, string Message, string Recipient,
out string newSubject, out string newMessage, out string newRecipient)
{
// for this example, copy over the message and recipient, but change the subject line.
newSubject = Subject + ” – Modifed by example code”;

// the message is not modified, so set it to the original value
newMessage = Message;

// the recipient is not modified, so set it to the original value
newRecipient = Recipient;

// return ‘true’ so the email will still be sent; if custom actions are to be taken INSTEAD of
// sending an email, we would return ‘false’.
return true;
}
[/sourcecode]

  1. NoticeCallback_NoEmail - Cette méthode n'est appelée que par le programme de ligne de commande CRT, et uniquement lorsque l'option "/noemail" est fournie sur la ligne command . Cette méthode sera appelée une fois avec la liste complète des destinataires.

i. string Subject - Objet original du message électronique

ii. message de chaîne - Texte original du message électronique

iii. string RecipientList - Liste des destinataires de l'avis par courrier électronique

iv. out string newSubject - Objet du message électronique après traitement. Cette valeur doit être définie dans la méthode, même si elle n'est pas modifiée. S'il n'est pas mis à jour, il peut prendre la valeur de l'objet original.

v. out string newMessage - Texte du message électronique après traitement. Cette valeur doit être définie dans la méthode, même si elle n'est pas modifiée. Si elle n'est pas mise à jour, elle peut prendre la valeur du texte d'origine.

vi. out string newRecipientList - Liste des destinataires du courrier électronique après traitement. Cette valeur doit être définie dans la méthode, même si elle n'est pas modifiée. Si elle n'est pas mise à jour, elle peut prendre la valeur du destinataire d'origine.

[sourcecode language=”csharp”]
public void NoticeCallback_NoEmail(string Subject, string Message, string RecipientList,
out string newSubject, out string newMessage, out string newRecipientList)
{
// for this example, copy over the message and recipient list, but change the subject // line.
newSubject = Subject + ” – Modifed by example code”;

// the message is not modified, so set it to the original value
newMessage = Message;

// the recipient list is not modified, so set it to the original value
newRecipientList = RecipientList;
}
[/sourcecode]

  1. Compiler le projet
  2. Copier le fichier .dll résultant sur un serveur exécutant la CRT
  3. Mettre à jour le fichier crtcommandline.exe.config pour utiliser le nouveau gestionnaire
    1. Fixer la valeur "EmailNoticePlugin" au chemin d'accès du gestionnaire.
    2. Exécuter le programme de ligne de commande CRT avec les paramètres qui permettront de générer un courrier électronique.
      1. Vérifiez que la ligne d'objet de l'e-mail qui en résulte contient le texte "Modifié par le code d'exemple".
      2. Exécuter le programme de ligne de commande CRT avec des paramètres qui ne génèrent pas de courrier électronique, mais qui créent un fichier texte en sortie.
        1. Vérifiez que l'objet du résultat contient le texte "Modifié par l'exemple de code".

L'exemple ci-dessus concerne les avis de CRT. Le processus de mise en œuvre des événements d'alertes de certificats en attente est le même. Il suffit d'implémenter les méthodes PendingCertAlertCallback_Email et PendingCertAlertCallback_NoEmail.

Conclusion

L'interface du plugin CRT Notice Handler offre la possibilité d'effectuer presque n'importe quelle tâche pendant la création d'un avis de certificat ou d'une alerte de requête en attente, et permet une interaction robuste avec d'autres systèmes dorsaux.