Mostrando entradas con la etiqueta ssl. Mostrar todas las entradas
Mostrando entradas con la etiqueta ssl. Mostrar todas las entradas

miércoles, 4 de marzo de 2009

Cerificados en IIS y Apache

Mucho se ha hablado sobre los certificados y su uso y no es un secreto para nadie las ventajas que esto trae sobre todo en la seguridad, pero hay poca documentación practica de su uso yo comparto con uds mi experiencia en aplicaciones web.

Primero que nada deben tener instalado un servidor web sea IIS o Apache y configurarlo para que solo se acceda de modo seguro (entiendase por esto https).

Luego configurar los servidores web para que solo acceda un usuario que tenga certificado, luego de esto podemos saber y definir que usuarios con certificados pueden acceder  a tu aplicacion web y hasta crear una session.

Veamos la variable $_SERVER (arreglo) tiene los datos del certificado haciendo algo como esto los obtenemos todos:

foreach( $_SERVER as $key => $value ) {
   echo "$key --> $value<br>\n";
}

pero no es lo que queremos solamente el nombre, pero este esta en $_SERVER["CERT_SUBJECT"]; imprimiendo esta variable sacamos todos lo datos del certificado cliente, pero si solo queremos el nombre hariamos algo como esto:

$cadena_original = $_SERVER["CERT_SUBJECT"];

$posicion = $posicion = strpos($cadena_original, "CN");

$nombre = substr($cadena_original, $posicion+3);

echo "Hola $nombre";

La primera linea de codigo ya la esplique.
La segunda establece la posicion donde aparece el Comon Name(CN) y mas tarde...
En la linea tres cojemos el nombre y lo guardamos en la variable $nombre luego solo nos queda mostrarlo o...


$_SESSION['login']     = "$nombre";

y asi queda creada la sesion con el CN del certificado de usuario.

Muchas gracias y si no entienden algo comenten sera un gusto responderles.



martes, 3 de febrero de 2009

Usando certificados SSL II

Utilizaremos el paquete Openssl para generar los certificados. De no tenerlo instalado publicare mas adelante otro articulo con ejemplos de cómo hacerlo, también hay mucha bibliografía de esto por la red por si estas apurad@.
Teniendo ya instalado el Openssl.
Primero creamos el certificado y la clave privada de nuestra autoridad de certificación:
1. req -x509 -newkey rsa:2048 -days 3650 -keyout CAXplotaKey.pem -out CAXplotacert.pem
Lo más importante de este comando es el parámetro days, ya que no queremos que dentro de un año nos caduque el certificado de nuestra propia entidad. Yo le pongo 10 años. Este comando genera dos archivos, la clave privada con la que firmaremos nuestros futuros certificados y el certificado con la clave pública que instalaremos, si queremos no recibir avisos, en el navegador. Este comando te pedirá algunos datos (nombre de empresa, país…) y, sobre todo, una contraseña. Deberás recordarla cada vez que vayas a firmar un certificado SSL, así que no la olvides. Ya tenemos nuestra CA creada.
Creamos ahora el certificado SSL para nuestro dominio (Servidor Web):
1. genrsa -des3 -out claveprivada.pem 2048
2. req -new -key claveprivada.pem -out certificado.pem
El primer comando crea la clave privada de nuestro certificado. Te pedirá otra contraseña, esta vez para la clave privada. Recuérdala también.
El segundo comando genera la petición de certificado sobre la clave privada anterior. Te pedirá la contraseña de la clave privada anterior. Es importante que el CN o Comun Name de este certificado sea la url del servidor web o servidor virtual es decir infosoc.cu, google.com, localhost, 127.0.0.1 etc.
De darte el error “Unable to load config info from /usr/local/ssl/openssl.cnf”, Es que seguramente estas trabajando en Windows debes especificar donde esta el archivo openssl.cnf con el comando –config y luego la dirección.
En este punto tenemos cuatro archivos, la clave y el certificado de tu CA y la clave y la solicitud de tu certificado SSL. Sólo queda firmar el certificado con nuestra CA y ya podremos utilizarlo.
Nota: En algunos casos pude no serte útil la clave de tu certificado en .pem así que puedes cambiarle el formato de esta manera:
1. rsa –in claveprivada.pem -out claveprivada.key

Para poder firmar la petición de certificado y así generar nuestro certificado debemos generar primero un fichero de texto con algunos parámetros de configuración:
cat configservidor.cnf
1. basicConstraints = critical,CA:FALSE
2. extendedKeyUsage = serverAuth
Y firmamos el certificado.
1. x509 -CA CAXplotacert.pem -CAkey CAXplotaKey.pem -req -extfile configservidor.cnf -in certificado.pem -days 3650 -CAcreateserial -sha1 -out certificado-servidor.pem
Ya tenemos un certificado SSL preparado para utilizar en nuestro servidor web. En nuestro caso es certificado-servidor.pem.
Certificados de cliente
Ahora que ya tenemos el certificado de nuestro servidor web (autofirmado) llega el momento de crear certificados para nuestros clientes de manera que si alguien intenta acceder a nuestra aplicación sin uno de ellos se le prohíba el paso.
Crearemos primero un archivo de configuración con los parámetros que necesitaremos.
cat configcliente.cnf
1. basicConstraints = critical,CA:FALSE
2. extendedKeyUsage = clientAuth
Con esto daremos instrucciones de que es un certificado cliente a la hora de firmar el certificado.
Creamos ahora, igual que hacíamos antes, la clave privada y la solicitud de certificado.
1. genrsa -des3 -out clave-cliente.pem 2048
2. req -new -key clave-cliente.pem -out certificado-cliente-req.pem
Como antes, al generar la clave te pedirá una contraseña que deberás introducir después, al hacer la solicitud de certificado. Los datos que te pide esta solicitud, como ocurría antes, los podrás leer posteriormente para comprobar datos o lo que estimes oportuno, así que es importante que prestes atención.
Firmamos ahora el certificado con nuestra CA:
1. x509 -CA CAXplotacert.pem -CAkey CAXplotaKey.pem -req -in certificado-cliente-req.pem -days 3650 -extfile configcliente.cnf -CAcreateserial -sha1 -out certificado-cliente.pem

