Introducción a SSL

El estándar SSL fue desarrollado por NetscapeCommunications Corporation , junto con Mastercard,
Bank of America, MCI y Silicon Graphics. Lanzando en 1996 SSL v3.0, el cual se utilizó para
desarrollar en 1999 el TLS versión 1.0, un estándar protocolo IETF definido por primera vez en el
RFC 2246. Se encuentra en la pila OSI entre los niveles de TCP/IP y de los protocolos HTTP, FTP,
SMTP, SSH, etc.
SSL opera de una manera modular: sus autores lo diseñaron extensible, con soporte para
compatibilidad hacia delante y hacia atrás, y negociación entre las partes (peer-to-peer).
Proporciona sus servicios de seguridad cifrando los datos intercambiados entre el servidor y el
cliente con un algoritmo de cifrado simétrico, típicamente el RC4 o IDEA, y cifrando la clave de
sesión de RC4 o IDEA mediante un algoritmo de cifrado de clave pública, típicamente el RSA. La
clave de sesión es la que se utiliza para cifrar los datos que vienen del y van al servidor seguro. Se
genera una clave de sesión distinta para cada transacción, lo cual permite que aunque sea reventada
por un atacante en una transacción dada, no sirva para descifrar futuras transacciones. MD5 se usa
como algoritmo de hash.
Proporciona cifrado de datos, autenticación de servidores, integridad de mensajes y, opcionalmente,
autenticación de cliente para conexiones TCP/IP.
Cuando el cliente pide al servidor seguro una comunicación segura, el servidor abre un puerto
cifrado, gestionado por un software llamado Protocolo SSL Record, situado encima de TCP. Será el
software de alto nivel, Protocolo SSL Handshake, quien utilizara el Protocolo SSL Record y el
puerto abierto para comunicarse de forma segura con el cliente.
Funcionamiento
Cuando el cliente pide al servidor seguro una comunicación segura, el servidor abre un puerto
cifrado (443), gestionado por un software llamado Protocolo SSL Record, situado encima de TCP.
Será el software de alto nivel el protocolo SSL Handshake, quien utilice el Protocolo SSL Record y
el puerto abierto para comunicarse de forma segura con el cliente.
1. El protocolo SSL Handshake, es donde el cliente y el servidor intercambian una serie de
mensajes para negociar las mejoras de seguridad.
La fase de Saludos.
La fase de intercambio de claves.
La fase de producción de clave de sesión.
La fase de verificación del servidor.
La fase de autenticación del cliente.
La fase de finalización.

2. El Protocolo SSL Record especifica la forma de encapsular los datos transmitidos y
recibidos. La porción de datos del protocolo tiene tres componentes:
MAC-DATA, el código de autenticación del mensaje.
ACTUAL-DATA, los datos de aplicación a transmitir.
ADDING-DATA, los datos requeridos para rellenar el mensaje al usa cifrado en bloque.
Este invento que ha propiciado una navegación segura más transacciones comerciales, motivando a
los usuarios de la red y a las empresas a que tengan confianza de ser usurpados por usuarios
maliciosos del internet, lo cual ha dado un mejor funcionamiento a un nivel económico. Visa,
MasterCard, American Express y muchas de las principales instituciones financieras han aprobado
SSL para el comercio sobre Internet.
Referencias: RFC 4346, reemplazada por RFC 5246, 5746, 5878 (estándar propuesto); modificada
por RFC 4366, 4680, 4681, 5746 (correcciones).
Primero que nada necesitamos habilitar el modulo SSL con lo cual tenemos que hacerlo ejecutando
“a2enmod ssl” esto activara los módulos que necesitamos para continuar nuestra configuración.

$ a2enmod ssl

Luego creamos en /etc/apache2/sites-available un archivo con el nombre del dominio pero con -ssl
para diferenciarlo del precedente “gato.linux.com-ssl.conf” en el escribimos el siguiente
script.

<IfModule mod_ssl.c> ## Módulos para el protocolo SSL
<VirtualHost *:443> ## Puerto de HTTPS por defecto 443
DocumentRoot "/home/gatoe/www/gato.linux.com" ## Localización de documentos
ServerName gato.linux.com ## Nombre del dominio
ServerAlias *.gato.linux.com ## Alias del dominio
<Directory "/home/gato/www/gato.linux.com"> ## Localización del sitio
Options -Indexes FollowSymLinks MultiViews
allow from all
</Directory>
ErrorLog /var/log/apache2/gato.linux.com-ssl.error.log ## archivo log auto-generable
LogLevel warn
CustomLog /var/log/apache2/gato.linux.com.access.log combined ## log de acceso
## auto-generable
ServerSignature On
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
<FilesMatch ".(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]"
nokeepalive ssl-unclean-shutdown
downgrade-1.0 force-response-1.0
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
</VirtualHost>


