Tabla de Contenidos

Introducción

OpenSSL

Secure Sockets Layer es un protocolo de la capa de aplicación que fue desarrollado por Netscape Corporation con el propósito de transmitir información confidencial, como datos de las tarjetas de crédito, a través de Internet.

SSL funciona utilizando una clave privada para cifrar los datos transferidos a través de la conexión habilitada para SSL, lo que evita la escucha ilegal de la información.

El uso más popular de SSL es utilizarlo junto con el navegador web (utilizando el protocolo HTTP), pero muchas aplicaciones de red pueden beneficiarse del uso de SSL. Las URL que requieren una conexión SSL comienzan con https: en lugar de http :.

OpenSSL es una robusta implementación Oopen Source que habilita herramientas SSL y una biblioteca de propósito general basada en SSLeay, desarrollada por Eric A. Young y Tim J. Hudson.

X.509

X.509 es una especificación para certificados digitales publicada por la Unión Internacional de Telecomunicaciones

- Telecomunicaciones (UIT-T). Especifica la información y los atributos necesarios para la identificación de una persona o un sistema informático, se utiliza para la gestión segura y la distribución de certificados firmados digitalmente a través de redes seguras de Internet. OpenSSL más comúnmente utiliza certificados X.509.

Instalación

Software relacionado con SSL:

NOTA: la variable de entorno OPENSSL_CONF tiene que estar apuntando a “caconfig.cnf”

guallar@debian:/home/guallar# export  OPENSSL_CONF=/home/guallar/myCA/caconfig.cnf
guallar@debian:/home/guallar# touch caconfig.cnf
guallar@debian:/home/guallar# apt-get install openssl
guallar@debian:/home/guallar# apt-get install ca-certificates
guallar@debian:/home/guallar# apt-cache search libssl | grep SSL
 
libssl-dev sirve para desarrollar con ssl

Creacion

Certificados SSL

Vamos a intentan entender los conceptos implicados en la generación y uso de certificados SSL, tanto de la variedad autofirmada, como aquellos firmados por una autoridad de certificación reconocida para su uso con una aplicación de servidor que admita SSL y el uso de X. 509 certificados en aplicaciones cliente.

Certificados SSL para el uso del servidor

Una vez que haya generado correctamente un certificado SSL compatible con X.509, puede optar por firmar el certificado por uno mismo, generando una Autoridad de Certificación (CA) o puede optar por que una Autoridad de Certificación globalmente reconocida firme el certificado.

Cuando el certificado está firmado, entonces está listo para ser utilizado con el kit de herramientas de OpenSSL para permitir conexiones SSL cifradas a un protocolo LDAP o HTTP, por ejemplo.

vamos a describir la generación de certificados y el proceso de firma para los certificados firmados por CA y firmados por CA.

Generación y firma de certificados auto-firmados

Los certificados autofirmados tienen una gran ventaja en cuanto a que son completamente gratuitos y pueden generarse, firmarse y utilizarse según sea necesario. Los certificados autofirmados son ideales para su uso en entornos de laboratorio cerrado o para fines de prueba.

Uno de los inconvenientes del uso de certificados autofirmados, es que normalmente se publica por el navegador Web y las aplicaciones las aplicaciones cliente (por ejemplo, Firefox) sacarán advertencias de abandonar la pagina por no ser segura, y sólo suprimirán dichas advertencias si los certificados que se firman utilizando una entidad de certificación reconocida y confiable a nivel mundial.

El uso de certificados autofirmados en un entorno de producción accesible al público no se recomienda debido a los problemas implícitos de confianza derivados de estas advertencias, además de la posible confusión causada a los usuarios.

Creación de la autoridad de certificación

En primer lugar, se crea un entorno de trabajo inicial, por ejemplo, dentro de su directorio principal, escribiendo el siguiente comando desde el terminal:

guallar@debian:/home/guallar#cd && mkdir -p myCA/signedcerts && mkdir myCA/private && cd myCA

El comando anterior lo colocará en un subdirectorio recién creado de su directorio home llamado myCA, y dentro de este subdirectorio, debería tener dos subdirectorios adicionales denominados signedcerts y private.

Dentro de este entorno de trabajo inicial, la significación de los subdirectorios y su contenido es la siguiente:

/home/guallar/myCA: contiene el certificado de CA, la base de datos de certificados, los certificados generados, las claves y las solicitudes /home/guallar/myCA/signedcerts: contiene copias de cada certificado firmado /home/guallar/myCA/private: contiene la clave privada

A continuación, creamos una base de datos de certificados inicial en el subdirectorio /home/guallar/myCA con el siguiente comando:

guallar@debian:/home/guallar/myCA# echo '01'> serial && touch index.txt

Creamos el fichero de configuración home/guallar/myCA/caconfig.cnf que a continuación pongo con las opciones por defecto de la CA

caconfig.cnf
  # My sample caconfig.cnf file.
  #
  # Default configuration to use when one is not provided on the command line.
  #
  [ ca ]
  default_ca      = local_ca
  #
  #
  # Default location of directories and files needed to generate certificates.
  #
  [ local_ca ]
  dir             = /home/<username>/myCA
  certificate     = $dir/cacert.pem
  database        = $dir/index.txt
  new_certs_dir   = $dir/signedcerts
  private_key     = $dir/private/cakey.pem
  serial          = $dir/serial
  #       
  #
  # Default expiration and encryption policies for certificates.
  #
  default_crl_days        = 365
  default_days            = 1825
  default_md              = md5
  #       
  policy          = local_ca_policy
  x509_extensions = local_ca_extensions
  #       
  #
  # Default policy to use when generating server certificates.  The following
  # fields must be defined in the server certificate.
  #
  [ local_ca_policy ]
  commonName              = supplied
  stateOrProvinceName     = supplied
  countryName             = supplied
  emailAddress            = supplied
  organizationName        = supplied
  organizationalUnitName  = supplied
  #       
  #
  # x509 extensions to use when generating server certificates.  
  #
  [ local_ca_extensions ]
  subjectAltName          = DNS:alt.tradeshowhell.com
  basicConstraints        = CA:false
  nsCertType              = server
  #       
  #
  # The default root certificate generation policy.  
  #
  [ req ]
  default_bits    = 2048
  default_keyfile = /home/<username>/myCA/private/cakey.pem
  default_md      = md5
  #       
  prompt                  = no
  distinguished_name      = root_ca_distinguished_name
  x509_extensions         = root_ca_extensions
  #
  #
  # Root Certificate Authority distinguished name.  Change these fields to match
  # your local environment!
  #
  [ root_ca_distinguished_name ]
  commonName              = MyOwn Root Certificate Authority
  stateOrProvinceName     = NC
  countryName             = US
  emailAddress            = root@tradeshowhell.com
  organizationName        = Trade Show Hell
  organizationalUnitName  = IT Department
  #       
  [ root_ca_extensions ]
  basicConstraints        = CA:true

IMPORTANTE: Tenemos que ajustar los detalles específicos del sitio en el archivo, como las dos instrucciones de

  /home/<nombre_usuario>/... en [local_ca] y [req].

También hay que cambiar commonName, stateOrProvinceName countryName, etc. en [ root_ca_distinguished_name ] para personalizar el entorno.

Una vez editado el archivo modificado con nuestro entorno, lo tenemos que guardar como ~ / myCA / caconfig.cnf.

A continuación, se debe generar el certificado raíz de la entidad emisora ​​de certificados y la clave, para ello, tenemos que escribir los siguientes comandos:

Primero, hay que escribir:

guallar@debian:/home/guallar# export OPENSSL_CONF=/home/guallar/myCA/caconfig.cnf

Este comando establece una variable de entorno, OPENSSL_CONF, que obliga a la herramienta openssl a buscar un archivo de configuración en una ubicación determinada (en este caso, /home/guallar/myCA/caconfig.cnf).

generar

Generación del certificado de la CA y de su clave privada

Ahora, generamos el certificado y la clave de la CA con el siguiente comando:

guallar@debian:/home/guallar# openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825

Nos pedirá una frase de contraseña (passphrase) y veremos una salida similar a la siguiente:

  Generating a 2048 bit RSA private key .................................+++ 
  .................................................................................................+++ 
  writing new private key to '/home/guallar/myCA/private/cakey.pem' 
  Enter PEM pass phrase: 
  Verifying - Enter PEM pass phrase: 
  -----

