Administrador de Linux: crear certificados SSL

Antecedentes de TLS y SSL

TLS es el nuevo estándar para la seguridad de la capa de sockets, a partir de SSL. TLS ofrece mejores estándares de cifrado con otras características de envoltura de protocolo y seguridad que promueven SSL. A menudo, los términos TLS y SSL se utilizan indistintamente. Sin embargo, como administrador profesional de CentOS, es importante tener en cuenta las diferencias y la historia que separa a cada uno.

SSL sube a la versión 3.0. SSL fue desarrollado y promovido como estándar industrial bajo Netscape. Después de que Netscape fuera comprado por AOL (un ISP popular en los años 90 también conocido como America Online), AOL nunca promovió realmente el cambio necesario para las mejoras de seguridad en SSL.

En la versión 3.1, la tecnología SSL pasó a los estándares de sistemas abiertos y se cambió a TLS . Dado que los derechos de autor de SSL todavía eran propiedad de AOL, se acuñó un nuevo término:TLS - Transport Layer Security. Por tanto, es importante reconocer que TLS es de hecho diferente de SSL . Especialmente, dado que las tecnologías SSL más antiguas tienen problemas de seguridad conocidos y algunas se consideran obsoletas en la actualidad.

Note- Este tutorial utilizará el término TLS cuando se habla de tecnologías 3.1 y superior. Luego SSL al comentar específicamente sobre tecnologías SSL 3.0 e inferiores.

Versiones de SSL vs TLS

La siguiente tabla muestra cómo se relacionarían las versiones de TLS y SSL entre sí. He escuchado a algunas personas hablar en términos de SSL versión 3.2. Sin embargo, probablemente obtuvieron la terminología leyendo un blog. Como administrador profesional, siempre queremos utilizar la terminología estándar. Por lo tanto, al hablar, SSL debería ser una referencia a tecnologías pasadas. Las cosas simples pueden hacer que un buscador de trabajo de CentOS parezca un CS Major experimentado.

TLS SSL
- 3,0
1.0 3.1
1.1 3.2
1.2 3.3

TLS realiza dos funciones principales importantes para los usuarios de Internet en la actualidad: una, verifica quién es una parte, conocida comoauthentication. Dos, ofreceend-to-end encryption en la capa de transporte para los protocolos de nivel superior que carecen de esta característica nativa (ftp, http, protocolos de correo electrónico y más).

El primero, verifica quién es una de las partes y es importante para la seguridad como cifrado de extremo a extremo. Si un consumidor tiene una conexión encriptada a un sitio web que no está autorizado para recibir pagos, los datos financieros aún están en riesgo. Esto es lo que no tendrá ningún sitio de phishing:a properly signed TLS certificate verifying website operators are who they claim to be from a trusted CA.

Solo hay dos métodos para evitar no tener un certificado debidamente firmado: engañar al usuario para que permita la confianza de un navegador web para un certificado autofirmado o esperar que el usuario no sea experto en tecnología y no sepa la importancia de un certificado confiable Autoridad (o una CA).

En este tutorial, vamos a utilizar lo que se conoce como un autofirmado certificado. Esto significa que, sin otorgar explícitamente a este certificado el estado de confiable en cada navegador web que visite el sitio web, se mostrará un error que desalienta a los usuarios a visitar el sitio. Luego, hará que el usuario realice algunas acciones antes de acceder a un sitio con un certificado autofirmado. Recuerde, por razones de seguridad, esto es algo bueno.

Instalar y configurar openssl

openssl es el estándar para implementaciones de código abierto de TLS. openssl se usa en sistemas como Linux, distribuciones BSD, OS X e incluso es compatible con Windows.

openssl es importante, ya que proporciona seguridad en la capa de transporte y abstrae la programación detallada de autenticación y cifrado de extremo a extremo para un desarrollador. Es por eso que openssl se usa con casi todas las aplicaciones de código abierto que usan TLS. También se instala de forma predeterminada en todas las versiones modernas de Linux.

De forma predeterminada, openssl debe instalarse en CentOS desde al menos la versión 5 en adelante. Solo para asegurar, intentemos instalar openssl a través de YUM. Simplemente ejecute la instalación, ya que YUM es lo suficientemente inteligente como para informarnos si un paquete ya está instalado. Si estamos ejecutando una versión anterior de CentOS por razones de compatibilidad, hacer una instalación de yum -y asegurará que openssl se actualice contra la vulnerabilidad de hemorragia de corazón semi-reciente.

Al ejecutar el instalador, se descubrió que en realidad había una actualización de openssl .

[root@centos]# yum -y install openssl
Resolving Dependencies
--> Running transaction check
---> Package openssl.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Processing Dependency: openssl-libs(x86-64) = 1:1.0.1e-60.el7_3.1 for 
package: 1:openssl-1.0.1e-60.el7_3.1.x86_64
--> Running transaction check
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7 will be updated
---> Package openssl-libs.x86_64 1:1.0.1e-60.el7_3.1 will be an update
--> Finished Dependency Resolution 
Dependencies Resolved

