Práctica 11: Entidad Certificadora
Objetivo: Verificar la identidad de un Cliente por parte de un Servidor durante una transacción.
Forma de trabajo:
- Esta práctica se realizará de manera individual.
Planteamiento del Problema:
- ¿Cómo se puede verificar la identidad de un Cliente por parte de un Servidor durante una transacción para evitar suplantaciones? (a parte del Login y Password).
Solución del Problema:
- Esto se logra por medio de un tercer elemento en nuestro sistema, el Certified Authority (CA), el cual se encargará de autenticar la transacción que está realizando el Cliente con el Servidor.
Desarrollo: Parte 1 - Cliente
- El Cliente va con la "Autoridad Certificadora" y adquiere un Certificado (realmente es una "Firma digital").
- La "Firma digital" queda almacenada en el servidor de la "Autoridad Certificadora"
- La "Autoridad Certificadora" también almacena el "Login" del usuario.
- La "Firma digital" NUNCA VIAJA por Internet.
El Cliente se conecta al Servidor y descarga una página (formulario en HTML) donde se autenticará.
- El formulario que llena el cliente lleva lo siguiente:
- Login
- Password
- Firma Digital
- A paritr de la "Firma" se calcula el "Certificado1" por medio de una función Javascript que hace lo siguiente:
- Certificado1 = MD5 ("Firma digital" + Login)
(hacer click para hacer mas grande):
(hacer click para hacer mas grande):
(hacer click para hacer mas grande):
Desarrollo: Parte 2 - Servidor
- El Servidor recibe (por medio de PHP) lo siguiente:
- Login
- Password
- Certificado1
- El Servidor valida el "Password" del usuario y si no es correcta, le vuelve a preguntar los datos al Cliente.
- Si el "Password" es correcto entonces el Servidor envía a la "Autoridad Certificadora" el "Login" y "Certificado" que le llegaron por parte del cliente.
- La "Autoridad Certificadora" recibe lo siguiente:
- Login
- Certificado1
- La "Autoridad Certificadora" genera el Certificado2 (de la misma manera que lo hizo el cliente, con la misma función y con la "Firma Digital" que tiene almacenada).
- La "Autoridad Certificadora" regresa al "Servidor" el "Certificado2".
- El "Servidor" recibe el "Certificado2" y lo compara con el "Certificado1", si son iguales entonces se Autentica al Cliente e imprime un mensaje en pantalla indicado que "El Certificado Enviado es válido".
Envío de información entre 2 páginas en PHP en formato JSON con generacion de certificado (hacer click para hacer mas grande):
Generación de firmas digitales usando MD5 y SHA (hacer click para hacer mas grande):
Notas:
- La "Firma Digital" nunca viaja, sólo los certificados.
- La "Firma Digital" la conoce el cliente que llena el formulario y la conoce la "autoridad certificadora", la cual la tiene almacenada en una tabla de una base de datos que previamente fué llenada de manera manual con todas las firmas de los clientes.
- El "Certificado1" es generado en el cliente usando JavaScript.
- El "Certificado2" es generado en en "Servidor2" ("Autoridad Certificadora"), usando PHP.
- Se utilizó JSON para la transferencia de datos entre servidores pero se pueden utilizar otros métodos.
Ejemplos de apoyo para realizar la práctica:
Reporte del alumno (resultados):
- Subir al GitHub Classroom los siguientes códigos:
- "login.htm": Es el código HTML donde el cliente introduce los datos, genera el "Certificado1" y los envía.
- "servidor1.php": Es el código PHP que recibe los datos del cliente, valida login y passwaord y luego envía el login del usuario al "servidor2". Espera la respuesta y recibe el "Certificado2", lo compara con el "Certificado1" que le llegó del cliente y valida si está correcto.
- "servidor1.sql": Es un scritpt SQL para crear la estructura de la base, tablas y registros que se hayan ocupado para el servidor1.
- "servidor2.php": Es la "Autoridad Certificadora", recibe los datos del servidor1, genera el "Certificado2" (usando la "Firma Digital" del cliente que tiene almacenada en una base de datos) y lo envía de regreso al servidor1.
- "servidor2.sql": Es un scritpt SQL para crear la estructura de la base, tablas y registros que se hayan ocupado para el servidor2.
FECHA DE ENTREGA LÍMITE: Lunes 31 de mayo - 23:59 horas, en GitHub Classroom.
Portal de Tecnología desarrollado por: Rogelio Ferreira Escutia