lunes, 29 de junio de 2020

Unidad SSD activar TRIM en systemd

Este manual trata sobre la configuración óptima de las unidades SSD (unidad de estado sólido) en Debian GNU/Linux a partir de Debian 10 (Buster)

TRIM, es un protocolo que debe tener tanto el sistema operativo como el disco SSD.

TRIM, informa a una unidad de estado sólido (SSD) de los bloques de datos que ya no están en uso cuando borramos un fichero, el sistema operativo lo marca como espacio utilizable para asegurar las posteriores operaciones de escritura a máxima velocidad.

Recomendación de las unidades SSD: No llenar en exceso la unidad SSD, ya que estas no pueden sobrescribir los datos existentes, primero se tiene que borrarlos antes de escribir los nuevos datos.

ADVERTENCIA

En los orígenes de las unidades SSD, algunas versiones de firmware de algunas marcas, tenían errores que provocaban la corrupción de datos cuando se usaban de cierta manera. Por esta razón, el controlador Linux ata mantiene una "lista negra" de ciertas cosas que no debería hacer en ciertas combinaciones de unidad / firmware. Esta lista está en la fuente de Linux en drivers / ata / libata-core.c . Si tiene una combinación de controlador / unidad en la lista negra, seguramente que ya se encuentra subsanado el error en las nuevas recientes versiones del kernel. Por esto es importantisimo tener el kernel actualizado.

Es esencial

- Utilizar un Linux (kernel) lo mas reciente posible.
- Utilizar el último firmware para el SSD
- Utilizar el sistema de archivos ext4 o btrfs
- Tener suficiente DRAM requerida para operar sin espacio de intercambio bajo cargas de trabajo normales.
    
    
Particiones y Alineamiento

Debemos considerar utilizar el esquema de partición Multi HDD / SSD para mantener datos variables y masivos en los HDD y establecer una redundancia alternativa, si el sistema también tiene un HDD disponible (disco giratorio interno o externo).

Desde Debian 7 (Wheezy), todas las herramientas deben alinear automáticamente los sistemas de archivos y las particiones al tamaño de página de 4096 bytes. Este es uno de los aspectos de optimización más importantes.


Montaje de sistemas de archivos en la unidad SSD

El rendimiento de las unidades SSD también está influenciada por las opciones de montaje del sistema de archivos:

- Usaremos la opción de montaje "noatime" en / etc / fstab, para deshabilitar las escrituras en disco cada vez que se lee un archivo. 

Esto mejora el rendimiento de lectura del sistema de archivos tanto para SSD como para HDD.


Reducir el uso del espacio de intercambio en disco (SWAP)

La memoria Swap o memoria de intercambio, la utiliza el sistema operativo cuando la memoria RAM física comienza a escasear. Entonces hace uso del disco duro o unidad SSD del ordenador como memoría RAM, para que los programas y servicios puedan seguir trabajando y no se bloqueen.



 Instalación y configuración 

1- Instalar el paquete: util-linux

Antes de continuar tenemos que asegurarnos que tenemos instalado el paquete util-linux, normalmente viene instalado por defecto en Debian GNU/Linux. Para asegurarnos, instalamos el paquete util-lilnux

Como siempre hacemos en este blog y con la ayuda del programa synaptic, marcamos para instalar el paquete util-linux.

# apt-get install util-linux




2- Comprobamos si nuestra unidad SSD soporta TRIM 

Vamos a comprobar si nuestra unidad SSD soporta TRIM, para ello usamos el siguiente comando, en una consola: 

# hdparm -I /dev/sda | grep "TRIM supported"


Si nuestra unidad ssd soporta TRIM no devolverá el siguiente mensaje



Nota -1: La unidad sda la debemos substituir por el disco donde se encuentra la (/) raíz del sistema operativo, ya que puede ser sdb, sdc,etc... no poner el número de partición, en este caso es sda.

Nota -2: Para saber que unidad es la nuestra, podemos usar el comando, lsblk

Nota -3: Si nuestra unidad SSD no soporta TRIM, no tenemos que seguir, puesto que no funcionará. Ya que TRIM esta creado para unidades SSD



3- Activar TRIM

Para activar TRIM usamos el siguiente comando:

# systemctl enable fstrim.timer




4- Arrancar TRIM

Para arrancar TRIM usamos el siguiente comando:

# systemctl start fstrim.timer




5- Reducir el uso de la partición SWAP

La memoria Swap o memoria de intercambio, la utiliza el sistema operativo cuando la memoria RAM física empieza a escasear.

Swappiness hace referencia al uso de la memoria Swap en relación a la RAM es una propiedad del Núcleo Linux que permite establecer un balance entre el uso del espacio de intercambio o Swap y la memoria RAM.

Podemos modificar el porcentaje de memoria swap a utilizar, de manera que apuremos el uso de memoria RAM antes de comenzar a usar la memoria de intercambio o swap.

La caché es en gran parte responsable del almacenamiento de datos virtuales, para que pueda ser recuperada cuando sea necesario. Es mas rápido para el sistema operativo extraer datos desde la memoria RAM, que del disco duro.

El kernel de Linux tiene una serie de búferes de escritura de memoria ajustables, que definen cómo el sistema usa la memoria para retrasar las escrituras en el disco.

vm.swappiness=1
vm.swappiness, puede tener un valor entre 0 y 100, el valor predeterminado es 60. Un valor bajo hace que el kernel evite el intercambio, un valor más alto hace que el kernel intente usar el espacio de intercambio, los valores más pequeños reducen el uso del intercambio o swap.

vm.vfs_cache_pressure=50
vm.vfs_cache_pressure, el valor predeterminado es 100. Controla la tendencia del kernel a recuperar la memoria que se usa para el almacenamiento en caché de cachés VFS, en lugar de pagecache y swap, poner un valor bajo permite que las operaciones se realicen en RAM, para ganar velocidad, así como bajar la cantidad de operaciones en disco SSD, aumentando su vida util.

vm.dirty_writeback_centisecs=1500
vm.dirty_writeback_centicecs, el valor predeterminado 500 ó 5 segundos. Escrituras en el disco del búfer/retraso, es la frecuencia con la que los procesos pdflush/flush/kdmflush se activan y comprueban si es necesario trabajar.

vm.dirty_expire_centisecs=4500
vm.dirty_expire_centisecs, el valor predeterminado 3000 ó 30 segundos. Escrituras en el disco del búfer/retraso. Esto define el intervalo entre las operaciones de reescritura.

vm.dirty_ratio=30
vm.dirty_ratio, el valor predeterminado es 20%, es el porcentaje máximo de memoria que se debe usar, que puede consumir páginas sucias antes de que todos los procesos deban escribir buffers sucios de nuevo en el disco, y cuando se alcanza este valor, se bloquea toda la I/O para cualquier escritura nueva hasta que se hayan vaciado las páginas sucias.

vm.dirty_background_ratio=15
vm.dirty_background_ratio, el valor predeterminado es 10%, Cuando la cantidad de pagecache sucio excede este porcentaje, los hilos de reescritura comienzan a escribir en la memoria sucia. es el porcentaje máximo de memoria ((Caché + Libre) - Asignada)

De esta forma, solo cuando es estrictamente necesario y como último recurso, se hace uso de la memoria swap o memoria de intercambio.

Para cambiar los valores predeterminados, de los parámetros del kernel, usamos el el siguiente comando en una consola:

# nano /etc/sysctl.conf



Y añadimos al final del fichero:

vm.swappiness=1
vm.vfs_cache_pressure=50
vm.dirty_writeback_centisecs=1500
vm.dirty_expire_centisecs=4500
vm.dirty_ratio=30
vm.dirty_background_ratio=15

Guardamos los cambios pulsando la combinación de teclas:
Control + o
Luego pulsamos la tecla Intro del teclado para aceptar

Cerramos el fichero pulsando la combinación de teclas:
Control + x



Podemos ver las estadísticas en la página caché, en /proc/vmstat:

cat /proc/vmstat | egrep "dirty|writeback"





