Forzar HTTPS (SSL) con mod_rewrite en Apache

Si tu no puedes usar php para forzar el uso de https (ssl), podeis usar mod_rewrite para hacerlo.

Escribir los siguiente parametros en el archivo .htaccess de vuestro host:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://www.domain.com/$1 [R,L]

Para hacerlo solamente dentro de una carpeta:

RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteCond %{REQUEST_URI} somefolder
RewriteRule ^(.*)$ https://www.domain.com/somefolder/$1 [R,L]

Proteger subdominios en Plesk más SSL

Un pequeño detalle que hasta la fecha (y que me corrijan si me equivoco) que no ha solucionado la gente de Plesk, es el de poder proteger directorios fuera de la raíz principal del dominio creado, mediante la opción “Protected Directories”. Por ejemplo, queremos crear un subdominio en nuestro dominio principal.

Nombre de dominio: www.probando.com

Nombre de subdominio: subdominio.probando.com

Las raíces de uno y otro son:

www.probando.com /httpdocs o /httpsdocs

subdominio.probando.com /subdomains/subdominio/httpdocs o /subdomains/subdominio/httpdocs

El problema aquí es que Plesk (probado en la versión 8.3.0) no reconoce las raices de directorio que no sean /httpdocs o /httpsdocs. Por lo tanto, si creamos un subdominio, no podemos protegerlo “comodamente” al menos. Hay dos opciones. Si tenemos licencias para varios dominios, podemos crear un dominio nuevo, quitarle las www y asignarle el nombre de subdominio pero eso es un desperdicio de la licencia. La otra opción es crear el htaccess y htpasswd a pelo y es muy fácil. Pero como se que no me voy a acordar dentro de 1 año, lo pongo aquí y aquí se queda :D De paso, aprovecho para comentar como se puede utilizar los certificados que genera el propio panel de Plesk, que, a falta de uno comprado a otro proveedor ya nos pueden servir de algo.

No hace falta entrar por ssh, con un ftp lo podemos hacer todo. Listo los pasos desde cero.

  1. Domains->Nombredenuestrodominio->Certificates->Add New Certificate (configuramos los datos y clickamos en Self-Signed. Ya tenemos el certificado creado para ese dominio)
  2. Si queremos habilitar el certificado para el dominio principal: Domains->Nombredenuestrodominio->Setup (habilitamos el soporte SSL)
  3. Creamos el subdominio: Domains->Nombredenuestrodominio->Subdomains->Add Subdomain (habilitamos el soporte SSL)
  4. Automáticamente se crea una carpeta en /subdomains/<nombre>
  5. Ahora mismo tenemos creado un certificado para el dominio y hemos creado un subdominio. Vamos a proteger ese directorio. En este caso, que vamos a utilizar el protocolo https, necesitamos trabajar con la carpeta raíz del subdominio /subdomains/<nombre>/httpsdocs
  6. Utilizamos cualquier forma de generar un htaccess y su correspondiente htpasswd. Al final del post hay un link al respecto. Lo fundamental es saber la ruta completa hasta la carpeta que hace de DocumentRoot. Podemos mirarlo haciendo un archivo php y llamando a phpinfo()
  7. Cuando tengamos los archivos los subimos a /subdomains/<nombre>/httpsdocs. El nombre correcto de cada uno ha de ser .htaccess y .htpasswd. Si se desaparecen al subirlos por ftp, fuerza el ver archivos ocultos ;)
  8. Accede a https://subdominio.nombredetudomonio.com y prueba a entrar. Si no te coge la contraseña asegurate de que la raíz hasta el .htpasswd es correcta. Si no has querido soporte ssl será http://etc.etc.etc.

Ejemplo de htaccess:

AuthUserFile /var/www/vhosts/nombrededominio/subdomains/panel/httpsdocs/.htpasswd
AuthGroupFile /dev/null
AuthName "Password Protected Area"
AuthType Basic
<limit GET POST>
require valid-user
</limit>

Ejemplo de htpasswd:

usuariovalido:jkldfZdlfjds890

Links:

Error de Plesk con SSL en /var/log/sw-cp-server/error_log

El error que sale continuamente en el log de Plesk /var/log/sw-cp-server/error_log es el siguiente : Error: (connections.c.299) SSL: 1 error:140780E5:SSL routines:SSL23_READ:ssl handshake failure

La solución parece ser un bug de Plesk , aunque estuve googleando un buen rato, no encontré mucho sobre el tema, el caso es que estaba obteniendo este error en /var/log/sw-cp-server/error_log, además aparecía cada 6 minutos por lo que en 3 días con el servidor funcionando, ya tenía dos historicos del archivo comprimidos en .gz.

Finalmente, buscando en la ayuda de Plesk, encontré la forma de que no volviera a aparecer más, la verdad es que no tiene mucha complicación, lo único que tenemos que hacer es, generar un certificado, dependiendo de las necesidades de cada uno, se puede comprar o autogenerarlo, os hago un copy/paste de la solución en la ayuda de Plesk .

En caso de que necesite generar un certificado autofirmado, siga este procedimiento:

1. Vaya a Inicio > Seguridad > Certificados SSL. Se le mostrará una lista de los certificados SSL existentes en su repositorio.
2. Haga clic en Añadir Certificado SSL.
3. Indique las propiedades del certificado:
* Nombre del certificado. Este le ayudará a identificar este certificado en el repositorio.
* Nivel de Encriptación. Escoja el nivel de encriptación para su certificado SSL. Le recomendamos que escoja un valor superior a 1024 bits.
* Indique su ubicación y el nombre de la organización. Los valores introducidos no deben exceder los 64 símbolos permitidos.
* indique el nombre del servidor para el que ha adquirido el certificado SSL. Por ejemplo: your-domain.com
* Introduzca su dirección de email.
4. Haga clic en el botón Autofirmado. Se generará su certificado y se almacenará en el repositorio.