Instalar certificado gratuito ssl con Let’s Encrypt en tomcat

Es comun utilizar Let’s Encrypt par poner certificados gratuitos seguros en nuestros dominios, ponerlos en apache o nginx es una tarea sencilla, pero todos hemos sufrido la tarea de poner un certificado seguro en un llavero (Java KeyStore) de tomcat.

Con esta pequeña entrada voy a explicar paso a paso como poner un certificado gratuito Let’s Encrypt en tomcat.

Para realizar los pasos necesitaremos tener instalado en el sistema keytool (viene con el jdk) y certboot (https://certbot.eff.org/).

Creamos un llavero JKS (letsencrypt.jks) con una clave RSA 2048, con la entrada de dominio (midominio.es)

keytool -genkeypair -alias simple-cert -keyalg RSA -keysize 2048 -keystore letsencrypt.jks -dname "CN=midominio.es" -storepass password12345

Agregamos una segunda clave RSA 4096 – (san-cert)

keytool -genkeypair -alias san-cert -keyalg RSA -keysize 4096 -keystore letsencrypt.jks -dname "CN=midominio.es" -storepass password12345

Creamos un CSR para simple-cert y un CSR para san-cert

keytool -certreq -alias simple-cert -keystore letsencrypt.jks -file midominio.csr -storepass password12345 -ext san=dns:midominio.es

Creamos el full certificate chain con certboot (certificado Let’s Encrypt).

certbot certonly --manual --csr midominio.csr --preferred-challenges "dns"

Nos creara una serie de certificados y debemos de quedarnos con el full certificate chain.

Successfully received certificate.

Certificate is saved at:            C:\Program Files (x86)\Certbot\bin\0000_cert.pem
Intermediate CA chain is saved at:  C:\Program Files (x86)\Certbot\bin\0000_chain.pem
Full certificate chain is saved at: C:\Program Files (x86)\Certbot\bin\0001_chain.pem
This certificate expires on 2023-03-07.

Añadimos el certificado al keystore (clic YES cuando pregunte).

keytool -importcert -alias simple-cert -keystore letsencrypt.jks -storepass password12345 -file 0001_chain.pem

Y ya tendriamos el certifiado creado y solo necesitariamos añadirlo en el fichero de configuración del tomcat (server.xml).

<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true" URIEncoding="UTF-8"
keystoreFile="conf\ssl\letsencrypt.jks"
keystorePass="password12345" keyAlias="simple-cert"
clientAuth="false" sslProtocol="TLS" />

—- RENOVAR CERTIFICADO —-

Los certificados Let’s Encrypt , caducan a los tres meses, con lo que es posible que al intentar reniovarlo nos de problemas, lo unico que tendremos es que realizar los mismos pasos y cuando lancemoz el comando certbot, crear la entrada dns que nos pidan por consola.

Please deploy a DNS TXT record under the name:

_acme-challenge.midominio.es.

with the following value:

t8TpRgmScIuzwwrXgsCEhqt1VaV4s7EkxEziWoOCJ2h

Iniciar sesión en centos 7 sin contraseña con gnome

Nos habra pasado alguna vez que cuando usamos un entorno grafico nos da pereza andar metiendo la contraseña nmada mas iniciar sesión.

Con esta pequeña entrada voy a explicar como iniciar sesión en centos 7 con entorno grafico gnome.

Editaremos el fichero de configuración de gnome:

vi /etc/gdm/custom.conf

Y añadiremos lo siguiente debajo de default cambiando la variable nombre_usuario pro el usuario que queramos que inicie sesión sin contraseña:

AutomaticLoginEnable=true
AutomaticLogin=nombre_usuario

Guardamos el fichero y reiniciamos

Y ya podemos ver como iniciamos sesión sin introducir contraseña.

Como solucionar error The program can’t start because api-ms-win-core-path-l1-1-0.dll is missing from your computer

El otro dia estuve intentado instalar un certificado de let’s encrypt con certbot y me aparecido el siguiente error “The program can’t start because api-ms-win-core-path-l1-1-0.dll is missing from your computer” y buscando por internet observe que se trata de un error bastante comun y voy a explicar como solucionarlo con la siguiente entrada.

The program can’t start because api-ms-win-core-path-l1-1-0.dll is missing from your computer

Este error es debido a que la libreria api-ms-win-core-path-l1-1-0.dll no se encuentra en el sistema y no solo sucede al intenter ejectuar certbot sino que tambien falla con la suite adobe, blender, EAdesktop y un sin fin de aplicaciones.

Yo lo resolvi descagando la libreria del siguiente repositorio de github https://github.com/nalexandru/api-ms-win-core-path-HACK/releases/download/0.3.1/api-ms-win-core-path-blender-0.3.1.zip dejandola en el directorio de instalación de certbot C:\Program Files (x86)\Certbot\bin permitiendo ejecutar la aplicación sin problemas.

Si queremos que forme parte de las librerias del sistema solo tendriamos que dejarla en los directorios C:\Windows\System32 y C:\Windows\SysWOW64

Por ultimo dejo la libreria descargable desde la web, para tenerla mas a mano:

Insertar caracteres UTF8 en Oracle con SQLPLUS desde windows.

Por todos son conocidos los quebraderos de cabeza que nos das los caracteres especiales en el dia a dia a los informáticos.

La logica la conocemos, se invento UTF8 como standard para corregir esos problemas, pero aun asi siguen apareciendo.

O voy a intentar explicar como corregir un error recurrente, cuando insertamos en una bbdd Oracle la cual ya se encuentra en UTF8 y aun asi los caraceres se ven de manera incorrecta.

Esto no es debido a la bbdd Oracle si no al propio cliente desde donde si inserta y en este caso el problema viene causado por windows y su uso de propias codificaciones de caracteres.

Lo unico que tenemos que hacer para corregir esto consiste en setear la variable NLS_LANG con la codificacion UTF8 antes de arrancar el SQLPLUS.

Abrimos una consola cmd de windows y seteamos la variable NLS_LANG

set NLS_LANG=.AL32UTF8

Y ya podemos conectar a Oracle y hacer inserciones en SQLPLUS.

SQLPLUS

Opción 2.

Si queremos dejar la configuración de manera persistente , siempre podemos añadirla como variable del sistema.

Variable de entorno

Aumentar el tamaño máximo en la carga de ficheros en IIS

El IIS recién instalado tiene configurado por defecto con un tamaño máximo de subida de 30.000.000 bytes, o lo que es lo mismo 28,61MB.

Dicho valor se puede modificar, ya que no es un limite real y lo podemos configurar con el tamaño que queramos.

Para cambiar el valor debemos seguir los siguientes pasos:

Desde la interfaz gráfica del IIS, hacemos clic en el sitio web y doble clic en “Request filtering

Dentro del menú “Request Filtering” hacemos clic con el botón derecho y seleccionamos “Edit Feature Settings…”

En el siguiente menú se nos mostrará una ventana donde podemos configurar varios valores, entre ellos “Maximun allowed content length (Bytes)“, con el valor por defecto establecido (30000000), donde cambiaremos el valor por el que mas se adapte a nuestras necesidades.

Una vez cambiado el valor, solo tendremos que reiniciar el servicio web IIS y ya habremos aumentando el tamaño máximo de subida para los ficheros.

Reconstruir y optimizar indices fragmentados en SQL Server

Es muy común en SQL server que si una tabla tiene muchos cambios de estado, inserciones, borrados, etc, los indices queden fragmentados y las consultas a base de datos sean cada vez mas pesadas.

Pues con esta pequeña entrada voy a explicar como consultar el porcentaje de fragmentación de las tablas y como reconstruirlas y optimizarlas.

Lo primero que haremos es lanzar esta query que nos dirá el porcentaje de fragmentacion de las tablas.

SELECT 
dbtables.[name] as 'Table',
indexstats.avg_fragmentation_in_percent
FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL, NULL, NULL) AS indexstats
INNER JOIN sys.tables dbtables on dbtables.[object_id] = indexstats.[object_id]
INNER JOIN sys.schemas dbschemas on dbtables.[schema_id] = dbschemas.[schema_id]
INNER JOIN sys.indexes AS dbindexes ON dbindexes.[object_id] = indexstats.[object_id]
AND indexstats.index_id = dbindexes.index_id
WHERE indexstats.database_id = DB_ID() 
ORDER BY indexstats.avg_fragmentation_in_percent desc
Porcentaje de fragmentación de cada tabla

Una vez visto que los porcentajes de fragmentación son altisimos, lanzamos esta query que reconstruye todos los indices de las tablas.

DECLARE @TableName VARCHAR(255)
DECLARE @sql NVARCHAR(500)
DECLARE @fillfactor INT
SET @fillfactor = 80 
DECLARE TableCursor CURSOR FOR
SELECT QUOTENAME(OBJECT_SCHEMA_NAME([object_id]))+'.' + QUOTENAME(name) AS TableName
FROM sys.tables
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @sql = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
EXEC (@sql)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
GO
Porcentajes de fragmentación con indices de las tablas reconstruidas

Lanzamos estas querys periódicamente conseguiremos mantener las bases de datos en un estado optimo.

Rotar y eliminar log de error en SQL Server

En alguna ocasión en nuestro Windows Server el SQL Server se ha generado un registro de error de varios gigas y nos ha comprometido la estabilidad del servidor.

Y resulta que nos es imposible borrarlo debido a que el fichero se encuentra en uso.

Con esta entrada voy a explicar como rotar para poder borrarlo y liberar espacio en disco.

Logueamos como u Administrador (sa) con el Microsoft SQL Server Management Studio u otra herramienta para ejecutar consultas en el servidor (no sólo sobre una base de datos).

Y ejecutamos la siguiente consulta para forzar el registro del log de error.

EXEC sp_cycle_errorlog;

Y ya podríamos borrar el pesado ERRORLOG y liberar espacio en la maquina.

Como solucionar error: The root filesystem requires a manual fsck

Es posible que tras un reinicio en nuestro linux nos encontramos el error “The root filesystem requires a manual fsck” y no podemos arrancar nuestro sistema operativo, pues que no cunda el pánico que todo tiene solución.

Error fatídico

Solo necesitamos o desde la propia consola del initramfs o desde un livecd ejecutar el comando fsck (check and repair a Linux file system) sobre la partición fatídica.

fsck /dev/sdaParticionFallida

Contestaremos que si (yes) a todas las preguntas planteadas y ya tendremos recuperado nuestro sistema operativo linux.

fsck /dev/ubuntu–vg-ubuntu–lv

¿Como matar varios procesos a la vez en linux?

Posiblemente os ha sucedido en multitud de ocasiones, que intentáis matar un proceso en linux y os encontráis que aparece varias veces.

Y es bastante molesto ir uno a uno con kill -9 matandolos.

Pues con esta entrada os voy a explicar de matarlos todos con un simple comando.

En el ejemplo que voy a utilizar el escritorio se ha quedado tostado y quiero matar todos los procesos del navegador chromiun y para ello haré una búsqueda del proceso con ps + grep .

root@ubuntu:/# ps -aux | grep chrom |

root      2203 17.4  2.5 2633452 207796 ?      Sl   10:34   0:02 /snap/chromium/1967/usr/lib/chromium-browser/chrome --password-store=basic
root      2383  0.2  0.7 260184 58056 ?        S    10:34   0:00 /snap/chromium/1967/usr/lib/chromium-browser/chrome --type=zygote --no-zygote-sandbox --change-stack-guard-on-fork=enable
root            2384  0.1  0.7 260176 58252 ?        S    10:34   0:00 /snap/chromium/1967/usr/lib/chromium-browser/chrome --type=zygote --change-stack-guard-on-fork=enable
root      2386  0.0  0.1 260200 15344 ?        S    10:34   0:00 /snap/chromium/1967/usr/lib/chromium-browser/chrome --type=zygote --change-stack-guard-on-fork=enable
root      2559  0.0  0.3 483756 25968 ?        S    10:34   0:00 /snap/chromium/1967/usr/lib/chromium-browser/chrome --type=broker

A continuación con awk ‘{print $2}’ obtenemos el id de cada proceso.

root@ubuntu:/# ps -aux | grep chrom | awk '{print $2}'
864
2203
2383
2384
2386
2416
2420
2437
2458
2459
2559
2574
2651

Teniendo el listado de procesos solo nos queda matarlos todos a la vez y lo haremos con xargs kill -9

ps -aux | grep chrom | awk '{print $2}' | xargs kill -9

Y con este sencillo comando, podemos matar varios procesos a la vez en linux.

Desbloquear ficheros masivamente (y recursivamente) en windows

En alguna ocasion nos hemos podido encontrar que se nos han bloqueado los ficheros en un directorio y en sus directorios recursivos.

Volver a desbloquearlos puede ser una tarea bastante tediosa.

Desbloquear archivos descargados de Internet en Windows 8.1. - Microsoft  Community
Fichero desbloqueado manualmente.

Pero con este sencillo comando powershell, puedes desbloquear ficheros masiva y recursivamente desde un directorio origen.

Get-ChildItem -Path 'rota_origen' -Recurse | Unblock-File