Bien, pero ¿no quedamos que es el cliente el que debe instalar el certificado? Sí, ahí vamos ahora. El certificado que acabamos de generar lo debes instalar en tu navegador web, no en el servidor, así que habrá que convertirlo a algún formato que puedan entender. Para esto hacemos lo siguiente:
1. openssl pkcs12 -export -in certificado-cliente.pem -inkey clave-cliente.pem -certfile CAXplotacert.pem -out cliente.p12
Nos pedirá la contraseña de la clave privada del certificado y nos solicitará otra para el que va a generar. Es importante poner contraseña al certificado final ya que es el que vas a enviar a tus usuarios y pretendes que sólo estos puedan utilizarlo, así que poner una contraseña nunca está demás.

Esto es todo por ahora posteriormente les diré como configurar el servidor apache para que trabaje bajo https y pida los certificados de los clientes para poder ver los contenidos web.

lunes, 2 de febrero de 2009

Usando certificados SSL I

A menudo creamos aplicaciones web con un backend de gestión que, por ser también web, exponemos públicamente a cualquiera que consiga averiguar la URL. Habitualmente estos sistemas son de acceso restringido, sólo un pequeño grupo de usuarios lo utiliza.

En escenarios donde tenemos un número de usuarios acotado y se necesita autenticación, se puede utilizar un mecanismo de certificados que aporten mayor seguridad al sistema, de esta manera solo aquellos usuarios que tengan el certificado en cuestión tendrán acceso a la máquina.

En este grupo de artículos veremos como permitir el acceso a nuestra aplicación a aquellos usuarios que dispongan de un certificado que previamente les habremos enviado mientras que si no lo tienen no podrán acceder de ningún modo. Este método se puede combinar, además, con el tradicional usuario/clave para dar mayor seguridad. Podremos incluso verificar que el nombre de usuario que se intenta utilizar se corresponde con el certificado de usuario que le hemos enviado y no intenta autentificarse con otro.

Conceptos básicos sobre certificados SSL
El método que vamos a ver se basa en certificados SSL. Se utilizan para asegurar la información entre un cliente y el servidor y prevenir escuchas ya que la información viaja encriptada. Ésta es su función y la hace aunque no esté firmado por una autoridad certificadora (CA) oficial o, incluso, aunque esté caducado. Sigue asegurando las comunicaciones.

Los navegadores web reconocen, por defecto, una serie de autoridades certificadoras como Verisign o Thawte, aunque hay muchas más. Puedes verlas todas en las opciones de tu navegador. Pero, ¿qué es realmente lo que hace una Autoridad Certificadora? Firmar. Firma tu certificado SSL asegurando que os pertenece a ti y a tu dominio. Cuando un cliente accede a tu dominio y descarga el certificado SSL, busca dentro de sus certificados de CA’s si hay alguno que lo haya firmado. Si lo encuentra, acepta tu certificado y no ocurre nada especial, pero si no encuentra la CA lanza un aviso indicando que no se reconoce la autoridad que lo firma. Esto no quiere decir que el certificado no sea válido, lo único que ocurre es que no sabe quien lo firma. Esto significa, por tanto, que tú mismo puedes ser tu propia autoridad certificadora y firmar tus certificados, funcionarán perfectamente y cumplirán su cometido de asegurar las comunicaciones cliente/servidor.

Comercialmente o en sistemas de acceso público en general, no se recomiendan certificados autofirmados ya que el aviso de autoridad de certificación no reconocida generará desconfianza entre tus usuarios, pero en entorno intranet o de paneles de adminsitración es un método ideal.
El servidor puede requerir, además, otro certificado al cliente, de manera que ámbos extremos autentifiquen la comunicación. Esto es precisamente lo que vamos a hacer hoy en este artículo.

Según lo que hemos explicado, los certificados autofirmados son igual de seguros que los firmados por una autoridad certificadora. Como en el ejemplo que estamos viendo estamos asegurando el acceso a nuestra aplicación para un grupo reducido de usuarios, no hay ningún problema en utilizar un certificado firmado por nosotros mismos ya que nuestros usuarios sabrán que no hay ningún problema. Pero esto no es todo, por esta misma razón podemos decir a los usuarios que se instalen el certificado público de nuestra CA, tal y como hacen las CA oficiales, y automáticamente el navegador comenzará a confiar en nuestros certificados ya que, ahora sí, tiene un certificado de una CA que firma los certificados SSL.

Como resumen, nuestro trabjo consistirá en:
• Crear nuestra autoridad certificadora y su certificado.
• Crear el certificado SSL para nuestro servidor web firmado por nuestra CA.
• Crear los certificados de cliente para nuestros usuarios.
• Habilitar la lectura de los datos SSL desde PHP.