Última hora: Keyfactor adquiere InfoSec Global y CipherInsights | Soluciones integrales para descubrimiento, control y agilidad

  • Inicio
  • Blog
  • Creación de controladores de plugins de eventos para el sistema de gestión de certificados (CMS)

Creación de controladores de plugins de eventos para el sistema de gestión de certificados (CMS)

El Sistema de Gestión de Certificados (CMS), anteriormente conocido como la Herramienta de Informes de Certificados (CRT), como se menciona a continuación, proporciona capacidades de informes y notificaciones a una Infraestructura de Clave Pública (PKI) existente. Los informes y notificaciones son altamente personalizables en cuanto a contenido, tiempo y audiencia. Además, se pueden crear y registrar "controladores de complementos de eventos" personalizados para realizar cualquier función deseada cuando se produzcan eventos predefinidos. Se exponen dos tipos de eventos CRT:

  • Aviso generado: se dispara cuando un certificado cumple los criterios predefinidos según la plantilla de certificado asociada y el hito del ciclo de vida.
  • Alerta de certificado pendiente generada: se dispara cuando una solicitud de certificado ha sido marcada como pendiente por la autoridad de certificación.

Algunos ejemplos de funcionalidades que podrían implementarse a través de manejadores de eventos CRT incluyen:

  • Determinar un contacto de correo electrónico mediante programación: supongamos que todos los certificados de servidor web emitidos que contengan "OU=finance" en algún lugar del nombre del asunto deberían tener notificaciones enviadas a [email protected]. El gestor podría buscar esta cadena -quizás incluso un destinatario específico- y cambiarla.
  • Buscar un correo electrónico de contacto en otra fuente: supongamos que la información de contacto por correo electrónico está almacenada en otra base de datos. El gestor podría utilizar (por ejemplo) el número de serie del certificado como clave de búsqueda para buscar el contacto de correo electrónico asociado.
  • Realizar una renovación de certificado: permita que se envíe la notificación por correo electrónico, pero invoque una función que actúe y renueve el certificado. Esto podría ser especialmente útil en plataformas que no sean Windows o en situaciones en las que la inscripción automática no se produzca automáticamente.
  • Aprobar automáticamente una solicitud de certificado pendiente: se puede activar un flujo de trabajo personalizado para analizar la solicitud y aprobarla o rechazarla según las reglas de la empresa.

Si se define un controlador de complemento y se asocia a una notificación o solicitud de certificado pendiente, se llamará cuando se genere una alerta para un certificado o solicitud. Los gestores pueden registrarse en CRT mediante la utilidad de configuración de CRT. La arquitectura permite registrar varios gestores y asociarlos a uno o varios avisos o alertas de certificados pendientes. Si se va a enviar un correo electrónico, se llamará al complemento inmediatamente antes de que el correo electrónico real se retransmita al servidor.

La figura 1 muestra un esquema conceptual de CRT. Observe el componente "Custom Plugin", resaltado en rojo. Aunque en el diagrama se hace referencia a una base de datos corporativa, es sólo a efectos de visualización. Podría sustituirse por Active Directory (AD), un motor de flujo de trabajo u otra entidad.

Figura 1 - Diseño conceptual de la CRT

Código de ejemplo

El motor CRT es una biblioteca de vínculos dinámicos (dll) gestionada, y este ejemplo está escrito en C#.NET, pero puede utilizarse fácilmente cualquier lenguaje gestionado. Los pasos básicos para configurar un proyecto de Visual Studio son:

  1. Si está desarrollando en una máquina de desarrollo remota que ejecuta un servidorsistema operativo
    1. Instalar el producto CRT en la máquina de desarrollo
    2. Si está desarrollando en una máquina de desarrollo remota que ejecuta un clientesistema operativo
      1. Copie el 'CSS.CRT.Core.dll' a la máquina de desarrollo
      2. Cree un nuevo proyecto de Visual Studio utilizando la plantilla "Biblioteca de clases
        1. Cambia el nombre de 'Class1' a 'SampleNoticeHandler'.
        2. Añadir una referencia al proyecto
          1. Navegue hasta la ubicación que contiene los dlls CRT
          2. Seleccione 'CSS.CRT.Core.dll'.
          3. Implementar la interfaz "ICRTNoticeHandler

