jueves, 5 de noviembre de 2015

3 Maneras de instalar SSL en Apache

Forma 1

Acerca de HTTPS.

HTTPS es la versión segura del protocolo HTTP, inventada en 1996 por Netscape Communications Corporation. Es es un protocolo dependiente de HTTP, consistiendo de una combinación de éste con un mecanismo de transporte SSL oTLS, garantizando así una protección razonable durante la comunicación cliente-servidor. Es ampliamente utilizado en la red mundial (WWW o World Wide Web) para comunicaciones como transacciones bancarias y pago de bienes y servicios.
El servicio utiliza el puerto 443 por TCP para realizar las comunicaciones (la comunicación normal para HTTP utiliza el 80 por TCP). El esquema URI (Uniform Resource Identifier o Identificador Uniforme de Recursos) es, comparando sintaxis, idéntico al de HTTP (http:), utilizándose como «https:» seguido del subconjunto denominado URL (UniformResource Locator o Localizador Uniforme de Recursos). Ejemplo: https://www.empresa.com.mx/

Acerca de RSA.

RSA, acrónimo de los apellidos de sus autores, Ron Rivest, Adi Shamir y Len Adleman, es un algoritmo para el ciframiento de claves públicas que fue publicado en 1977, patentado en EE.UU. en 1983 por el el Instituto Tecnológico de Michigan (MIT). RSA es utilizado ampliamente en todo el mundo para los protocolos destinados para el comercio electrónico.

Acerca de Triple DES.

Triple DES o TDES, es un algoritmo que realiza un triple cifrado DES, desarrollado por IBM en 1978. Su origen tuvo como finalidad el agrandar la longitud de una clave sin necesidad de cambiar el algoritmo de ciframiento, lo cual lo hace más seguro que el algoritmo DES, obligando a un atacante el tener que triplicar el número de operaciones para poder hacer daño. A pesar de que actualmente está siendo reemplazado por el algoritmo AES (Advanced EncryptionStandard, también conocido como Rijndael), sigue siendo estándar para las tarjetas de crédito y operaciones de comercio electrónico.

Acerca de X.509.

X.509 es un estándar ITU-T (estandarización de Telecomunicaciones de la International Telecommunication Union) para infraestructura de claves públicas (PKI o Public Key Infrastructure). Entre otras cosas, establece los estándares para certificados de claves públicas y un algoritmo para validación de ruta de certificación. Este último se encarga de verificar que la ruta de un certificado sea válida bajo una infraestructura de clave pública determinada. Es decir, desde el certificado inicial, pasando por certificados intermedios, hasta el certificado de confianza emitido por una Autoridad Certificadora (CA o Certification Authority).
URL: http://es.wikipedia.org/wiki/X.509

Acerca de OpenSSL.

OpenSSL es una implementación libre, de código abierto, de los protocolos SSL (Secure Sockets Layer o Nivel de Zócalo Seguro) y TLS (Transport Layer Security o Seguridad para Nivel de Transporte). Está basado sobre el extinto proyecto SSLeay, iniciado por Eric Young y Tim Hudson, hasta que éstos comenzaron a trabajar para la división de seguridad de EMC Corporation.

Acerca de mod_ssl.

Mod_ssl es un módulo para el servidor HTTP Apache, el cual provee soporte para SSL versiones 2 y 3 y TLS versión 1. Es una contribución de Ralf S. Engeschall, derivado del trabajo de Ben Laurie.

Requisitos.

Es necesario disponer de una dirección IP pública para cada sitio de red virtual que se quiera configurar con soporteSSL/TLS. Debido a la naturaleza de los protocolos SSL y TLS, es imposible utilizar múltiples anfitriones virtuales con soporte SSL/TLS utilizando una misma dirección IP. Cada certificado utilizado requerirá una dirección IP independiente en el anfitrión virtual.
El paquete mod_ssl instala el archivo /etc/httpd/conf.d/ssl.conf, mismo que es innecesario modificar si se utilizan archivos de inclusión, con extensión *.conf, dentro del directorio /etc/httpd/conf.d/. Ésto se recomienda a fin de preservar la configuración predeterminada y poder disponer de ésta, brindando un punto de retorno en el caso de que alguna configuración diese problemas, limitándose solo a modificar las opciones del archivo ssl.conf para configurar las rutas del certificado y firma digital.

Modificaciones necesarias en el muro cortafuegos.

Es necesario abrir —además del puerto 80— el puerto 443 por TCP (https). Configure el muro cortafuegos como se describe en el documento titulado «Configuración básica de Apache»

Equipamiento lógico necesario.

Instalación a través de yum.

Ejecute los siguiente si se utiliza de CentOS o bien Red Hat™ Enterprise Linux:
yum -y install mod_ssl

Procedimientos.

Generando firma digital y certificado.

Acceda al sistema como root.
Durante los siguiente procedimientos se utilizará `hostname` para calcular automáticamente el nombre de anfitrión del servidor. Ejecute lo siguiente para verificar cuál es el nombre de anfitrión del sistema y lo que será utilizado automáticamente en el nombre de los archivos de certificados y firmas digitales.
De existir, elimine los archivos de certificados y firmas digitales previos.
rm -f /etc/pki/tls/*/`hostname`.*
Se debe crear una clave con algoritmo RSA de 4096 octetos y estructura x509, la cual se cifra utilizado Triple DES(Data Encryption Standard), almacenado en formato PEM de modo que sea interpretable como texto ASCII. se solicitará una contraseña para asignar a la firma digital, por lo que se recomienda utilizar una muy buena contraseña, la cual, mientras más complicada y difícil sea, mejor.
openssl genrsa -des3 \
    -out /etc/pki/tls/private/`hostname`.key 4096
Si se utiliza el archivo *.key para la configuración del anfitrión virtual, se requerirá de interacción del administrador cada vez que se tenga que iniciar o reiniciar el servicio httpd, ingresando la contraseña de la firma digital. Este es el procedimiento más seguro, sin embargo, debido a que requiere tener que ingresar una contraseña cada vez que se inicie el servicio httpd, resulta más conveniente generar una firma digital RSA, la cual permita iniciar normalmente el servicio y sin interacción alguna.
openssl rsa \
    -in /etc/pki/tls/private/`hostname`.key \
    -out /etc/pki/tls/private/`hostname`.pem
El archivo *.pem será el que se especifique más adelante como valor de la opción SSLCertificateKeyFile en la configuración de Apache.
Ejecute lo siguiente para crear el archivo CSR (Certificate Signing Request):
openssl req -sha256 -new \
    -key /etc/pki/tls/private/`hostname`.key \
    -out /etc/pki/tls/certs/`hostname`.csr
Lo anterior solicitará se ingresen varios datos:
  • Código de dos letras para el país.
  • Estado o provincia.
  • Ciudad.
  • Nombre de la empresa o razón social.
  • Unidad o sección.
  • Nombre del anfitrión. Debe ser el nombre con el que se accederá hacia el servidor y dicho nombre deberá estar resuelto en un DNS.
  • Dirección de correo electrónico válida del administrador del sistema.
  • De manera opcional se puede añadir otra contraseña y nuevamente el nombre de la empresa. Poco recomendado, a menos que quiera ingresar ésta cada vez que se inicie o reinicie el servicio httpd.
La salida será similar a la siguiente:
You are about to be asked to enter information that will be
incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or
a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:MX
State or Province Name (full name) [Berkshire]:Distrito Federal
Locality Name (eg, city) [Newbury]:Mexico
Organization Name (eg, company) [My Company Ltd]:Empresa, S.A. de C.V.
Organizational Unit Name (eg, section) []:Direccion Comercial
Common Name (eg, your name or your server's hostname) []:www.empresa.com.mx
Email Address []:alguien@algo.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
El archivo de solicitud CSR resultante es el que se entrega al Autoridad de Certificación o Registration Authority —como Verisign, Comodo, Geotrust, etc.— que a su vez entrega de vuelta un archivo de certificado firmado.
Ejecute lo siguiente para crear un certificado auto-firmado con estructura X.509 en el que se establece una validez por 1825 días (5 años):
openssl x509 -sha256 -req -days 1825 \
    -in /etc/pki/tls/certs/`hostname`.csr \
    -signkey /etc/pki/tls/private/`hostname`.key \
    -out /etc/pki/tls/certs/`hostname`.crt
Cambie los permisos de todos los archivos creados a sólo lectura para root.
chmod 400 /etc/pki/tls/*/`hostname`.*

Configuración simple de Apache para un solo dominio.

