2009-03-18 6 views
8

Acabamos de configurar una nueva solución de acceso remoto utilizando TS Gateway de Microsoft, que requiere un par de pasos algo complicados en nombre del usuario final para que funcione (instalando nuestra raíz cert de ca, requisito del cliente de RDP 6.1, etc.).Instalando Root CA Cert mediante código en Win32

Para hacer que este proceso de configuración sea lo más fácil posible (muchos de estos usuarios no tienen mentalidad técnica), estoy buscando crear un programa para realizar todas estas tareas automáticamente. Tengo la mayor parte trabajando, sin embargo, no estoy completamente seguro de cómo importar el certificado de Root CA en el almacén de certificados de Windows.

Debido a que esto potencialmente se puede ejecutar en una amplia gama de computadoras con diferentes niveles de parches y actualizaciones, me estoy alejando bastante bien de .NET y de cualquier cosa que no sea nativa: la herramienta debería 'ejecutarse' sin el el usuario tiene que instalar algo extra (bueno, diré que Windows XP, sin service packs, es la versión mínima requerida de Windows). Al decir eso, no me importa usar algo de terceros si puede incluirse en la herramienta, siempre que no sea enorme, y no introduzca ningún paso interactivo. Idealmente, algo en la API de Windows sería lo mejor, sin embargo, parece que no puedo rastrear nada relevante.

Actualmente la herramienta es una aplicación de C++, así que no me importa si es algo de bajo nivel.

Respuesta

7

primer lugar usted necesita para abrir el almacén de certificados raíz ...

HCERTSTORE hRootCertStore = CertOpenSystemStore(NULL,"ROOT"); 

Luego agregar el certificado utilizando una de las funciones CertAdd, como CertAddEncodedCertificateToStore.

CertAddEncodedCertificateToStore(hRootCertStore,X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,pCertData,cbCertData,CERT_STORE_ADD_USE_EXISTING,NULL); 

pCertData y cbCertData probable que apuntar a los datos del certificado que se lee de un archivo (no estoy seguro si el certificado estará en un archivo, o cómo se va a incluir en su aplicación).

continuación, cierre la tienda con ...

CertCloseStore(hRootCertStore,0); 

NOTA: Este código se ejecuta como si el usuario, se instala el certificado al almacén raíz del usuario, no el equipo de. También da como resultado un cuadro de diálogo de advertencia que el usuario debe comprender y selecciona "Sí" para autorizar la importación. Si su programa de instalación puede ejecutar este código en una cuenta de sistema, la importación afectará la tienda raíz de la computadora y no se mostrará el cuadro de diálogo de advertencia.

0

varias muestras de C++ de Windows SDK de MSDN

sólo tiene que copiarlos.

2

También puede consultar CertAddEncodedCertificateToSystemStore