IMPORTANTE NO OLVIDAR LA CONTRASEÑA USADA ¡¡¡ La necesitaremos cada vez que deseemos generar y firmar un nuevo certificado de servidor o cliente

El proceso anterior creará un certificado autofirmado que utilizará el formato PEM y el cifrado de clave pública / privada RSA.

El certificado será válido por 1825 días.

La ubicación y el propósito de los archivos resultantes son los siguientes:

guallar@debian:/home/guallar# myCA/cacert.pem: certificado público de CA
guallar@debian:/home/guallar# myCA/private/cakey.pem: clave privada de CA

Creación de un certificado de servidor auto-firmado

Ahora que tenemos una Autoridad de certificación configurada, la podemos usar para firmar certificados autofirmados.

Antes de comenzar, tenemos que pensar que es posible que deseemos cifrar la clave privada del certificado con una contraseña.

Las ventajas de cifrar la clave con una contraseña incluyen la protección del certificado en caso de que sea robado.

El certificado no se puede utilizar con aplicaciones habilitadas para SSL sin introducir la frase de acceso cada vez que se inicia la aplicación habilitada para SSL.

Para generar un certificado autofirmado y usarlo con una aplicación SSL, seguimos este proceso:

Crear el archivo de configuración del servidor editando

 
/home/guallar/myCA/exampleserver.cnf en el editor de texto.

Añadir este ejemplo de contenido:

exampleserver.cnf
  #
  # exampleserver.cnf
  #
 
  [ req ]
  prompt                  = no
  distinguished_name      = server_distinguished_name
 
  [ server_distinguished_name ]
  commonName              = videosdeinformatica.es
  stateOrProvinceName     = Aragon
  countryName             = ES
  emailAddress            = jmguallar@fundacionmontessori.com
  organizationName        = Colegio Montessori
  organizationalUnitName  = Departamento de Informatica

Tenemos que cambiar los valores en server_distinguished_name especialmente el valor commonName.

El valor commonName debe coincidir con el nombre de host, o CNAME para el host que desea utilizar la clave.

Si commonName no coincide con el nombre de host previsto, los errores de incompatibilidad de host / certificado aparecerán en las aplicaciones cliente de los clientes que intenten acceder al servidor.

Una vez que hayamos editado el archivo adecuadamente, lo guardamos como

 guallar@debian:/home/guallar# /myCA/exampleserver.cnf.

Y generamos el certificado de servidor y clave con los siguientes comandos:

guallar@debian:/home/guallar# export OPENSSL_CONF=/home/guallar/myCA/exampleserver.cnf

Este comando establece una variable de entorno OPENSSL_CONF que obliga a la herramienta openssl a buscar un archivo de configuración en una ubicación alternativa (en este caso, /home/guallar/myCA/exampleserver.cnf).

Ahora generamos el certificado y clave:

guallar@debian:/home/guallar#  openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM

Te pedirá una contraseña y saldrá por pantalla un mensaje similar al siguiente:

  Generating a 1024 bit RSA private key ...++++++
  ...............++++++  
  writing new private key to 'tempkey.pem' 
  Enter PEM pass phrase: 
  Verifying - Enter PEM pass phrase:
  -----

¡No olvides la contraseña!

Y se generan estos dos ficheros: la petición (tempreq.pem) y la clave privada del certificado (tempkey.pem)

Ahora debe firmar el certificado de servidor con la clave de la entidad emisora ​​de certificados (CA) utilizando estos comandos:

guallar@debian:/home/guallar# export OPENSSL_CONF=/home/guallar/myCA/caconfig.cnf

El comando anterior modifica la variable de entorno OPENSSL_CONF que obliga a la herramienta openssl a buscar un archivo de configuración en una ubicación alternativa (en este caso, /home/gualalr/myCA/caconfig.cnf para volver a la configuración de CA).

A continuación, firme el certificado como sigue:

guallar@debian:/home/guallar# openssl ca -in tempreq.pem -out server_crt.pem

Pedirá la contraseña de la CA creada en la configuración de la entidad emisora ​​de certificados de arriba.

Introducimos la contraseña y, a continuación, nos pedirá si estamos conforme con la información de exampleserver.cnf y, finalmente, se le pide que confirmes la firma del certificado. La salida debe ser similar a esto:

Using configuration from /home/guallar/myCA/caconfig.cnf 
Enter pass phrase for /home/guallar/myCA/private/cakey.pem: 
Check that the request matches the signature 
Signature ok 
The Subject's Distinguished Name is as follows 
commonName 	:PRINTABLE:'videosdeinformatica.es' 
stateOrProvinceName 	:PRINTABLE:'Aragon' 
countryName 	:PRINTABLE:'ES' 
emailAddress 	:IA5STRING:'jmguallar@fundacionmontessori.com' 
organizationName 	:PRINTABLE:'colegio montessori' 
organizationalUnitName	:PRINTABLE:'departamento informatica' 
Certificate is to be certified until Jan 4 21:50:08 2011 GMT (1825 days) 
Sign the certificate? [y/n]:y 
 
1 out of 1 certificate requests certified, commit? [y/n]y 
Write out database with 1 new entries Data Base 
Updated

Podemos observar que los ficheros de indices se han modificaco

Ya tenemos un certificado de aplicación de servidor auto-firmado y un par de claves:

server_crt.pem: archivo de certificado de la aplicación del servidor
server_key.pem: archivo de clave de aplicación de servidor

Si quieres utilizar el certificado en Apache2: http://codeghar.wordpress.com/2008/03/15/apache-20-in-ubuntu

x.509

Conversión de certificados X.509 a PKCS # 12 para aplicaciones cliente

Si desea generar certificados PKCS#12 desde el certificado raíz CA X.509 del servidor para el uso del cliente, deberemos utilizar el siguiente proceso en el certificado de servidor y el par de claves que deseamos exportar un certificado de cliente

Cree un archivo único que contenga tanto el certificado como la clave con el siguiente comando:

guallar@debian:/home/guallar# openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem

A continuación, convertimos este archivo en el certificado PKCS # 12 con el siguiente comando:

guallar@debian:/home/guallar# openssl pkcs12 -export -out mycert.pfx -in mycert.pem -name "Certificado para lo que sea"

Pedirá una contraseña.

El archivo mycert.pfx resultante se puede importar a aplicaciones tales como navegadores Web y clientes de correo electrónico.

Este certificado representa el certificado de la CA raíz de su servidor, todos los certificados de servidor subsiguientes firmados por el certificado de CA también serán aceptados automáticamente por la aplicación cliente que instala esta versión PKCS#12 del certificado.

Petición

CREACIÓN DE UN CERTIFICADO PARA QUE SEA FIRMADO POR UNA CA RECONOCIDA EXTERNA

Generamos el certificado del siguiente modo: Si ya tenemos una clave privada

guallar@debian:/home/guallar# openssl req -new -key mykey.pem -out myreq.pem 

Si no tenemos clave privada y queremos generar una nueva

guallar@debian:/home/guallar# openssl req -new -newkey rsa:1024 -nodes -keyout mykey.pem -out myreq.pem

Podemos verificar la firma con:

guallar@debian:/home/guallar# openssl req -in myreq.pem -noout -verify -key mykey.pem

Podemos verificar la información contenida en la petición de certificado con:

guallar@debian:/home/guallar# openssl req -in myreq.pem -noout -text 

Se envía a la CA que debe emitir el certificado el contenido del fichero de petición de certificado y debe esperarse a que la CA emita el certificado definitivo firmado por ella

Incorporación de certificados a la base de datos de certificados del sistema

Se pueden importar certificados a la base de datos de certificados del sistema

Todas las aplicaciones que utilicen esta base de datos, automáticamente confiarán en los certificados que se hallen en ella

Operación manual

Si no está instalado ya:

guallar@debian:/home/guallar#  apt-get install ca-certificates

Copiar el certificado a

guallar@debian:/home/guallar/myCA# cp mycert.pem /usr/share/ca-certificates/mycert.crt

Editar el fichero

guallar@debian:/home/guallar# /etc/ca-certificates.conf

Añadir después del último comentario el nombre del fichero con el certificado a añadir

Operación guidada

guallar@debian:/home/guallar# dpkg-reconfigure  ca-certificates
guallar@debian:/home/guallar# update-ca-certificates