Ahora vamos a modificar el archivo que se encuentra en “/etc/apache2/ports.conf” aquí tendremos
que hacer algunas modificaciones, dejándolos de esta manera
SCRIPT “/etc/apache2/ports.conf”

NameVirtualHost *:80
Listen 80
<IfModule mod_ssl.c>
NameVirtualHost *:443
Listen 443
</IfModule>

Apache 2 con Secure Sockets Layer (SSL)


Ahora tendremos que activarlos ejecutando lo siguiente.

a2ensite gato.linux.com-ssl.conf


Ahora reiniciamos apache2

/etc/init.d/apache2 restart

y ya tendríamos que podes acceder usando el protocolo HTTPS.

web

# Creamos las llaves con el comando openssl usando “genrsa -des3” para generar parámetros de
RSA, utilizando un algoritmo DES encriptando 3 veces, y quedara contenida en un archivo que
generara con el nombre servidor.key con una encriptación de 1024 bits en el directorio
/etc/apache2/.
En caso de querer generar una contraseña con una seguridad mayor, se puede usar 2048 bits, y
direccionarla a algún archivo “openssl genrsa -des3 2048 >> /archivo_a_alojar/”
Podemos usar muchos parámetros mas como por ejemplo usar Diffie-Hellman o parámetros DSA
para conocer un poco mas recomiendo ejecutar “man openssl”.
openssl genrsa -des3 1024 >> /etc/apache2/servidor.key
en mi caso como estoy en el directorio /etc/apache2/ obvio la redirección final “>> /etc/apache2”

apache

Donde nos pide que ingresemos una passwd para crear una llave que estará contenida en
servidor.key, luego nos pedirá que repitamos la contraseña.

Aclaración: al ingresar las contraseñas no esperes ver caracteres de ningún tipo.

Ahora tenemos que creamos un certificado con la llave que ya creamos, así que primero que nada
nos posicionamos en el directorio /etc/apache2/ y ejecutamos el comando openssl con el parámetro
“-req” para los certificado X.509 con una solicitud de firma RSE de administración, generando una
nueva llave que sera direccionado todo al archivo servidor.csr.
openssl req -new -key servidor.key -out servidor.csr
en la cual tendremos que llenar un formulario con algunos campos como:
El código del país en mi caso es Argentina así que ingreso “AR”.
La provincia donde nos encontramos, en mi caso “Corrientes”.
Ciudad en la que nos encontramos “Corrientes”.
El nombre de la empresa a la que pertenecemos “GaTux”.
Nombre de la sección en la organización “Informatica”.
Nombre completo “Leandro Facundo Carril”.
Tu E-mail “lean1989gatux@gmail.com”
Luego continua con Atributos extras del formulario donde nos vuelve a pedir la Password ingresada
en las llaves generadas y un nombre opcional el que podemos dejar en blanco.

redes


Ahora crearemos un certificado nuevo autofirmado de tipo x509 usando req (recuest), que
durará un año usando como certificado raíz a servidor.key. Con out marcamos el
certificado que deseamos firmar “servidor.crt”. En caso que no usemos la opción days se
creara un certificado por 30 días.

openssl x509 -req -days 365 -in servidor.csr -signkey servidor.key -out servidor.crt

Donde tendremos que ingresar nuevamente nuestra contraseña.

LAN


#Cambiamos de carpeta la llave y certificado

cp servidor.crt /etc/ssl/certs/
cp servidor.key /etc/ssl/private/


Abrimos el archivo de configuracion gato.linux.com-ssl.confmcedit /etc/apache2/sites-availables/gato.linux.com-ssl.conf
# reemplazamos y habilitamos la siguiente configuracion

SSLOptions +FakeBasicAuth +ExportCertData +StrictRequire
SSLCertificateFile /etc/ssl/certs/servidor.crt
SSLCertificateKeyFile /etc/ssl/private/servidor.key


debian


# habilitamos el archivo

a2ensite /etc/apache2/sites-availables/gato.linux.com-ssl.conf

servidores


# Reiniciamos apache y listo!!

/etc/init.d/apache2 restart

Configuracion

Linux

desplazamos donde dice Comprendo los Riegos.

le damos clik en agregar excepcion.

y por ultimo confirmar excepcion de seguridad.

y Whoala!!!

ssl