===============================================================================
=============================================================================== 
 Package                               Arch
 Version                            Repository                        Size 
=============================================================================== 
=============================================================================== 
Updating: 
openssl                               x86_64                          
1:1.0.1e-60.el7_3.1                 updates                           713 k
Updating for dependencies:

Crear certificado autofirmado para OpenLDAP

Este es un método para crear un autofirmado para nuestra instalación anterior de OpenLDAP .

Para crear un certificado OpenLDAP autofirmado.

openssl req -new -x509 -nodes -out /etc/openldap/certs/myldaplocal.pem -keyout
/etc/openldap/certs/myldaplocal.pem -days 365

[root@centos]# openssl req -new -x509 -nodes -out /etc/openldap/certs/vmnet.pem 
-keyout /etc/openldap/certs/vmnet.pem -days 365 
Generating a 2048 bit RSA private key
.............................................+++
................................................+++
writing new private key to '/etc/openldap/certs/vmnet.pem'
-----
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) [XX]:US
State or Province Name (full name) []:Califonia
Locality Name (eg, city) [Default City]:LA
Organization Name (eg, company) [Default Company Ltd]:vmnet
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos
Email Address []:[email protected]
[root@centos]#

Ahora nuestros certificados OpenLDAP deberían colocarse en / etc / openldap / certs /

[root@centos]# ls /etc/openldap/certs/*.pem 
/etc/openldap/certs/vmnetcert.pem  /etc/openldap/certs/vmnetkey.pem
[root@centos]#

Como puede ver, tenemos tanto el certificado como la clave instalados en los directorios / etc / openldap / certs / . Finalmente, necesitamos cambiar los permisos de cada uno, ya que actualmente son propiedad del usuario root.

[root@centos]# chown -R  ldap:ldap /etc/openldap/certs/*.pem
[root@centos]# ls -ld /etc/openldap/certs/*.pem
-rw-r--r--. 1 ldap ldap 1395 Feb 20 10:00 /etc/openldap/certs/vmnetcert.pem 
-rw-r--r--. 1 ldap ldap 1704 Feb 20 10:00 /etc/openldap/certs/vmnetkey.pem
[root@centos]#

Crear certificado autofirmado para el servidor web Apache

En este tutorial, asumiremos que Apache ya está instalado. Instalamos Apache en otro tutorial (configuración de CentOS Firewall) y pasaremos a la instalación avanzada de Apache para un tutorial futuro. Entonces, si aún no ha instalado Apache, siga las instrucciones.

Una vez que se puede instalar Apache HTTPd, siga los siguientes pasos:

Step 1 - Instale mod_ssl para el servidor httpd Apache.

Primero necesitamos configurar Apache con mod_ssl. Usar el administrador de paquetes YUM es bastante simple:

[root@centos]# yum -y install mod_ssl

Luego, vuelva a cargar su demonio de Apache para asegurarse de que Apache use la nueva configuración.

[root@centos]# systemctl reload httpd

En este punto, Apache está configurado para admitir conexiones TLS en el host local.

Step 2 - Cree el certificado ssl autofirmado.

Primero, configuremos nuestro directorio de claves TLS privadas.

[root@centos]# mkdir /etc/ssl/private 
[root@centos]# chmod 700 /etc/ssl/private/

Note- Asegúrese de que solo la raíz tenga acceso de lectura / escritura a este directorio. Con acceso mundial de lectura / escritura, su clave privada se puede utilizar para descifrar el tráfico rastreado.

Generando el certificado y los archivos de claves.

[root@centos]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout 
/etc/ssl/private/self-gen-apache.key -out /etc/ssl/certs/self-sign-apache.crt 
Generating a 2048 bit RSA private key
..........+++
....+++
-----
Country Name (2 letter code) [XX]:US
State or Province Name (full name) []:xx
Locality Name (eg, city) [Default City]:xxxx
Organization Name (eg, company) [Default Company Ltd]:VMNET
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:centos.vmnet.local
Email Address []:

[root@centos]#

Note - Puede utilizar la dirección IP pública del servidor si no tiene un nombre de dominio registrado.

Echemos un vistazo a nuestro certificado:

