Mostrando entradas con la etiqueta apache. Mostrar todas las entradas
Mostrando entradas con la etiqueta apache. Mostrar todas las entradas

4 de septiembre de 2024

Configurar HTTPS en apache2 con certificado autofirmado

Configurar Apache2 para usar HTTPS con un certificado autofirmado es un proceso relativamente sencillo. A continuación te guiaré paso a paso en cómo hacerlo en un sistema Linux, como Ubuntu o Debian.

### Paso 1: Instalar Apache2
Si no tienes Apache2 instalado, puedes hacerlo ejecutando el siguiente comando:

```bash
sudo apt update
sudo apt install apache2
```

### Paso 2: Habilitar el módulo SSL de Apache
Apache tiene un módulo para manejar conexiones SSL llamado `mod_ssl`. Para habilitarlo, ejecuta:

```bash
sudo a2enmod ssl
```

### Paso 3: Crear un certificado SSL autofirmado
Ahora vamos a crear un certificado autofirmado y una clave privada. Por defecto, el certificado SSL se genera para 365 días. Si deseas un período diferente, puedes cambiar el valor después de `-days`.

```bash
sudo mkdir /etc/apache2/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache-selfsigned.key -out /etc/apache2/ssl/apache-selfsigned.crt
```

Este comando hará lo siguiente:
- `-x509`: Indica que vamos a crear un certificado autofirmado.
- `-nodes`: No ciframos el archivo de clave privada.
- `-days 365`: El certificado será válido por 365 días.
- `-newkey rsa:2048`: Generamos una clave RSA de 2048 bits.
- `-keyout`: El archivo donde se almacenará la clave privada.
- `-out`: El archivo donde se almacenará el certificado.

Durante la generación del certificado, te pedirá información como el nombre del país, ciudad, organización, etc. Puedes completar estos campos o dejarlos en blanco.

### Paso 4: Configurar Apache para usar SSL
Ahora necesitamos configurar Apache para utilizar el certificado autofirmado. Vamos a modificar el archivo de configuración SSL predeterminado.

1. Abre el archivo de configuración de SSL para editarlo:

   ```bash
   sudo nano /etc/apache2/sites-available/default-ssl.conf
   ```

2. Busca las siguientes líneas y asegúrate de que apunten a los archivos de certificado y clave privada que acabas de crear:

   ```bash
   SSLCertificateFile /etc/apache2/ssl/apache-selfsigned.crt
   SSLCertificateKeyFile /etc/apache2/ssl/apache-selfsigned.key
   ```

3. Si deseas, puedes modificar otras configuraciones en este archivo para adaptarlas a tus necesidades, como el nombre del servidor (`ServerName`).

### Paso 5: Habilitar el sitio SSL
Con el archivo configurado, habilitamos el sitio SSL predeterminado con el siguiente comando:

```bash
sudo a2ensite default-ssl.conf
```

### Paso 6: Reiniciar Apache
Para aplicar los cambios, reinicia Apache:

```bash
sudo systemctl restart apache2
```

### Paso 7: Prueba la configuración
Ahora deberías poder acceder a tu servidor Apache a través de HTTPS. Abre un navegador y visita `https://<tu-dominio>` o `https://<tu-dirección-ip>`. Dado que estás utilizando un certificado autofirmado, el navegador mostrará una advertencia de seguridad. Puedes omitir esta advertencia para continuar.

### Opcional: Redirigir HTTP a HTTPS
Si deseas redirigir todo el tráfico HTTP a HTTPS, puedes añadir una redirección en el archivo de configuración de tu sitio principal. Abre el archivo de configuración de tu sitio en `/etc/apache2/sites-available/000-default.conf` y añade lo siguiente dentro del bloque `<VirtualHost *:80>`:

```apache
<VirtualHost *:80>
    ServerName tu-dominio.com
    Redirect / https://tu-dominio.com/
</VirtualHost>
```

Luego, reinicia Apache nuevamente:

```bash
sudo systemctl restart apache2
```

### Conclusión

Ahora has configurado Apache2 para usar HTTPS con un certificado SSL autofirmado. Aunque este tipo de certificados son útiles para pruebas y entornos de desarrollo, para producción es recomendable usar un certificado emitido por una Autoridad de Certificación (CA), como los proporcionados por Let's Encrypt.

Ref:

data from GPT-4 of OpenAI.
(I) Prompt: Como configurar apache2 con https usando certificado autofrmado.
(II) Image prompt: An illustration showing the process of configuring HTTPS on an Apache2 server using a self-signed certificate. The image should depict a server terminal with Apache2 logo, SSL keys being generated, and a certificate being configured. Include visual elements like a shield icon representing security (HTTPS), command-line code snippets, and a simplified server diagram with arrows indicating data flow over HTTPS. The overall tone should be technical yet approachable, with clear, organized elements representing each step in the setup process.

Image by Google Gemini 2025.

13 de agosto de 2013

Eliminando los banners del sevidor apache2

Editar el archivo:


# nano /etc/apache2/conf.d/security

y descomentar solo las lineas:


ServerTokens Minimal
ServerSignature Off
TraceEnable Off


y reiniciar apache2

# service apache2 restart


Ahora ya no aparecerán banners con información del servidor apache2 ni del sistema operativo de la máquina al producirse algún error.

Ref.:
http://www.securityartwork.es/2012/02/22/bastionado-de-un-servidor-web-apache-i/ 

25 de junio de 2013

Proteger un directorio web con contraseña con apache2

En un servidor web con apache2 necesitamos proteger el acceso a una carpeta con password,
¿como hacerlo?

Protocolo:

1) Creamos el directorio:
# mkdir /var/www/pub

2) Creamos fichero del passwords en el directorio /etc/apache2/:
# cd /etc/apache2
# htpasswd -c .htpasswd usuario

3) Modificamos el fichero /etc/apache2/sites-available/default creando una sección Directory con el nombre de la carpeta y la siguiente configuración:

# nano  /etc/apache2/sites-available/default

     Options -Indexes MultiViews FollowSymLinks
     AllowOverride All
     Order deny,allow
     Allow from All

4) Creamos el fichero /var/www/pub/.htaccess
# nano /var/www/pub/.htaccess

AuthName "Directorio privado"
AuthType Basic
AuthUserFile /etc/.htpasswd
require valid-user

5) Reiniciamos apache2
# service apache2 restart

Al intentar acceder a este directorio desde el navegador web, aparecerá una pantalla que nos pedira el user y password para acceder.


24 de diciembre de 2011

Como instalar un servidor Debian-6.0

Este es un completo tutorial de instalación de un servidor Debian-6.0, con Apache web server, Postfix mail server, MySQL, BIND nameserver, PureFTPd, SpamAssassin, ClamAV y ISPConfig3.

Aunque solo sea como checklist a la hora de nuevas instalaciones, vale la pena tenerlo a mano.

http://www.howtoforge.com/perfect-server-debian-squeeze-with-bind-and-courier-ispconfig-3

14 de agosto de 2011

XAMPP el servidor portable

Si no quieres complicarte mucho en instalar un servidor web, php, perl, ftp, MySQL, ... en el ordenata de la parienta,lo mejor es hacerlo de forma sencilla.
Esta es una alternativa portable, se pueder poner en el disco duro o en un usb.




2 de agosto de 2011

Actualización Lenny to Squeeze: problema con php5

Al actualizar de Debian 5.0 Lenny a Debian 6.0 Squeeze, comenzaron a aparecer mensajes de error en scripts php5 que antes funcionaban perfectamente.

Solución: modificar php.ini:
Ojo hay dos php.ini:

Este controla php en el servidor apache2
/etc/php5/apache2/php.ini

Este controla los script php ejecutados desde consola.
/etc/php5/cli/php.iniGuardar como borrador

En mi caso la actualizaión cambió bien el 1º pero no el segundo, apareciento cantidad de notes y warnning al ejecutar un script php que funcionaba correctamente y sin avisos en Debian 5.0 Lenny.

Para evitar la tromba de avisos hay que cambiar las líneas de php.ini que controlan los avisos:

Modificar en: /etc/php5/apache2/php.ini y /etc/php5/cli/php.ini
error_reporting = E_ALL & ~E_NOTICE

Cuando se ejecuten script php en apache2 es mejor que no aparezcan mensajes de error por motivos de seguridad.

/etc/php5/apache2/php.ini
display_errors = Off

7 de junio de 2010

Aumenta en número máximo de conexiones a MySQL


En scripts php con acceso a MySQL en los que ejecuto varias copias, o mejor dicho ...muchas copias!!!, en backgroung llega un momento que me aparece el error:

Too Many Connections

Para ver el nº de conexiones desde la consola MySQL:

mysql> show full processlist;
+-----+------+-----------+----+---------+------+-------+------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+----+---------+------+-------+------+
| 388 | user | localhost | db | Sleep | 394 | | NULL |
| 389 | user | localhost | db | Sleep | 184 | | NULL |
| 394 | user | localhost | db | Sleep | 222 | | NULL |

|...


+-----+------+-----------+----+---------+------+-------+------+
51 rows in set (0.00 sec)

En este caso el nº de procesos "durmientes" o persistentes en MySQL va creciendo paulatinamente de modo que aumentar el nº permitido de conexiones a MySQL no funcinará (Sol-01), hay que NO permitir las conexiones persistentes desde php (Sol-02)


Las dos soluciones:

Sol-01) Aumentar el número de conexiones permitidas a MySQL:

editar el archivo
/etc/mysql/my.cnf

Descomentano o aumentando el nº:
max_connections = 100

Sol-02) No permitir conexiones persistentes a MySQL desde php:

editar el archivo:

/etc/php5/apache2/php.ini [MySQL] ; Allow or prevent persistent links. mysql.allow_persistent = On (lo cambiamos a Off)

y

/etc/mysql/my.cnf
thread_cache = 16
(by default esta en 8)


reiniciar el servidor MySQL y Apache2 .. y solucionado.

UPDATE:
Finalmente para aprovechar las ventajas de las conexiones persistentes intentando optimizar el rendimiento del servidor MySQL sin llegar al máximo de conexiones permitidas he optado por limitar el número de conexiones persistente:

editando el archivo /etc/php5/apache2/php.ini
poniendo:

[MySQL]
; Allow or prevent persistent links.
mysql.allow_persistent = On

; Maximum number of persistent links. -1 means no limit.
mysql.max_persistent = 10

; Maximum number of links (persistent + non-persistent). -1 means no limit.
mysql.max_links = 15

Ref.:
Aumentando el numero de conexiones maximas a Mysql

8 de abril de 2010

Shellinabox over https con apache2 en Debian Lenny


El problema de Firefox 3.6 que no funciona ajaxterm me ha obligado a revisar la instalación del terminal shell over https instaldo en micra.
Y buscando veo una referencia interesante shellinabox over https, que tiene buena pinta aunque ya de entrada tiene algunos errores.

Voy a probarlo ya que es idéntico a la configuración proxy ssl con ajaxterm que tengo actualmente en micra pero redireccionando el tráfico al puerto 4200 de shellinabox. En principio esto debería funcionar sin problemas, aunque habia algun bug con shellinabox y SSL en debian.

La diferencia con los intentos anteriores que hice y que no fucnionaron son:
Vamos con ello:

1) Instalando Shellinbox en Debian Lenny:
# wget http://shellinabox.googlecode.com/files/shellinabox_2.10-1_i386.deb
# dpkg -i shellinabox_2.10-1_i386.deb
2) Apache2 y SSL deben estar instalados y funcionando correctamente.
Redirecconamiento del tráfico en apache2:
/etc/apache2/mods-enabled
ln -s ../mods-available/proxy.conf
ln -s ../mods-available/proxy.load
ln -s ../mods-available/proxy_http.load
3) Editamos el fichero /etc/apache2/sites-available/default-ssl
añadiendo al final el redireccionamiento al puerto 4200 de shellinabox:
<Location /shell>
ProxyPass http://localhost:4200/
Order allow,deny
Allow from all
</Location>


¿¿¿ Solo pone esto en /apache2/sites-available/default-ssl ? ¿¿¿ Y la autentificación e usuarios y el SSL ?, see micra config ajaxterm En fin, sigamos a ver si funciona ...

4) Ahora cambiamos la configuración de shellinabox añadiento la lo resaltado en negrita al archivo /etc/init.d/shellinabox
# Set some default values
SHELLINABOX_DATADIR="${SHELLINABOX_DATADIR:-/var/lib/shellinabox}"
SHELLINABOX_PORT="${SHELLINABOX_PORT:-4200}"
SHELLINABOX_USER="${SHELLINABOX_USER:-shellinabox}"
SHELLINABOX_GROUP="${SHELLINABOX_GROUP:-shellinabox}"
SHELLINABOX_ARGS="--localhost-only --disable-ssl"

5) Reiniciamos apache2 y shellinabox... pudiendo acceder https://localhost/shell/ desde cualquier localización.
# /etc/init.d/apache2 restart
# /etc/init.d/shellinabox restart

RESULTADO:
Desde micra
https://localhost/ me da:
An error occurred during a connection to localhost. Secure Connection Failed
SSL received a record that exceeded the maximum permissible length.
(Error code: ssl_error_rx_record_too_long) The page you are trying to view can not be shown because the authenticity of the received data could not be verified. * Please contact the web site owners to inform them of this problem. Try again
Solucción: Parece un error de la clave, revisar la generación de clave y config de esto.

see: https://www.servertastic.com/support/KB/a36/error-code-ssl-error-rx-record-too-long.aspx

