¿Cómo configurar SSL en Apache?

10

He instalado apache en RHEL 6. Todo funciona bien. Qué deben hacerse todos los cambios y configuraciones para usar https: // localhost: 443 / .

Si cambio el "Listen 80" a 443, arroja un error de conexión SSL

"Error 107 (net :: ERR_SSL_PROTOCOL_ERROR): error de protocolo SSL".

monumentos
fuente

Respuestas:

13

Si está utilizando apache2, debe hacer lo siguiente:

Paso 1: utilice OpenSSL para generar las claves que se utilizan para proteger su sitio. Estas claves se utilizan al cifrar y descifrar el tráfico a su sitio seguro.

$ openssl genrsa -out mydomain.key 1024

Este comando creará una clave privada de 1024 bits y la colocará en el archivo mydomain.key.

Paso 2: genera tu propio certificado.

$ openssl req -new -key mydomain.key -x509 -out mydomain.crt

Paso 3: Mantenga la clave privada en el directorio /etc/apache2/ssl.key/y el certificado en el directorio /etc/apache2/ssl.crt/.

Nota: El ssl.keydirectorio solo debe ser legible por root.

Paso 4: Ahora necesitas editar el httpd.confarchivo /etc/apache2.

Ahora este archivo debe incluir contenido como este:

NameVirtualHost *:80
NameVirtualHost *:443
Listen 443

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /srv/www/htdocs/mydomain
ServerName www.mydomain.com
ServerAlias mydomain.com
</VirtualHost>


<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot /srv/www/htdocs/mydomain-secure
ServerName mail.mydomain.com
SSLEngine on
SSLCertificateFile /etc/apache2/ssl.crt/mydomain.crt
SSLCertificateKeyFile /etc/apache2/ssl.key/mydomain.key
</VirtualHost>


<Directory /srv/www/htdocs/mydomain-secure>
SSLRequireSSL
</Directory>


<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /srv/www/htdocs/mydomain
ServerName mail.mydomain.com
RedirectMatch permanent (/.*) https://mail.mydomain.com$1
</VirtualHost>
Pradeepchhetri
fuente
Las primeras tres líneas no son necesarias. 1. NameVirtualHostestá en desuso y se eliminará en futuras versiones de Apache. Actualmente ya es un no-op. 2. Listen 443puede causar problemas si apache ya está configurado para escuchar en el puerto 443, que en muchas distribuciones de Linux ya es el caso. Solo agregue si está seguro de que esta línea no está configurada en otro lugar.
lanoxx
3

No cambies Listen 80a 443adentro /etc/httpd/conf/httpd.conf. SSL está configurado en /etc/httpd/conf.d/ssl.conf. En RHEL 6, SSL está habilitado y escucha de forma predeterminada con un certificado autofirmado.

Puede acceder al sitio predeterminado utilizando SSL simplemente navegando https://localhost(no necesita agregar el puerto al final de la URL).

Si desea reenviar todas las solicitudes HTTP a HTTPS (que es lo que creo que está tratando de lograr), puede agregar una redirección permanente o usar el módulo Apache mod_rewrite.

La forma más fácil y segura es configurar una redirección permanente. Habilite hosts virtuales con nombre y agregue una Redirectdirectiva al VirtualHost en /etc/httpd/conf/httpd.conf.

NameVirtualHost *:80
<VirtualHost *:80>
   ServerName localhost
   Redirect permanent / https://localhost
</VirtualHost>

Utilizando mod_rewrite, también crea un host virtual con nombre. Este no es el método recomendado, pero funcionará.

NameVirtualHost *:80
<VirtualHost *:80>
   # Enable the Rewrite engine
   RewriteEngine On
   # Make sure the connection is not already HTTPS
   RewriteCond %{HTTPS} !=on
   # This rewrites the URL and forwards to https
   RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

Si desea desactivar SSL, comente estas líneas /etc/httpd/conf.d/ssl.confy reinicie Apache.

LoadModule ssl_module modules/mod_ssl.so
Listen 443
George M
fuente
En realidad, si agrega el paquete mod_ssl para RHEL6, crea un /etc/httpd/conf.d/ssl.conf, que carga el módulo y configura <VirtualHost _default_:443>, con todos los parámetros necesarios, cada uno con comentarios. El mod_sslpaquete no se instala automáticamente si instaló el httpdpaquete.
jsbillings
1
Me gustaría agregar solo una cosa a su reescritura: use en [R=301,L]lugar de solo [R,L], de esta manera la reescritura está usando la opción permanente de los códigos de estado HTTP 3xx .
Dcestari