make then make install
La función principal de SSL en Internet es facilitar el cifrado y la confianza que permite a un navegador web validar la autenticidad de un sitio web. Sin embargo, SSL también funciona al revés: los certificados SSL de cliente se pueden usar para autenticar un cliente en el servidor web. Piense en pares de claves públicas / privadas SSH, si eso le resulta familiar. En esta entrada de blog describiré los pasos para crear un certificado de autoridad de certificación, firmar un certificado de servidor e instalarlo en Apache, y crear un certificado de cliente en un formato utilizado por los navegadores web.
Instalar un sistema operativo y Apache está fuera del alcance de la publicación del blog y asumo que tiene una instalación de Apache en funcionamiento antes de que comencemos. Estoy usando un sistema Ubuntu 12.04.4 en esta entrada de blog.
Generar un certificado de entidad de certificación (CA)
El primer paso es generar un certificado de CA. Este certificado de CA no necesita generarse en su servidor web, puede instalarse en cualquier máquina que use para generar certificados SSL. Una vez creado, el certificado de CA actuará como autoridad de confianza para los certificados de servidor y cliente. Es el equivalente de Verisign o Comodos en el mundo real de SSL, sin embargo, no querrá usar su certificado de CA para un sitio web público importante, ya que su confianza no se integrará en los navegadores de todas partes.
Genere su certificado de CA con este comando:
openssl req -newkey rsa:4096 -keyform PEM -keyout ca.key -x509 -days 3650 -outform PEM -out ca.cer
Entonces manténgalos en secreto, manténgalos a salvo. Si alguien obtuviera estos archivos, sería capaz de generar certificados de servidor y cliente en los que confiaría nuestro servidor web, ya que se configurará a continuación.
Genere su clave y certificado SSL de servidor Apache
Ahora que tenemos nuestro certificado de CA, podemos generar el certificado SSL que utilizará Apache.
- Generar una clave privada de servidor.
openssl genrsa -out server.key 4096
- Utilice la clave privada del servidor para generar una solicitud de generación de certificados.
openssl req -new -key server.key -out server.req -sha256
- Utilice la solicitud de generación de certificados y el certificado de CA para generar el certificado del servidor.Limpieza
openssl x509 -req -in server.req -CA ca.cer -CAkey ca.key -set_serial 100 -extensions server -days 1460 -outform PEM -out server.cer -sha256
- : ahora que se ha creado el certificado, ya no necesitamos la solicitud.
rm server.req
Instale el certificado de servidor en Apache
Mi servidor está ejecutando Ubuntu 12.04.4, por lo que todas las rutas y comandos a los que se hace referencia aquí son para ese sistema operativo.
- Copie el certificado de CA en un lugar permanente. Necesitaremos especificar nuestro certificado de CA en Apache, ya que es una CA autogenerada y no una incluida en los sistemas operativos de todas partes.
cp ca.cer /etc/ssl/certs/
- Copie el certificado del servidor y la clave privada al lugar permanente.
cp server.cer /etc/ssl/certs/server.crtcp server.key /etc/ssl/private/server.key
- Active el módulo SSL en Apache.
a2enmod ssl
- Active el sitio SSL en Apache y deshabilite el sitio HTTP.
a2ensite default-ssla2dissite default
- Edite /etc / apache2 / sites-enabled / 000-default-ssl (el archivo de configuración para el sitio habilitado para SSL) y agregue:
SSLCACertificateFile /etc/ssl/certs/ca.cerSSLCertificateFile /etc/ssl/certs/server.crtSSLCertificateKeyFile /etc/ssl/private/server.key
- Aplique la configuración en Apache.
service apache2 restart
En este momento, si visita su sitio https, obtendrá un error SSL similar a «SSL peer no pudo negociar un conjunto aceptable de parámetros de seguridad.»Eso es bueno, significa que su sitio no aceptará una conexión a menos que su navegador esté utilizando un certificado de cliente de confianza. Generaremos uno ahora.
Generar un certificado SSL de cliente
- Generar una clave privada para el cliente SSL.
openssl genrsa -out client.key 4096
- Utilice la clave privada del cliente para generar una solicitud de certificado.
openssl req -new -key client.key -out client.req
- Emita el certificado de cliente mediante la solicitud de certificado y la clave / certificado de CA.
openssl x509 -req -in client.req -CA ca.cer -CAkey ca.key -set_serial 101 -extensions client -days 365 -outform PEM -out client.cer
- Convierta el certificado de cliente y la clave privada al formato pkcs#12 para uso de los navegadores.
openssl pkcs12 -export -inkey client.key -in client.cer -out client.p12
- Limpiar: elimine la clave privada del cliente, el certificado del cliente y los archivos de solicitud del cliente, ya que el pkcs12 tiene todo lo necesario.
rm client.key client.cer client.req
Parece un proceso bastante similar a generar un certificado de servidor, ¿no?
Por último, importe el .archivo p12 en su navegador. En Windows, puede hacer doble clic en el archivo que desea importar al almacén de claves del sistema operativo que utilizarán IE y Chrome. Para Firefox, abra las Opciones – > Avanzado – > Certificados – > Ver certificados – > Sus certificados e importe el certificado.
Ahora, visite su sitio web con el navegador donde importó el certificado de cliente. Es probable que se le pregunte qué certificado de cliente usar, selecciónelo. ¡Entonces se le autenticará y se le permitirá entrar!