Pruebo a añadir al final del archivo /etc/apache2/sites-available

SetEnvIf Request_URI "^/u" dontlog
ErrorLog /var/log/apache2/error.log
Loglevel warn
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

ProxyRequests Off

#Quito autenficacion de ajaxterm
#
# AuthUserFile /srv/ajaxterm/.htpasswd
# AuthName EnterPassword
# AuthType Basic
# require valid-user
#
# Order Deny,allow
# Allow from all
#


#cambio lo puertos al de shellinabox

ProxyPass / http://localhost:4200/
ProxyPassReverse / http://localhost:4200/

RESULTADO: mejor!!
Pilla el certificado pero no me deja entrar ...
Forbidden You don't have permission to acces in this server
Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny8 with Suhosin-Patch mod_ssl/2.2.9 OpenSSL/0.9.8g Server at localhost Port 443
Pruebo a usar los passwords de ajaxterm descomentado las lineas de /etc/apache2/sites-available,
el añadido al fichero
/etc/apache2/sites-available

SetEnvIf Request_URI "^/u" dontlog
ErrorLog /var/log/apache2/error.log
Loglevel warn
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

ProxyRequests Off


AuthUserFile /srv/ajaxterm/.htpasswd
AuthName EnterPassword
AuthType Basic
require valid-user

Order Deny,allow
Allow from all


ProxyPass / http://localhost:4200/
ProxyPassReverse / http://localhost:4200/

RESULTADO: mejor!, mucho mejor!!
Me pide las calves para entrar, uso las de jaxterm, entro y ...
http://localhost/
micra login:

estamos dentro!!!
micra login: pp
Password:
Last login: Thu Apr 8 21:39:15 CEST 2010 from 127.0.0.1 on pts/10
Linux micra 2.6.32.3-pp01 #1 Sun Jan 10 00:36:54 CET 2010 i586
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
You have new mail.
pp@micra:~$
Bingo!!!!, lo tenemos!!!

He comprobado que funciona desde el localhost y desde la red local accediendo desde Firefox 3.6 en https.

Ahora falta la prueba de fuego,
acceder desde un equipo externo ...
...mañana en el curre será un duro día de trabajo!! ;))

Ajaxterm y Mozilla Firefox 3.5

Ultimamente Mozilla Firefox esta realizando muchas actualizaciones, ...?, el caso es que con la actualización 3.6 ha dejado de funciona ajaxterm que me permitia el acceso a una consola via https.

Rebvisando veo que paraece ser un bug con la nueva version Firefox 3.6
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=568372

16 de noviembre de 2009

ajaxterm con https en lenny mediante proxy con apache2

Una opción muy interesante es tener acceso a nuestro servidos desde cualquier parte.
Y en cualquier parte hay un navegador web y los puertos http/https abiertos.

Howto para Debian 5.0 Lenny:

1) En el equipo debe estar instalado openssl y apache2

2) Instalamos el paquete ajaxterm
# apt-get install ajaxterm

Configuramos SSL
3) Copiar el fichero de configuracion ssl
# cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl

4) Crear los certificador para https apache2
# mkdir /etc/apache2/ssl
# openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem


Activamos modulo ssl
# a2enmod ssl

5) Crear el usuario y password para htpasswd
# mkdir /srv/ajaxterm
# htpasswd -bc /srv/ajaxterm/.htpasswd [user] [pass]


Ajaxterm trabaja por defecto en el puerto 8022, lo redirigimos al https 443 mediante un proxi configurado en apache2

4) Crear los enlaces simbolicos para activas los modulos proxy de apache2
# ln -s /etc/apache2/mods-available/proxy.conf /etc/apache2/mods-enabled/proxy.conf
# ln -s /etc/apache2/mods-available/proxy.load /etc/apache
2/mods-enabled/proxy.load
# ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load


6)Editamos el fichero de configuración apache2, añadiendo al final del fichhero:
#nano -w /etc/apache2/sites-enabled/000-default


6) Reiniciamos apache2 y ajaxterm
#/etc/init.d/apache2 restart
#/etc/init.d/ajaxterm restart


7) acceder a la ajaxterm consola con https://dir.maquina desde cualquier navegador.
En firefox da una advertencia de seguridad por el certificado desconocido.


WebReferences:
http://mewbies.com/how_to_install_ajaxterm_tutorial.htm
https://help.ubuntu.com/community/AjaxTerm
http://www.linuxtotal.com.mx/index.php?cont=info_seyre_001
http://wiki.kartbuilding.net/index.php/Ajaxterm