anterior | índice | siguiente |
Veamos cómo trabajar con los certificados. Lo primero que podemos hacer, lógicamente, es crear un certificado. Vamos a crear un certificado vacío.
// En este ejemplo vamos a crear un certificado vacio. // La sintaxis es: // crearcert nombre // // Ejemplo creado por Jose Traver - jose@nisu.org #include <openssl/x509.h> #include <openssl/pem.h> #include <openssl/err.h> #include <stdio.h> int main (int argc, char ** argv) { FILE * fp; X509 * x; // Abrimos el fichero para escritura if ((fp =fopen(argv[1],"w")) == NULL) { perror("ERROR al leer el fichero con el certificado"); exit(1); } // Creamos el certificado nuevo x=X509_new(); // Escribimos el certificado PEM_write_X509(fp,x); fclose(fp); X509_free(x); } |
Ejemplo 1. Creación de una estructura vacía
Un ejemplo del certificado creado puede ser este:
-----BEGIN CERTIFICATE----- MCcwHTADBgEAMAIAADAEFwAXADACAAAwCDADBgEAAwEAMAMGAQADAQA= -----END CERTIFICATE-----
Obsérvese como se cumple la especificación del formato PEM con la cabecera y el final marcando el verdadero certificado y todo con caracteres imprimibles.
Este certificado únicamente contiene las estructuras internas de las que está compuesto un objeto X509. Por eso, no tiene sentido tratar de leerlo.
Para seguir adelante, vamos a crear un certificado válido y perfectamente manejable mediante openssl:
Con esta instrucción hemos creado un certificado autofirmado que se almacena en el fichero cert.pem y un par de claves rsa.
Con openssl también es posible ver información del certificado que acabamos de crear. Para ello usamos:
Aqui aparece mucha información, aunque de momento nos podemos fijar en los datos del Subject (titular) y del Issuer (certificador). Comprobamos que son los mismos. El X509 usa un sistema de códigos propio para indicar los datos:
Estos campos corresponden a los necesarios en un certificado X509 versión 1. Sin embargo, a partir de la versión 3 ya es posible añadir todo tipo de campos extra en estos certificados, incluso la foto de su perro si le hace ilusión (sí, en serio, aunque requiere que el programa que use para leer los certificados lo soporte).
Bueno, pues ya hay un certificado totalmente funcional que hemos hecho con openssl. Pero, claro, queremos trabajar con él, asi que lo primero que tenemos que hacer es cargar el certificado.
// En este ejemplo vamos a leer un certificado x509 con formato PEM // La sintaxis es: // leercert nombre // // Ejemplo realizado por Jose Traver - jose@nisu.org #include <openssl/x509.h> #include <openssl/pem.h> #include <openssl/err.h> #include <stdio.h> int main (int argc, char ** argv) { FILE * fp; X509 * x; // Abrimos el fichero if ((fp =fopen(argv[1],"r")) == NULL) { perror("ERROR al leer el fichero con el certificado"); exit(1); } // Leemos el certificado x = PEM_read_X509 (fp,NULL,NULL,NULL); fclose(fp); X509_free(x); } |
Ejemplo 2. Cargar un certificado X509