jueves, 23 de junio de 2022

Encriptar contraseñas guardadas en bash script

0. Introducción

Me baso en lo que dice Linux-tech. Se va a emplear openssl, por tanto hay que verificar que openssl  esté instalado.


1. Preparativos

1. Buscamos una clave que servirá para encriptar las otras contraseñas, por ejemplo "miClave"

2. Supongamos que tenemos 3 contraseñas que queremos ocultar (contraseña1, contraseña2 y contraseña3)

3. Ejecutamos estos comandos para obtener las contraseñas encriptadas:

echo "contraseña1" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:miClave > 1.txt

echo "contraseña2" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:miClave > 2.txt

echo "contraseña1" | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:miClave > 3.txt

Se ha descargado el resultado a 3 ficheros (1.txt, 2.txt, 3.txt) pero no es necesario.

4. Recogemos las contraseñas encriptadas que son respectivamente:

U2FsdGVkX189KukyhKMO1tGXqFihjhflWxnNxdPZNQQ=

U2FsdGVkX1/D10iKLBm92DHcG7Diqyiqm0FkL9zHHSs=

U2FsdGVkX191qIFKp3qfRdzzImuyjiH13kmNel6HiSA=

2. Nuestro shell script (bsh) simplificado

Observar las sentencias comentadas que nos sirven de depuración


#!/bin/bash

#0. pwds
echo 'Indicar clave'
read -s myKey
#echo "$myKey"

encriptado1='U2FsdGVkX189KukyhKMO1tGXqFihjhflWxnNxdPZNQQ='
#echo "$encriptado1"
contrasena1=`echo "$encriptado1" | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000  -salt -pass pass:"$myKey"`
#echo "$contrasena1"

encriptado2='U2FsdGVkX1/D10iKLBm92DHcG7Diqyiqm0FkL9zHHSs='
#echo "$encriptado2"
contrasena2=`echo "$encriptado2" | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000  -salt -pass pass:"$myKey"`
#echo "$contrasena2"

encriptado3='U2FsdGVkX191qIFKp3qfRdzzImuyjiH13kmNel6HiSA='
#echo "$encriptado3"
contrasena3=`echo "$encriptado3" | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000  -salt -pass pass:"$myKey"`
#echo "$contrasena3"


Con esto hemos recuperado las contraseñas y además se ha protegido el código fuente del programa con respecto a sus cotraseñas guardadas internamente. 


martes, 7 de junio de 2022

Clave 2.0 Java (2) Configurar el proyecto de prueba

 Ahora que ya hemos podido arrancar la primera pantalla, hay que configurar la aplicación.

1. Configurar Tomcat con SSL

Vamos a configurar el Tomcat 8.5 para que admita protocolo https, pero vamos a utilzar el certificado que nos han suministrado.

Hay que ver los certificados que se guadan en el "KeyStore.jks" del directorio de configuración "Config". Ejecutamos:
 
keytool -list -keystore '<Ruta>/KeyStore.jks

le damos el password "local-demo"

y nos muestra que hay 2 entradas ("local-demo-cert-es" y "sello kit de pruebas (ac sector público)") 

Keystore type: jks

Keystore provider: SUN

Your keystore contains 2 entries

local-demo-cert-es, 16/11/2017, PrivateKeyEntry, 

Certificate fingerprint (SHA-256): B6:DD:C5:7D:A5:06:17:7A:E3:3B:9B:E9:2C:45:38:14:B7:98:3D:09:B8:A9:2E:34:3D:F5:BB:E3:3A:F3:53:44

sello kit de pruebas (ac sector público), 17/05/2022, PrivateKeyEntry, 

Certificate fingerprint (SHA-256): F3:ED:ED:01:F6:E5:C6:7B:AD:7F:26:76:3A:8E:D9:6F:1A:A1:FC:B1:CB:EB:87:86:D1:D8:36:C0:EA:BD:A3:1C

Warning:

<local-demo-cert-es> uses the SHA1withRSA signature algorithm which is considered a security risk. This algorithm will be disabled in a future update.

The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore CLAVE20_CONF/SP/KeyStore.jks -destkeystore CLAVE20_CONF/SP/KeyStore.jks -deststoretype pkcs12".

Vamos a utilizar el certificado con alias "local-demo-cert-es" como certificado del servidor.

Vamos a Servers -Tomcat v8.5 Server at localhost-config y modificamos el fichero server.xml


Añadimos las líneas que no estan comentadas sirviendo de ejemplo de las primeras que están comentadas.


<!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
    -->
    
    <Connector 
        SSLEnabled="true" 
        maxThreads="150" 
        port="8443" 
        protocol="org.apache.coyote.http11.Http11NioProtocol" 
        scheme="https" 
        secure="true">
        <SSLHostConfig>
            <Certificate 
                 certificateKeyAlias="local-demo-cert-es" 
                 certificateKeystoreFile="ruta.../Config/KeyStore.jks" 
                 certificateKeystorePassword="local-demo" 
                 type="RSA"/>
        </SSLHostConfig>
    </Connector>
    

Hay que darle la ruta correcta al keystore en "certificateKeystoreFile"!!!

Ejecutamos (Run As- Run On Server) y arranca con protocolo http. Para ver si va con https abrimos una pestaña del navegador y le indicamos https://localhost:8443/SP2 y debería de arrancar, dando los problemas de siempre que no se confía en ese certificado, pero al final arranca






viernes, 3 de junio de 2022

Windows Server 2019. Ver archivos abiertos

 1. Entrar en administrador del servidor


2. En la parte superior derecha seleccionar Herramientas


3. Seleccionar Administrador de Equipos



4. Seleccionar Carpetas compartidas y luego archivos abiertos


5. Si queremos cerrar el archivo abierto pues no nos deja copiar la nueva versio ya lo podemos hacer









miércoles, 1 de junio de 2022

Clave 2.0 Java (1) Instalar el proyecto de prueba

1. Preinstalación

1. Descargar el proyecto de prueba

Vamos a la PAE y descargamos el "Paquete de integracion Java 8" del 19/5/2022

2. Creamos un Workspace (WS_CLAVE) y dentro de él, una carpeta (Por ejemplo SP2 que es el "artifactId" que se indica en el pom.xml) dentro de un Workspace Java 

3. Abrimos el fichero zip descargado y copiamios el contenido de  "Paquete_Integracion_Java_Clave_2_0" dentro de esa carpeta


4. Ahora desde Eclipse importamos (File - Import -Maven - Existing Maven Projects) Y le indicamos la carpeta SP2

5. Una vez importado , hay que seleccionar el Java 1.8 en Eclipse

6.a. Establecemos la variable de entorno CLAVE_SP2_CONFIG_REPOSITORY que apunte donde se encuentra la carpeta Config. En este caso es: /home/ximo/MyWorkspaces/WS_CLAVE/SP2/Config/. Para ello editamos el fichero ~/.profile y le añadimos esta línea

export CLAVE_SP2_CONFIG_REPOSITORY="$HOME/MyWorkspaces/WS_CLAVE/SP2/Config/"

Para asegurar que ha cogido las variables de entorno, en una ventana de shell escribimos

source ~/.profile

NOTA: Para no tener problemas con la localización de la carpeta "Config", se podría copiar dicha carpeta a un ruta que no dependiera del proyecto como /home/ximo/CLAVE20_CONF, de esta manera si quisiéramos tener una segunda versión del proyecto, no tendríamos que tocar nada.


6.b. Alternativamente a la opción a), podemos modificar el fichero src/main/resources/spEnvironmentContext y cambiar

<constructor-arg value="#{ systemProperties['CLAVE_SP2_CONFIG_REPOSITORY'] ?: systemEnvironment['CLAVE_SP2_CONFIG_REPOSITORY'] }" />

por

<constructor-arg value="/home/ximo/MyWorkspaces/WS_CLAVE/SP2/Config/" />

7. A veces puede dar problemas que no encuentra algunas dependencias que se enuentran en la carpeta local "Dependencias"; si es el caso hay que modificar el pom.xml, casi al final del archivo, en la zona de <repositories> pues es incapaz de encontrar las dependencias, para ello cambiamos 

<url>file://Dependencias</url>  por

<url>file://${project.basedir}/Dependencias  </url>


y guardamos el fichero pom.xml

7. Ahora clicamos con el boton derecho sobre el proyecto Maven - Update Project  y deberian de desaparecer los problemas de compilación

8. Abrir la ventana de Servers (si no esta hay que añadirla en Window -Show View -Other - Servers ) y añadir un servidor Tomcat 8.5 y en  

9. Clicamos con el boton derecho sobre el proyecto Run As - Run on Server, seleccionar el Tomcat 8.5 que hemos instalado y al menos arranca:

10. Comprobamos que tengamos esta estructura de ficheros



Y desde el sistema operativo


Ahora viene la parte difícil de entender lo que hace.

2. Posibles problemas (si no ha arrancado)

1. Si sale este error:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'placeholderConfig' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'securityConfigFileWithPath' while setting bean property 'locations' with key [0]; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1021E: A problem occurred whilst attempting to access the property 'spConfigRepository': 'Error creating bean with name 'spConfigRepository' defined in class path resource [spEnvironmentContext.xml]: Bean instantiation via constructor failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [java.lang.String]: Constructor threw exception; nested exception is java.lang.NullPointerException: Cannot invoke "java.lang.StringBuffer.toString()" because "buffer" is null'

Hay que vigilar en la "Console" a ver si aparece un a referencia a un JDK que no sea el 1.8

INFORMACIÓN: Java Home:                         /home/edu/MyPrograms/eclipse2022-03/plugins/org.eclipse.justj.openjdk.hotspot.jre.full.linux.x86_64_17.0.2.v20220201-1208/jre

Como se puede ver hace referencia a java 17. Por tanto hay que arreglar el Java Build path para que apunte donde toca (jdk o jre 8).

2. Si sale este error:

org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: /home/edu/MyWorkspaces/WS_CLAVE/SP2/ConfigsecurityConf.xml (No existe el archivo o el directorio)

Es que nos hemos olvidado de de indicar en el punto 6.a o 6.b la barra final (/) del path
/home/ximo/MyWorkspaces/WS_CLAVE/SP2/Config/

A veces parece que está bien escrito la ruta anterior y no lo está. Vale la pena entrar en un navegador de archivos y copiar la ruta y pegarla. Estos errores dan mucha guerra y son difíciles de encontrar