Confirme cuál es el nombre de anfitrión del sistema:
hostname
Edite el archivo /etc/httpd/conf.d/ssl.conf:
vim /etc/httpd/conf.d/ssl.conf
Localice lo siguiente:
#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/pki/tls/certs/localhost.crt

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
Cambie localhost.crt y localhost.key por www.empresa.com.mx.crt y www.empresa.com.mx.pem, dondewww.empresa.com.mx es sólo un ejemplo hipotético y corresponde al nombre de anfitrión del servidor:
#   Server Certificate:
# Point SSLCertificateFile at a PEM encoded certificate.  If
# the certificate is encrypted, then you will be prompted for a
# pass phrase.  Note that a kill -HUP will prompt again.  A new
# certificate can be generated using the genkey(1) command.
SSLCertificateFile /etc/pki/tls/certs/www.empresa.com.mx.crt

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
SSLCertificateKeyFile /etc/pki/tls/private/www.empresa.com.mx.pem
Localice lo siguiente:
#   SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect.  Disable SSLv2 access by default:
SSLProtocol all -SSLv2
Notará que está deshabilitado el protocolo SSLv2. Por razones de seguridad es buena idea deshabilitar también el soporte para SSLv3. Es un protocolo muy inseguro y susceptible a la tristemente célebre vulnerabilidad conocida comoPOODLE. Si atacantes explotan exitosamente esta vulnerabilidad sólo necesitan hacer alrededor de 256 solicitudes SSL 3.0 para revelar datos de las conexiones cifradas. Lo más inteligente que puede hacer cualquier administrador de sistemas es deshabilitar el soporte para SSLv3.
#   SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect.  Disable SSLv2 access by default:
SSLProtocol all -SSLv2 -SSLv3
Reinicie el servicio para que surtan efecto los cambios:
service httpd restart
Lo anterior deberá de proceder sin solicitar la contraseña de la firma digital. Si se solicita una contraseña, significa que estableció www.empresa.com.mx.key como valor de la opción SSLCertificateKeyFile en la configuración de Apache.

Configuración de Apache para múltiples dominios.

Omita el procedimiento anterior.
Es importante resaltar que cada dominio deberá contar con su propia dirección IP, pues el protocolo HTTPS impedirá utilizar más de un certificado por dirección IP.
El primer paso consiste en crear la estructura de directorios para el anfitrión virtual.
mkdir -p /var/www/dominio/{cgi-bin,html,logs,etc}
De todos directorios creados, sólo /var/www/dominio/html/var/www/dominio/etc y /var/www/dominio/cgi-binpueden pertenecer a un usuario sin privilegios, quien administrará este anfitrión virtual.
Crear el archivo /etc/httpd/conf.d/dominio.conf:
vim /etc/httpd/conf.d/dominio.conf
Adaptar la siguiente plantilla como contenido de este archivo, donde a.b.c.d corresponde a una dirección IP y dominiocorresponde al nombre de dominio a configurar para el anfitrión virtual:
### dominio ###
NameVirtualHost a.b.c.d:80
 <VirtualHost a.b.c.d:80>
  ServerAdmin webmaster@dominio
  DocumentRoot /var/www/dominio/html
  ServerName www.dominio
  ServerAlias dominio
  Redirect 301 / https://www.dominio/
  CustomLog logs/dominio-access_log combined
  Errorlog logs/dominio-error_log
 </VirtualHost>

NameVirtualHost a.b.c.d:443
 <VirtualHost a.b.c.d:443>
  ServerAdmin webmaster@dominio
  DocumentRoot /var/www/dominio/html
  ServerName www.dominio
  ScriptAlias /cgi-bin/ /var/www/dominio/cgi-bin/
  <Directory "/var/www/dominio/cgi-bin">
   SSLOptions +StdEnvVars
  </Directory>
  SSLEngine on
  SSLProtocol all -SSLv2
  SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
  SSLCertificateFile /etc/pki/tls/certs/dominio.crt
  SSLCertificateKeyFile /etc/pki/tls/private/dominio.pem
  SetEnvIf User-Agent ".*MSIE.*" \
   nokeepalive ssl-unclean-shutdown \
   downgrade-1.0 force-response-1.0
  CustomLog logs/dominio-ssl_request_log \
   "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
  Errorlog logs/dominio-ssl_error_log
  TransferLog logs/dominio-ssl_access_log
  LogLevel warn
 </VirtualHost>