Usando el comando free -m o free -h en una consola, podemos ver la memoria RAM ocupada y la swap casi sin utilizar.



6- Mover los archivos temporales a la RAM

En Debian GNU/Linux es posible montar directorios en memoria RAM, esto nos permite obtener más velocidad en la escritura y lectura de datos, así como bajar la cantidad de operaciones en la unidad SSD, aumentando la vida útil al disminuir la escritura en la unidad SSD.

/tmp, es un directorio volátil donde se almacenan los datos temporales utilizados por las aplicaciones y usuarios, la ventaja de montar /tmp en la RAM, es que los datos temporales que se escriben en /tmp serán mas rápidos de leer y escribir, ya que es la memoria RAM la que se usa, y no la unidad SSD.

La velocidad de los programas o servicios que usan /tmp se incrementa, así como la limpieza en cada reinicio, el directorio se vacía porque reside en RAM, y no en la unidad SSD.

tmpfs, normalmente también usa espacio de intercambio en situaciones en las que hay poca memoria volátil disponible, serán almacenados en RAM y no en nuestro disco duro, por lo que ganaremos en velocidad de escritura y lectura.

fstab (file systems table), se encuentra en el directorio /etc como parte de la configuración del sistema. Lo más destacado de este archivo es la lista de discos y particiones disponibles. En ella se indica como montar cada dispositivo y qué configuración utilizar.

El archivo /etc/fstab, es usado para definir cómo las particiones, los distintos dispositivos de bloques o sistemas de archivos remotos deben ser montados e integrados en el sistema. El punto de montaje para el sistema de ficheros.

Colocando los archivos temporales en la memoria RAM evitamos la escritura constante en la unidad SSD, y por consiguiente alargaremos la vida a la unidad SSD.

# nano /etc/fstab


Añadimos al final del fichero, las dos siguientes líneas:

tmpfs /tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,defaults 0 0
tmpfs /var/tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,defaults 0 0




7- Montar el disco optimizando la lectura y escritura de datos

En el mismo archivo del punto anterior /etc/fstab.

Hay tres maneras de identificar una partición o un dispositivo de almacenamiento en /etc/fstab:

- Por el nombre del kernel
- Por la etiqueta
- Por la UUID (identificador único universal).

La ventaja de usar etiquetas o UUID, es que no dependen del orden en el que las unidades están conectadas físicamente en el equipo.

Todas las particiones y dispositivos tienen un UUID único. Los UUID son generados por las utilidades de creación del sistema de archivos al crear o formatear una partición.

atime, Debian GNU/Linux mantiene un registro que escribe en el disco de forma predeterminada de cada lectura efectuada en los archivos, es un inconveniente ya que incluso la lectura de un archivo desde la memoria caché (RAM) es registrado en el disco, por lo tanto este parámetro resulta contraproducente para un disco SSD al estar escribiendo constantemente nos crea un desgaste, que debemos evitar.

noatime, deshabilita completamente la actualización del tiempo de acceso a los archivos. Con esté parámetro mejoramos el rendimiento del equipo y aumentamos la vida útil del SSD. Si esta opción la configuramos en /etc/fstab, ganamos en velocidad y liberamos recursos de nuestro procesador y memoria.

NOTA: Hay que tener mucho cuidado al editar el fstab, ya que una mala configuración, puede hacer que el sistema no arranque.

Antes de nada, hacemos una copia de seguridad del archivo fstab:

# cp /etc/fstab /etc/fstab.old



Ahora vamos a configurar /etc/fstab añadiendo el parámetro noatime (desactiva atime).

Para ello escribimos en una consola el siguiente comando:

# nano /etc/fstab



Nos vamos a la línea de nuestra partición raiz / que pone:

UUID=xxxx-xxx-xx / ext4 errors=remount-ro 0 1

( las x son dígitos hexadecimales )

Añadimos el parámetro:

noatime

Seguido de una coma ( , ) sin espacios, delante de:

errors=remount-ro 0 1

Nos queda la línea de nuestra partición raiz / de está forma:

UUID=14cc8f17-321c-4638-b87b-c071ad790c48 / ext4 noatime,errors=remount-ro 0 1


Guardamos los cambios pulsando la combinación de teclas:
Control + o
Luego pulsamos la tecla Intro del teclado para aceptar

Cerramos el fichero pulsando la combinación de teclas:
Control + x





8- Actualizar todas las imágenes del kernel

Después de cambiar las opciones del sistema de archivos, en /etc/fstab actualizamos la configuración en todas las imágenes de initramfs:

# update-initramfs -u -k all




9- Reiniciar el sistema operativo Debian GNU/Linux





Videotutoriales


 




 Resumen de comandos: 

apt-get install util-linux
hdparm -I /dev/sda | grep "TRIM supported"
systemctl enable fstrim.timer
systemctl start fstrim.timer


===========================================
nano /etc/sysctl.conf

Y añadimos al final del fichero:

vm.swappiness=1
vm.vfs_cache_pressure=50
vm.dirty_writeback_centisecs=1500
vm.dirty_expire_centisecs=4500
vm.dirty_ratio=30
vm.dirty_background_ratio=15
===========================================


===========================================
nano /etc/fstab

Añadimos al final del fichero, las dos siguientes líneas:

tmpfs /tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,defaults 0 0
tmpfs /var/tmp tmpfs noatime,nodiratime,nodev,nosuid,mode=1777,defaults 0 0
===========================================


cp /etc/fstab /etc/fstab.old

===========================================
nano /etc/fstab


Nos vamos a la línea de nuestra partición raiz / que pone:
UUID=xxxx-xxx-xx / ext4 errors=remount-ro 0 1
( las x son dígitos hexadecimales )
Añadimos el parámetro:
noatime
Seguido de una coma ( , ) sin espacios, delante de:
errors=remount-ro 0 1
===========================================


update-initramfs -u -k all

Reiniciar el sistema operativo





 Otros comando interesantes para TRIM 

systemctl cat fstrim.service  (para ver como esta configurado)



systemctl cat fstrim.timer (para ver que se ejecuta semanalmente)




systemctl status fstrim.timer (para ver si se esta ejecutando el servicio, si esta activo)




update-initramfs -u -k all (para actualizar todas la entradas de los kernel)

journalctl -u fstrim.service



journalctl -u fstrim.timer











domingo, 31 de mayo de 2020

phpFileManager administrador de archivos web




phpFileManager es una herramienta completa de administración del sistema de archivos en un solo fichero.

Esta es una herramienta destinada a un acceso rápido a los archivos, y también para verificar la configuración y seguridad del servidor php.


El script se puede renombrar y desplegar en una url únicamente conocida por usted, y ofrece protección con contraseña.

Características:

- árbol de directorios, con carga ajax
- copiar / mover / eliminar / crear / renombrar / editar / ver / chmod archivos y carpetas
- tar / zip / bzip / gzip con soporte nativo
- editor de código con resaltado de sintaxis, usando el tema Ace y Monokai
- emulador de terminal de shell
- portscan usando sockets PHP
- información del servidor
- Cargas múltiples
- protección con contraseña
- funciona en linux / mac / windows
- php4 / php5 / php6 / php7 compatible
- Traducciones incluidas para inglés / portugués / español / catalán / chino / holandés / francés / alemán / italiano / coreano / ruso / polaco / turco / ucraniano



Licencia:

phpFileManager es software libre; usted puede redistribuirlo y / o modificarlo bajo los términos de cualquiera de las siguientes licencias en su elección:

-  GNU General Public License Version 2 o posterior (la "GPL");

-  GNU Lesser General Public License Versión 2.1 o posterior (la "LGPL");
-  Mozilla Public License Version 1.1 o posterior (el "MPL").



¿Es seguro?

Respuesta corta. ¡SI! phpFileManager es seguro, pero para ello debe establecer una contraseña en phpFileManager.

El script se puede renombrar y desplegar en una URL conocida únicamente por usted, que lo ayuda a mantenerlo oculto.


¡Pero tienes que establecer una contraseña! ¡Obviamente!
Si no lo hace, este script permitirá que cualquier persona acceda a él, con la configuración predeterminada.




Demostración en línea:

Puede probar phpFileManager, para ver si le gusta y si lo quiere usar. Esta es una instalación de demostración pública y se reiniciará cada hora.


https://phpfm-demo.000webhostapp.com ¡



Puede descargar el programa desde aquí:

https://www.dulldusk.com/phpfm/


Algunas capturas de pantalla

















domingo, 12 de abril de 2020

Servidor web Apache2 + SSL Auto-firmado (https)

Al añadir el soporte SSL a nuestro servidor web Apache, permite establecer conexiones seguras y encriptadas entre cliente y servidor.

Es decir, vamos a hacer que nuestro servidor Apache use el protocolo HTTPS para una navegación más segura.

Usando un certificado SSL auto-firmado, que sirve para garantizar que nuestra página web, tienda, foro, blog, etc.. es un lugar seguro y confiable donde introducir datos como nombres de usuarios y contraseñas, ya que SSL es un protocolo de seguridad que establece una conexión segura entre cliente y servidor.

Nota importante: Debemos tener en cuenta que un certificado SSL auto-firmado solo será válido para hacer pruebas en un servidor local, pero nunca se debe utilizar en servidores de internet, para nuestra página web, tienda, foro, blog, etc.. ya que nuestro certificado no tendrá validez para los usuarios que la visiten, al no estar firmado por una autoridad certificadora (Certificate Authority (CA)) registrada ni reconocida que garantice que la página es segura y encriptada. Si queremos un  certificado para nuestra página web, tienda, foro, blog, etc... tendremos que pagar por él. O mejor aun, usar un certificado libre como Let’s Encrypt que es una Autoridad de Certificación gratuita, automatizada, y abierta.


Información sobre SSL (https), OpenSSL, mod_ssl y Cortafuegos


Acerca de SSL (https)

HTTPS es la versión segura del protocolo HTTP, creada en 1996 por Netscape Communications Corporation. Es un protocolo dependiente de HTTP, es una combinación de éste con un mecanismo de transporte SSL, garantizando así una protección razonable durante la comunicación cliente-servidor. Es ampliamente utilizado en internet, para comunicaciones seguras como transacciones bancarias, venta de entradas, pago online, etc...

El servicio utiliza el puerto 443 por TCP para realizar las comunicaciones (la comunicación normal de HTTP utiliza el puerto 80 por TCP).


Acerca de OpenSSL (https)

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).


Acerca de mod_ssl

Mod_ssl es un módulo para el servidor web Apache HTTP, el cual provee soporte para SSL


Modificaciones necesarias en el cortafuegos.

Es necesario abrir en el cortafuegos, además del puerto 80 por TCP (http),  el puerto 443 por TCP (https). Configure el cortafuegos para permitir conexiones en ambos puerto, pues en caso contrario el cortafuegos no te permitirá navegar por internet y te dará un error, o no te cargará las paginas web.


Para este tutorial vamos a usar el servidor web Apache, la suite openssl y un servidor Debian GNU/Linux.


Configuración.

Durante la instalación del servidor web apache2, este crea un fichero llamado (default-ssl.conf) de configuración para el protocolo SSL de acceso seguro (https). Por tanto, este archivo de configuración debe ser modificado para incluir los certificados auto-firmados que vamos a generar en este manual. 

Este archivo de configuración se encuentra en la siguiente ruta /etc/apache2/sites-available/default-ssl.conf (un poco mas adelante en este manual explicamos las modificaciones necesarias.)

Cuando acabemos de habilitar el protocolo SSL (https), de crear y añadir los certificados auto-firmados. Vamos a enseñar como redirigir todo el trafico del servidor web apache2, de http a https.

Todo el proceso de instalación los haremos desde una consola de comandos, por ejemplo konsole (pero tu puedes usar el que mas te guste).

