Sie sind auf Seite 1von 6

Crear certificados digitales con OpenSSL categora: SERVIDORES Y SEGURIDAD JAVA PHP Cuando queremos programar o usar alguna

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:

Concepto de clave pblica privada Certificado digital Autoridad certificadora

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

13 new_certs_dir = $dir/certificados 14 certificate = $dir/cacert.pem

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

18 nameopt 19 certopt 20 policy 21 22 23

= default_ca = default_ca = policy_match

# Muestra detalles del certificado # Muestra detalles del certificado # Indica si los campos obligatorios y/o

# opcionales deben ser iguales al # certificado raz

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

36 default_keyfile = key.pem 37 default_md 38 string_mask = sha1 = nombstr

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

# aaden a la peticin del # certificado

44 # Distinguished Name. Datos pblicos del certificado X.509 que identifican al propietario. 45 [ req_distinguished_name ] 46 0.organizationName = Nombre de la organizacin

47 0.organizationName_default = Imaginanet 48 organizationalUnitName 49 emailAddress 50 emailAddress_max 51 localityName = Departamento

= Correo electrnico = 40 = Ciudad = Estado o provincia = Cdigo ISO del pais (dos letras) = ES =2 =2 = Nombre comn (nombre del host o IP) = 64

52 stateOrProvinceName 53 countryName 54 countryName_default 55 countryName_min 56 countryName_max 57 commonName 58 commonName_max 59

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 =

64 65 subjectKeyIdentifier = hash 66 authorityKeyIdentifier = keyid:always,issuer:always 67 68 [ v3_req ] 69 basicConstraints 70 subjectKeyIdentifier = CA:FALSE = hash

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:

Das könnte Ihnen auch gefallen