[root@centos]# openssl x509 -in self-sign-apache.crt -text -noout
Certificate:
   Data:
      Version: 3 (0x2)
      Serial Number: 17620849408802622302 (0xf489d52d94550b5e)
   Signature Algorithm: sha256WithRSAEncryption
   Issuer: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
   Validity
      Not Before: Feb 24 07:07:55 2017 GMT
      Not After : Feb 24 07:07:55 2018 GMT
   Subject: C=US, ST=UT, L=xxxx, O=VMNET, CN=centos.vmnet.local
   Subject Public Key Info:
      Public Key Algorithm: rsaEncryption
         Public-Key: (2048 bit)
            Modulus:
               00:c1:74:3e:fc:03:ca:06:95:8d:3a:0b:7e:1a:56:
               f3:8d:de:c4:7e:ee:f9:fa:79:82:bf:db:a9:6d:2a:
               57:e5:4c:31:83:cf:92:c4:e7:16:57:59:02:9e:38:
               47:00:cd:b8:31:b8:34:55:1c:a3:5d:cd:b4:8c:b0:
               66:0c:0c:81:8b:7e:65:26:50:9d:b7:ab:78:95:a5:
               31:5e:87:81:cd:43:fc:4d:00:47:5e:06:d0:cb:71:
               9b:2a:ab:f0:90:ce:81:45:0d:ae:a8:84:80:c5:0e:
               79:8a:c1:9b:f4:38:5d:9e:94:4e:3a:3f:bd:cc:89:
               e5:96:4a:44:f5:3d:13:20:3d:6a:c6:4d:91:be:aa:
               ef:2e:d5:81:ea:82:c6:09:4f:40:74:c1:b1:37:6c:
               ff:50:08:dc:c8:f0:67:75:12:ab:cd:8d:3e:7b:59:
               e0:83:64:5d:0c:ab:93:e2:1c:78:f0:f4:80:9e:42: 
               7d:49:57:71:a2:96:c6:b8:44:16:93:6c:62:87:0f:
               5c:fe:df:29:89:03:6e:e5:6d:db:0a:65:b2:5e:1d:
               c8:07:3d:8a:f0:6c:7f:f3:b9:32:b4:97:f6:71:81:
               6b:97:e3:08:bd:d6:f8:19:40:f1:15:7e:f2:fd:a5:
               12:24:08:39:fa:b6:cc:69:4e:53:1d:7e:9a:be:4b:

Aquí hay una explicación para cada opción que usamos con el comando openssl :

Mando Acción
req -X509 Utilice el estándar PKI de gestión de CSR X.509 para la gestión de claves.
-nodos No proteja nuestro certificado con una contraseña. Apache debe poder usar el certificado sin interrumpir una frase de contraseña.
-días 2555 Indica la validez del certificado a 7 años o 2555 días. El período de tiempo se puede ajustar según sea necesario.
-newkey rsa: 2048 Especificado para generar tanto la clave como el certificado utilizando RSA a 2048 bits de longitud.

A continuación, queremos crear un grupo Diffie-Heliman para negociar PFS con los clientes.

[centos#] openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Esto llevará de 5 a 15 minutos.

Perfect Forward Secrecy- Se utiliza para proteger los datos de la sesión en caso de que la clave privada se haya visto comprometida. Esto generará una clave utilizada entre el cliente y el servidor que es única para cada sesión.

Ahora, agregue la configuración de Perfect Forward Secrecy a nuestro certificado.

[root@centos]# cat /etc/ssl/certs/dhparam.pem | tee -a /etc/ssl/certs/self-sign-apache.crt

Configurar Apache para usar archivos de clave y certificado

Haremos cambios en /etc/httpd/conf.d/ssl.conf -

Realizaremos los siguientes cambios en ssl.conf . Sin embargo, antes de hacer eso, deberíamos hacer una copia de seguridad del archivo original. Al realizar cambios en un servidor de producción en un editor de texto avanzado como vi o emcas , es una buena práctica hacer siempre una copia de seguridad de los archivos de configuración antes de realizar ediciones.

[root@centos]# cp /etc/httpd/conf.d/ssl.conf ~/

Ahora continuemos con nuestras ediciones después de copiar una copia de trabajo conocida de ssl.conf a la raíz de nuestra carpeta de inicio.

  • Locate
  • Edite DocumentRoot y ServerName de la siguiente manera.
\\# General setup for the virtual host, inherited from global configuration
DocumentRoot "/var/www/html"
ServerName centos.vmnet.local:443

DocumentRootesta es la ruta a su directorio apache predeterminado. En esta carpeta debe haber una página predeterminada que mostrará una solicitud HTTP solicitando la página predeterminada de su servidor web o sitio.

ServerNamees el nombre del servidor que puede ser una dirección IP o el nombre de host del servidor. Para TLS, es una buena práctica crear un certificado con un nombre de host. De nuestro tutorial de OpenLdap, creamos un nombre de host de centos en el dominio de la empresa local: vmnet.local

Ahora queremos comentar las siguientes líneas.

SSLProtocol

#   SSL Protocol support:
# List the enable protocol levels with which clients will be able to
# connect.  Disable SSLv2 access by default:
 ~~~~> #SSLProtocol all -SSLv2
 
#   SSL Cipher Suite:
#   List the ciphers that the client is permitted to negotiate.
#   See the mod_ssl documentation for a complete list.
 ~~~~> #SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5:!SEED:!IDEA

Luego, informe a Apache dónde encontrar nuestro certificado y el par de claves pública / privada.

Especifique la ruta a nuestro archivo de certificado autofirmado

#   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/ssl/certs/self-sign-apache.crt
specify path to our private key file
#   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/ssl/private/self-gen-apache.key

Finalmente, necesitamos permitir conexiones entrantes a https a través del puerto 443.