Beruflich Dokumente
Kultur Dokumente
aplicacin que requiera autenticacin y encriptacin podemos hacer uso de certificados digitales. Para obtenerlo podemos hacer uso de un certificado obtenido mediante VeriSign, DNI electrnico o crear nosotros uno mismo. En esta entrada de blog vamos a hacer esta ltima opcin, que aunque no podr ser verificado por ninguna Autoridad Certificadora (CA), nos servir perfectamente mientras realizamos el desarrollo. Antes de empezar, vamos a suponer que tenemos claros los conceptos del certificado digital, tales como:
Tambin ser necesario tener claro algunos conceptos muy bsicos de Linux como moverse por archivos, permisos, edicin, etc. Instalar OpenSSL Para empezar, necesitaremos OpenSSL instalado a ser posible la versin ms actualizada posible, ya que si no, puede ser que alguno de los pasos no funcione correctamente. En Windows lo descargaremos y descomprimiremos y en Linux para Ubuntu/Debian: 1 sudo apt-get install openssl o para RedHat / CentOS: 1 yum install openssl lo tendremos instalado. Crear autoridad certificadora de certificados X.509 Prepararemos el entorno: 1 cd $HOME 2 mkdir CA 3 cd CA 4 mkdir certificados
5 mkdir privado 6 echo '01' > contador 7 touch certindex Ahora generaremos el archivo de configuracin OpenSSL 1 nano openssl.cnf El contenido debera ser algo as: 01 # ----------------------02 # Configuracin inicial
03 # ----------------------04 05 dir 06 07 [ ca ] 08 default_ca = CA_default 09 10 [ CA_default ] 11 serial 12 database = $dir/contador = $dir/certindex # Contador de nmeros de serie # Listado de certificados # Directorio para los certificados generados # Certificado raz = . # Directorio de trabajo
15 private_key = $dir/privado/cakey.pem # Clave privada del certificado raz 16 default_md = sha1 17 preserve = no # Digest usado # Preserva el orden de los campos del DN
# Muestra detalles del certificado # Muestra detalles del certificado # Indica si los campos obligatorios y/o
24 # Poltica de recoleccin de datos frente al raz 25 [ policy_match ] 26 countryName 27 stateOrProvinceName 28 organizationName 29 organizationalUnitName 30 commonName 31 emailAddress 32 33 # Configuracin de certificados 34 [ req ] 35 default_bits = 2048 # Tamao de la clave en bits # Fichero de la clave privada # Digest # Caracteres permitidos en la clave = match = match = match = optional = supplied = optional
39 distinguished_name = req_distinguished_name # Seccin para el nombre DN 40 req_extensions = v3_req # Seccin con mas extensiones que se
41 42 43
44 # Distinguished Name. Datos pblicos del certificado X.509 que identifican al propietario. 45 [ req_distinguished_name ] 46 0.organizationName = Nombre de la organizacin
= Correo electrnico = 40 = Ciudad = Estado o provincia = Cdigo ISO del pais (dos letras) = ES =2 =2 = Nombre comn (nombre del host o IP) = 64
60 # Si se indica la opcion -x509 indica que se trata de un certificado CA raz 61 # con autoridad para firmar o revocar otros certificados 62 [ v3_ca ] 63 basicConstraints CA:TRUE =
Finalmente ejecutamos 1 openssl req -new -x509 -extensions v3_ca -keyout privado/cakey.pem -out cacert.pem -days 3650 -config ./openssl.cnf
Creando un certificado digital X.509 en base a nuestra autoridad certificadora 1 openssl req -new -nodes -out imaginanet-cert.pem -config ./openssl.cnf 2 3 openssl ca -out certificado-imaginanet.pem -config ./openssl.cnf -days 3650 -infiles imaginanet-cert.pem
Donde el archivo imaginanet-cert.pem corresponde a nuestra clave privada y certificadoimaginanet.pem a la pblica. Utilidades No debemos olvidar que los certificados generados no sern validos en un entorno real de produccin ya que nuestra CA no ser reconocida por los navegadores o el KeyStore de Java, pero si que nos vendr bien como entorno de desarrollo para:
Poner un servidor web en modo seguro HTTPS Realizar firmas sobre ficheros o correos mediante cualquier lenguaje de programacin
Aadiendo la autoridad certificadora y nuestro certificado digital a nuestro navegador: Firefox Supongamos que hemos puesto en marcha nuestro servidor web Apache con HTTPS y el certificado digital creado. Para que el navegador nos confirme que es una pgina vlida deberemos aadir la autoridad certificadora a la lista de autoridades certificadoras vlidas. En el caso de Firefox:
Editar -> Preferencias -> Avanzado -> Cifrado -> Ver certificados -> Autoridades -> Importar y seleccionaremos el archivo cacert.pem Si por el contrario quisiramos firmar digitalmente con el certificado creado, deberemos aadir el certificado digital yendo a: Editar -> Preferencias -> Avanzado -> Cifrado -> Ver certificados -> Sus certificados -> Importar y seleccionar la clave privada imaginanet-cert.pem e introducir la contrasea para ser guardada en el KeyStore de Firefox. Todo documento firmado con este certificado ser no vlido ya que el servidor que lo firme no reconocer a la autoridad certificadora, pero podemos aadir dicho certificado al KeyStore del lado del servidor, cosa que veremos en prximas entradas del blog. Convertir certificados .pem / .cert (X.509) a .pfx (PKCS12) En ocasiones es necesario el uso de certificados en formato PKCS12 de extensin PFX, como por ejemplo para la librera iText para Java / C#. Lo podemos hacer mediante el siguiente comando con OpenSSL 0.9.8k (si tenemos una versin inferior deberemos actualizar ya que no funciona en todas las aplicaciones el fichero generado): 1 openssl pkcs12 -inkey private_key.pem -in public_cert.cert -export -out cert.pfx Referencias Parte de este artculo se ha basado en http://www.linuxtotal.com.mx/ssl_apache.html Ms informacin:
X.509 PKCS7 PKCS12 Aadir un certificado al KeyStore de Java Firmar y validar firmas digitales en documentos PDF en Java
deja tu comentario: