Cómo cambiar el environment de una shell para simular condiciones de ejecución de crontab

Cuando al ejecutar un comando o script en una shell funciona pero al programarlo en un cron falla, sólo se puede debugear si podemos ejecutarlo a mano en las mismas condiciones que lo hace crontab.

Para eso, hay que ejecutar lo siguiente que replica el environment de crontab en la shell:

$ env -i /bin/bash --noprofile --norc

Después de eso se puede ejecutar lo que sea con el mismo environment que tendrá crontab.

Cómo convertir un certificado SSL de formato PFX a PEM

El formato PFX es un formato binario que debe contener tanto el certificado del dominio y el certificado intermedio como la propia clave privada, y están protegidos (o deberían) con contraseña. Este formato es el utilizado por el servidor web de Microsoft IIS.

Y el formato PEM es el utilizado en servidores como Apache o Nginx, que es un fichero de texto que contiene unas cuantas líneas de caracteres entre las típicas marcas

-----BEGIN CERTIFICATE-----

<aquí va el certificado>

-----END CERTIFICATE-----

Si tenemos un certificado en formato PFX podemos convertirlo a PEM así:

$ openssl pkcs12 -in certfile.pfx -out bundle.txt -nodes
Enter Import Password:
$

El fichero «bundle.txt» generado es un fichero de texto que contendrá en formato PEM tanto el certificado SSL del dominio y el certificado intermedio, como la clave privada.

A partir de aquí sólo habría que generar los ficheros de clave privada y el bundle con el crt del dominio y el intermedio, y configurarlos en el Apache o en el Nginx.

Cómo convertir un certificado SSL de formato PEM a PFX

El formato PEM es el utilizado en servidores como Apache o Nginx. Es un fichero de texto que contiene unas cuantas líneas de caracteres entre las típicas

-----BEGIN CERTIFICATE-----

<aquí va el certificado>

-----END CERTIFICATE-----

Pero para instalar el certificado en un IIS hace falta convertirlo a formato PFX, que es un formato binario que debe contener tanto el certificado del dominio y el certificado intermedio como la propia clave privada, y están protegidos con contraseña.

Si tenemos un certificado en formato PEM podemos convertirlo a PFX así:

1.- Concatenar en un solo fichero de texto el bundle formado por el certificado del dominio y el certificado intermedio, de forma que queden así:

-----BEGIN CERTIFICATE-----

<aquí va el certificado del dominio>

-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----

<aquí va el certificado intermedio>

-----END CERTIFICATE-----

2.- Ejecutar el siguiente comando y escribir la contraseña deseada para importar y exportar el certificado 2 veces:

$ openssl pkcs12 -inkey key.pem -in cert_and_intermediate.pem -export -out file.pfx
Enter Export Password:
Verifying - Enter Export Password:
$

Y ese fichero «file.pfx» es el que se puede instalar en el IIS o donde sea necesario.

Cómo añadir user/pwd al fichero .htpasswd

Para activar la protección por usuario y contraseña en Nginx mediante el fichero .htpasswd hay que hacer las siguientes cosas:

Hay que activar la autenticación básica y el fichero de contraseñas en la sección «location» del fichero de configuración de Nginx para el directorio que se quiera proteger así:

    location / {
            auth_basic "Restricted";
            auth_basic_user_file /var/www/.htpasswd;

            try_files   $uri /index.php?$query_string;
            sendfile off;
    }

Crear la línea que hay que añadir al fichero .htpasswd con el usuario y la contraseña encriptada así:

# htpasswd –nb usuario contraseña

Y el resultado del comando anterior, añadirlo en una línea del fichero .htpasswd.

Y por último, hay que reiniciar Nginx.

Cómo programar tareas en crontab

Este es el esquema de programación de tareas en crontab:

# *    *    *    *    *  command to execute
# ┬    ┬    ┬    ┬    ┬
# │    │    │    │    │
# │    │    │    │    │
# │    │    │    │    └── day of week (0 - 6) (0 Sun, 6 Sat)
# │    │    │    └────── month (1 - 12)
# │    │    └────────── day of month (1 - 31)
# │    └────────────── hour (0 - 23)
# └────────────────── min (0 - 59)

Esquema visto aquí:  https://stackoverflow.com/questions/19502546/cronjob-for-1st-of-january-every-year