Nota super importante: Todo el proceso de instalación se tiene que hacer como usuario administrador (root), a partir de Debian 10 Buster, para acceder como usuario root tenemos que usar el comando: su - (es: su mas espacio mas el signo menos) si te logeas con el antiguo comando: su no te va a funcionar y te dará algún error como por ejemplo al usar el comando: a2enmod ssl, te devolverá este error: bash: a2enmod: orden no encontrada, esto es debido a que las variables de entorno han sido modificadas entre el usuario su y el su -, por eso a partir de Debian 10 Buster tienes que usar su - para logearte como usuario root.



Comenzamos con el proceso de configuración de SSL (https).

Para comenzar tenemos que logearnos como usuario administrador con el siguiente comando: su -


1- Activamos el módulo ssl:
a2enmod ssl
Tras pulsar Intro o Enter, nos informa que para activar la nueva configuración tenemos que reiniciar el servidor web apache2, pero aunque nos informe, todavía no vamos a reiniciar el servidor web apache2, vamos a dejarlo para un poco mas adelante.

2-  Activamos el nuevo site default-ssl:
a2ensite default-ssl.conf
Tras pulsar Intro o Enter, nos informa que para activar la nueva configuración tenemos que reiniciar el servidor web apache2.

3- Ahora si vamos a reiniciar el Apache2, para activar las dos configuraciones anteriores
service apache2 restart


Verificación del funcionamiento SSL (https)

En un navegador web (chrome, firefox, chromium, opera, etc...), ponemos la dirección del servidor (en este manual es: https://192.168.1.20 - pero cada uno tendrá una una dirección distinta).
Después aparecerá el aviso del certificado auto-firmado.
Esto quiere decir que ya esta bien instalado y funcionado el módulo SSL para el servidor web Apache2.
Ahora vamos a instalar el certificado SSL auto-firmado

========================================================

Certificados SSL auto-firmados

4- Instalación

Lógicamente tenemos que instalar los paquetes necesarios, pero como estamos usando un servidor Debian GNU/Linux (v.10 Buster), resulta que estos dos paquetes ya vienen instalador por defecto. Pero vamos asegurarnos que están instalado, para ello usamos el siguiente domando, (este comando instala los paquetes openssl y ca-certificates):

apt-get install openssl ca-certificates
Observamos como nos informa que efectivamente ambos paquete se encuentran instalado y actualizados en la ultima versión

Generación de los certificados

La generación de un certificadoSSL requiere de los siguientes pasos: 
primero es generada una clave privada; en seguida ésta es usada para generar un pedido de certificación (Certificate Signing Request (CSR)). El pedido de certificación es entonces enviado a la entidad certificadora (Certificate Authority (CA)) que devuelve el certificado firmado. Es posible ahorrarse el último paso, generando un certificado auto-firmado (Self-signed Certificate).

5- Creamos una carpeta de trabajo llamada certs:
mkdir certs

6- Accedemos a dicha carpeta:
cd certs

7- Clave privada. Vamos a generar una clave privada (Private Key):
openssl genrsa -out server.key 2048
y observamos como lo ha generado sin problemas.

8- Esta clave debe ser almacenada con especial cuidado y sólo debe ser accesible por el usuario root:
chmod 600 server.key

9- Pedido de certificaciónPara generar un pedido de certificación (Certificate Signing Request), debe indicarse en el campo Common Name el nombre del servidor para el cual será generado el certificado. En caso de que un certificado sea requerido por varios servidores del mismo dominio, es posible usar la sintaxis *.usuariodebian.lan. Pero para este manual usaremos la dirección IP del propio servidor: 192.168.1.20 (vosotros usareis la ip de vuestro servidor web apache2)

openssl req -new -key server.key -out server.csr
Cuando ejecutamos este comando nos empezarán a pedir los datos de una manera interactiva, tenemos que ir contestando como nos convenga. Tenemos que tener cuidado cuando pregunta: Common Name  ya que tendremos que poner la dirección IP del servidor. En este manual es 192.168.1.20 (vosotros usareis la ip de vuestro servidor web apache2), cuando nos pregunte: A challenge password []: y por An optional company name []: ambas preguntas las dejamos vacía, pulsamos directamente Intro o Enter.

Observamos como después de introducir el ultimo dato del asistente, ha generado el archivo de pedido de certificación, y al final nos muestra un resumen de los datos introducidos por nosotros.

10- Certificado auto-firmado. En condiciones reales, el pedido de certificación debería ser enviado a una entidad certificadora autorizada, y esta nos devolvería el certificado firmado.

Pero al ser un certificado auto-firmado, es decir generados por nosotros mismos, no se lo tenemos que enviar a nadie. Y que como sabemos, NO somos una entidad certificadora autorizada ni reconocida, por eso los navegadores web catalogaran las paginas web de nuestro servidor web como inseguras, por el simple echo de no ser entidad certificadora reconocida por los navegadores web. 

Importante: que sea un certificado auto-firmado (Self-Signed Certificate) y los navegadores web NO lo reconozcan, y lo marquen y tachen de inseguro, no quiere decir que sea inseguro, simplemente es una advertencia de los navegadores web, por eso decimos que solo podemos usarlo en servidores personales locales. De aquí que tengamos que marcar en el navegador web una excepción de nuestro propio certificado.

En este caso, crearemos un certificado autofimando (Self-Signed Certificate), válido por 365 días, cada uno puede poner los días que necesite.

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
y vemos como el proceso a finalizado correctamente, y a firmado el certificado auto-firmado (Self-Signed Certificate)
El proceso de creación de los certificados concluyó perfectamente. Y fueron generados los siguientes archivos:

server.key = La clave privada
server.csr = El pedido de firma del certificado
server.crt = El certificado ya auto-firmado

El certificado auto-firmado es válido por 365 días, pero puede ser renovado en cualquier momento, al crear de nuevo el certificado auto-firmado, usando el mismo comando, cambiando 365 por el numero de días que necesitemos:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt


Instalación de la clave privada y del certificado auto-firmado

11- Para esto, debemos copiar las claves privadas en /etc/ssl/private
cp server.key /etc/ssl/private

12- Ahora copiamos el certificado en /etc/ssl/certs:
cp server.crt /etc/ssl/certs

13- Durante la instalación de apache2 se crea un archivo llamado (default-ssl.conf) de configuración para acceso seguro SSL (https). Por tanto, esta configuración debe ser modificada ahora para incluir los certificados auto-firmados generados por nosotros.

Este archivo de configuración se encuentra en la siguiente ruta: /etc/apache2/sites-available/default-ssl.conf y usaremos el siguiente comando para editar el archivo.

nano /etc/apache2/sites-available/default-ssl.conf
14- En el archivo default-ssl.conf que estamos editando nos interesan dos apartado. 

  - El primero no tenemos que hacer nada, ya que vemos que el motor SSL esta habilitado por defecto (SSLEngine on)

  - El segundo hace referencia a los nombre de los certificados. Vemos que por defecto los archivos tienen otro nombres, entonces vamos a ponerle el nombres correctos, para que apunten a dichos certificado auto-firmado (Self-Signed Certificate) que hemos generado nosotros.
Estos son los nombres originales que viene en la configuración por defecto:

        SSLCertificateFile         /etc/ssl/certs/ssl-cert-snakeoil.pem
        SSLCertificateKeyFile  /etc/ssl/private/ssl-cert-snakeoil.key

Aquí hemos modificado y hemos puesto los nombre que hemos generado nosotros:

        SSLCertificateFile         /etc/ssl/certs/server.crt
        SSLCertificateKeyFile  /etc/ssl/private/server.key

En la imagen inferior hemos dejado comentado osea que no tiene funcionalidad las dos líneas originales, y hemos añadido las dos líneas correctas.

Una vez realizados los cambios, tenemos que pulsar en la siguiente combinación de teclas para guardar dichos cambios: Ctrl + O (tecla control mas tecla o) y pulsamos Intro o Enter y luego la combinación de teclas Ctrl + X (tecla control mas tecla x) para Salir

15- Por ultimo solo tenemos que reiniciar el servidor web Apache2 para que empiece a funcionar.
service apache2 restart

Observamos como hemos reiniciado el servidor perfectamente y no ha devuelto ningún error. 
Por Fin, el certificado auto-firmado está listo para utilizarse.

Como se trata de un certificado auto-firmado (Self-Signed Certificate), su utilización siempre dará origen a un aviso por parte del navegador web, del cliente FTP, etc...

En el caso de los navegadores web, tenemos que añadir una excepción de seguridad, para poder navegar por las páginas web, Normalmente basta con añadir la excepción una sola vez, pero puede haber navegadores que lo pidan siempre.


=======================================================



 Redireccionar todo el trafico de HTTP hacia HTTPS automáticamente en Apache2 

Existen varios métodos para realizar la redirección, y hacer que todo el trafico pase por https. Aquí no están detalladas todas las opciones posibles, simplemente he cogido las que puede valer para casi todo el mundo. Tu eliges la opción que te sea mas fácil, o mas rápida de implementar, o simplemente la que mejor te funcione.

- Usando los servidores virtuales de Apache2 (Redirect permanent)
- Usando .htaccess usando mod_rewrite



Usando los servidores virtuales de Apache2 (Redirect permanent).

En este método vamos a usar la redirección de todo el trafico de http a https, directamente desde el servidor virtual por defecto de apache2.

Para usar este método tienes que ser administrador del servidor, en caso contrario no podrás realizar la configuración. Pero se supone que este manual esta pensado para un servidor personal local instalado en Debian GNU/Linux.

Para ello editamos el archivo 000-default.conf usando el siguiente comando:

nano /etc/apache2/sites-available/000-default.conf
Vemos el archivo, con el contenido por defecto.
Nosotros vamos añadir la siguiente línea, con este contenido:

Redirect permanent / https://
y por ultimo, cuando usamos este método, tenemos que reiniciar el servidor web apache.

service apache2 restart

Observación
- En todos los manuales dicen que la forma correcta de escribir la línea sería asín: Redirect permanent / https://192.168.1.20/ personalmente a mi me a funcionado la forma mas abreviada que he usado, osea esta: Redirect permanent / https:// que cada uno decida cual usar.
- Cuando se usa la línea: Redirect permanent / https://192.168.1.20/ la contrabarra del final, unas veces hay que colocarla y otras no, lo mejor es probar las dos opciones y ver cual te funciona.




Usando .htaccess con mod_rewrite

Este método se usa por que no se tiene acceso al servidor como administrador, o porque simplemente te gusta este método, o por lo que sea....

Hay que tener presente, que en este método, estamos usando el módulo mod_rewrite, con lo cual como es lógico, tenemos que tenerlo activado y en funcionamiento en el servidor web apache.

En este caso se crea un archivo llamado .htaccess, ubicado en el directorio público /html de nuestro servidor Apache.
Podemos editar el contenido del archivo .htaccess usando una consola de comandos, o usando el explorador de archivos eXtplorer, o por ftp, etc...

El contenido que tiene que incluir dicho archivo es el siguiente:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Una vez introducido el texto en el archivo .htaccess, guardamos los cambio, y desde ese momento ya funciona. No es necesario reiniciar el servidor web Apache2


============================================================




  Como hacer redirecciones de páginas web en Apache2  


 Usando .htaccess 

- Para redireccionar una URL a una carpeta deberá de añadir la siguiente línea:

Redirect 301 /index.html /servidor20

- Para redireccionar una URL a otra URL deberá de añadir la siguiente línea:

Redirect 301 /pagina.html https://www.dominio.com/wordpress.html

- Para redireccionar de www a sin www deberá de añadir las siguientes líneas:

Options +FollowSymlinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.sudominio.com [NC]
RewriteRule ^(.*)$
https://sudominio.com/$1 [R=301,L]

- Para redireccionar desde sin www a www deberá de añadir las siguientes líneas:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^sudominio.com [NC]
RewriteRule ^(.*)$
https://www.sudominio.com/$1
[R=301,L]




 Redirecciones mediante PHP y HTML