public class SampleNoticeHandler : CSS.CRT.Core.ICRTNoticeHandler

  1. Implementar los métodos de la interfaz 'ICRTNoticeHandler
    1. NoticeCallback_Email - Este método se ejecuta cuando se genera un aviso y el sistema está configurado para enviar un correo electrónico. Se llamará a este método para cada destinatario del correo electrónico de notificación.

i. cadena Asunto - Asunto original del mensaje de correo electrónico

ii. cadena Mensaje - Texto original del mensaje de correo electrónico

iii. cadena Destinatario - Destinatario del correo electrónico de notificación

iv. out string newSubject - Asunto del mensaje de correo electrónico una vez procesado. Este valor debe establecerse dentro del método, aunque no se modifique. Si no se actualiza, puede establecerse con el valor original del asunto.

v. out string newMessage - Texto del mensaje de correo electrónico después del procesamiento. Este valor debe establecerse dentro del método, aunque no se modifique. Si no se actualiza, puede establecerse al valor de texto original.

vi. out string newRecipient - Destinatario del correo electrónico tras el procesamiento. Este valor debe establecerse dentro del método, aunque no se modifique. Si no se actualiza, puede establecerse al valor original del destinatario.

vii. bool [return value] - Establece este valor a 'true' si el mensaje debe seguir siendo enviado por CRT, o false si no debe ser enviado.

[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 - Este método sólo es llamado por el programa CRT Commandline, y sólo cuando se proporciona la opción "/noemail" en la línea command . Este método se llamará una vez con la lista completa de destinatarios.

i. cadena Asunto - Asunto original del mensaje de correo electrónico

ii. cadena Mensaje - Texto original del mensaje de correo electrónico

iii. string RecipientList - Lista de destinatarios del correo electrónico de notificación

iv. out string newSubject - Asunto del mensaje de correo electrónico una vez procesado. Este valor debe establecerse dentro del método, aunque no se modifique. Si no se actualiza, puede establecerse con el valor original del asunto.

v. out string newMessage - Texto del mensaje de correo electrónico después del procesamiento. Este valor debe establecerse dentro del método, aunque no se modifique. Si no se actualiza, puede establecerse al valor de texto original.

vi. out string newRecipientList - Lista de destinatarios de correo electrónico después del procesamiento. Este valor debe establecerse dentro del método, aunque no se modifique. Si no se actualiza, puede establecerse con el valor original del destinatario.

[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. Compilar el proyecto
  2. Copie el .dll resultante en un servidor que ejecute CRT
  3. Actualice el archivo crtcommandline.exe.config para utilizar el nuevo controlador
    1. Establece el valor 'EmailNoticePlugin' a la ruta del manejador
    2. Ejecute el programa de línea de comandos CRT con la configuración que generará un correo electrónico
      1. Compruebe que la línea de asunto del correo electrónico resultante contiene el texto "Modificado por código de ejemplo".
      2. Ejecute el programa de línea de comandos CRT con una configuración que no generará un correo electrónico, sino que creará un archivo de texto de salida
        1. Compruebe que la línea de asunto del resultado contiene el texto "Modificado por código de ejemplo".

El ejemplo anterior está relacionado con Avisos CRT. El proceso para implementar eventos Pending Certificate Alerts es el mismo. Simplemente implemente los métodos PendingCertAlertCallback_Email y PendingCertAlertCallback_NoEmail.

Conclusión

La interfaz del complemento CRT Notice Handler proporciona la flexibilidad necesaria para realizar casi cualquier tarea durante la creación de un aviso de certificado o una alerta de solicitud pendiente, y permite una sólida interacción con otros sistemas back-end.