A fin de que surtan efecto los cambios, es necesario reiniciar el servicio httpd.
service httpd restart
Lo anterior deberá de proceder sin solicitar la contraseña de la firma digital (la que asignó cuando se creodominio.key). En caso contrario, significa que estableció dominio.key como valor de la opción SSLCertificateKeyFileen la configuración de Apache.

Comprobación.

Acceda con cualquier navegador HTTP hacia https://www.dominio/ a fin de verificar que todo esté trabajando correctamente. Tras aceptar el certificado, en el caso de que éste no haya sido firmado por un RA, deberá poderse observar un signo en la barra de estado del navegador, el cual indica que se trata de una conexión segura.



Forma 2


INSTALACIÓN SSL EN…APACHE OPENSSL

Para instalar un certificado SSL en su servidor debe antes generar un CSR o petición de firma (PASO 1) con el que generaremos su certificado que posteriormente instalará en su dominio, ip o intranet (PASO 2).

PASO 1: GENERAR UN CSR O PETICIÓN DE FIRMA.

Para generar una llave privada y la petición de firma del certificado SSL (CSR), debe introducir el siguiente comando:
openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr
Esta orden crea dos archivos:
1) El archivo "myserver.key" contiene su llave privada del que le recomendamos realizar una copia de seguridad para poder instalar el mismo certificado en caso de migración o perdida de datos de su servidor.
2) El archivo "server.csr", es el CSR, para el cual tendremos que introducir los datos que queremos que aparezcan en el certificado, junto con el "Common Name", valor de importancia ya que será en nombre con el que se expedirá el certificado.
Puede que algunos campos habrá un valor predefinido. Si introduce '.' el campo se dejará en blanco.
—–
Country Name (2 letter code) [ ]: (Código del país – 2 letras)
State or Province Name [ ]: (Provincia)
Locality Name [ ]: (Ciudad)
Organization Name [ ]: (Organización)
Organizational Unit Name [ ]: (Departamento)
Common Name* [ ]: (dominio, subdominio ó ip para el certificado)
Email Address [ ]: (dirección de e-mail)
después le pedirá los siguientes datos extras que se enviarán con su petición del certificado
A challenge password [ ]: (Contraseña)
An optional company name [ ]: (Nombre opcional de la organización)
—–
* Common Name (CN). Nombre de dominio para el que se va a solicitar el certificado. Asegúrese de que todo es correcto y que contiene un dominio principal o subdominio (ejm: www.hispassl.com, seguridad.hispassl.com,…).
Los campos destinados al emailoptional company name y challenge password pueden dejarse en blanco.
Su CSR ya ha sido generado. Copie y guarde todo su contenido comprendido desde:
—–BEGIN CERTIFICATE REQUEST—–
                  ….hasta
—–END CERTIFICATE REQUEST—–
Necesitará utilizarlo durante el proceso de compra de su certificado. Si ya posee el CSR puede pasar a comprar su certificado haciendo click aqui . 

PASO 2: INSTALACIÓN SSL

Primero instalaremos los certificados intermedio y raiz, y posteriormente el certificado propio:
1) Instalación del certificado intermedio:
Deberá instalar un certificado intermedio de la Autoridad Certificadora (CA) para garantizar sesiones de 256 bits con los navegadores. Este certificado lo recibirá por e-mail junto con su certificado propio como gs_intermediate_ca.crt
Deberá realizar los siguientes pasos:
  1. Guarde su archivo en apache/conf/ssl/
  2. PARE el servidor apache.
  3. Localice el archivo httpd.conf y ábralo con un editor de texto.
  4. Localice la directiva "SSLCaCertificateFile" en su httpd.conf y elimine el simbolo # de la linea.
  5. Modifique el directorio del final de la linea haciendo referencia al certificado gs_intermediate_ca.crt recién guardado. Por ejemplo: SSLCaCertificateFile /usr/local/apache/conf/ssl/gs_intermediate_ca.crt
  6. Finalmente reinicie Apache.
2) Instalación del certificado propio
Copie su certificado en un directorio seguro que utilice exclusivamente para este fin.
Por defecto: /usr/local/apache/conf/ssl.crt/ o /etc/httpd/conf/ssl.crt/.
Abra el archivo httpd.conf file en una shell con edición de texto.
Localice el SSL Host Virtual asociado su certificado. Verifique que tiene las dos siguientes directivas en su host virtual, en caso contrario debrá añadirlas manualmente:
SSLCertificateFile /usr/local/apache/conf/ssl.crt/nombrededominio_ext.crt (o servidor.crt)
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/nombrededominio_ext (o servidor.key)
Advertencia: Algunas versiones de Apache almacenan la información de los alojamientos virtuales en el archivo ssl.conf. Si su httpd.conf no contiene información sobre estos necesitará localizar el archivo ssl.conf y editar las lineas indicadas.
Guarde los cambios y salga del editor de consola.
Reinicie su servidor apache.

Forma 3

Instalación del Certificado SSL - Apache OpenSSL
Haga la Instalación de su Certificado SSL y los Certificados de Intermedio en Apache

Propósito de este artículo: este artículo ofrece un tutorial para instalar su certificado en Apache (OpenSSL) para las versiones 1 y 2. Si este artículo no está relacionado con lo que usted está buscando, utilice el campo de búsqueda arriba para buscar su solución.
Para Apache v1.X
1. Descargue el/los certificado(s) intermedio(s) pertinente(s) y guárdelo(s) en un editor de texto con el formato de archivo
intermedio .pem:

• DomainSSL: Validación de dominio (certificado intermedio)

• OrganizationSSL: Validación de organización (certificado intermedio)

• ExtendedSSL: Validación ampliada (certificado intermedio y cruzado)
2. Copie su certificado de SSL desde el correo electrónico de entrega (o descárguelo desde su cuenta de GlobalSign (GCC) y péguelo en un editor de texto. Guarde el archivo como nombrededominio.pem.
3. Copie los archivos nombrededominio.pem y certificadointermedio.pem en la carpeta en la cual desea guardar su certificados.
4. Abra el archivo httpd.conf (en algunas instalaciones la sección de SSL se guarda en un archivo independiente que lleva por nombre ssl.conf) utilizando su editor de texto, y localice la sección de host virtual (virtualhost) del sitio que desea proteger mediante el certificado SSL.

La sección de su host virtual deberá contener los siguientes elementos:

• Archivo de cadena de certificación (SSLCertificateChainFile): debe corresponderse con los certificados raíz intermedios pertinentes.

• Archivo de certificado SSL (SSLCertificateFile): debe corresponderse con el certificado final (nombrededominio.pem o nombrededominio.crt)

• Archivo de clave del certificado SSL (SSLCertificateKeyFile): debe corresponderse con el archivo de clave privada asociado con su certificado.
5. Guarde las modificaciones y salga del programa.
6. Reinicie Apache.
 
Para Apache v2.X
1. Descargue el certificado raíz de GlobalSign pertinente y guárdelo en un editor de texto con el nombre gs_root.pem.

• DomainSSL y OrganisationSSL: GlobalSign Root CA

• ExtendedSSL: GlobalSign Root CA
2. Descargue el/los certificado(s) intermedio(s) pertinente(s) y guárdelo(s) en un editor de texto con el formato de archivo intermedio .pem:

• DomainSSL: Validación de dominio (certificado intermedio)

• OrganizationSSL: Validación de organización (certificado intermedio)

• ExtendedSSL: Validación ampliada (certificado intermedio y cruzado)
3. Copie su certificado desde el correo electrónico de entrega (o descárguelo desde su cuenta de GlobalSign [GCC]) y péguelo en un editor de texto. Guarde el archivo como nombrededominio.pem.
4. Copie los archivos nombrededominio.pem y certificadointermedio.pem en la carpeta en la cual desea guardar sus certificados.
5. Abra el archivo httpd.conf (en algunas instalaciones la sección de SSL se guarda en un archivo independiente que lleva por nombre ssl.conf) utilizando su editor de texto, y localice la sección de host virtual (virtualhost) del sitio que desea proteger mediante el certificado SSL.

La sección de su host virtual deberá contener los siguientes elementos:

• Archivo de certificado SSL CA (SSLCertificateChainFile): debe corresponderse con el certificado raíz de GlobalSign pertinente.

• Archivo de cadena de certificación (SSLCertificateChainFile): debe corresponderse con los certificados raíz intermedios pertinentes que ha creado durante el paso 1 anterior.

• Archivo de certificado SSL (SSLCertificateFile): debe corresponderse con el certificado final (nombrededominio.pem o nombrededominio.crt)

• Archivo de clave del certificado SSL (SSLCertificateKeyFile): debe corresponderse con el archivo de clave privada asociado con su certificado.
6. Guarde las modificaciones y salga del programa.
7. Reinicie Apache

No hay comentarios :

Publicar un comentario