Instalación de Software NextTypes

Las instrucciones de instalación son para el sistema operativo Debian GNU/Linux 12 Bookworm. Otros sistemas operativos pueden requerir acciones distintas para varios de los pasos. Algunos paquetes es necesario instalarlos de la versión Unstable, para ello se debe añadir su repositorio al archivo de configuración /etc/apt/sources.

deb http://ftp.es.debian.org/debian/ sid main

También es necesario configurar la preferencia de los repositorios en el archivo /etc/apt/preferences para dar mayor preferencia a los paquetes de la versión estable.

Package: *
Pin: release a=stable
Pin-Priority: 900

Package: *
Pin: release a=unstable
Pin-Priority: 800

Una vez configurado podemos actualizar la lista de paquetes.

# apt-get update

Autenticación

El sistema disponde de dos modos de autenticación: certificados y contraseñas. Al instalarse el sistema se crea el usuario admin con contraseña "Admin#44" y el certificado "CN=Admin,O=NextTypes" asignado. Lo primero que se debe hacer es cambiar la contraseña o eliminarla y asignarle un certificado válido. Cuando se crea un usuario se le puede asignar una contraseña y/o varios certificados. Las contraseñas deben tener al menos 8 caracteres, mayúsculas, minúsculas, números y caracteres especiales. El usuario admin pertenece al grupo administrators, que tiene permisos para realizar tareas de administración del sistema.

Autoridad de Certificación

Como uno de los sistema de autenticación son los certificados digitales X.509 es necesario disponer de ellos, al menos para los servidores, firmados por una Autoridad de Certificación (Certificate Authority en inglés o CA). También es recomendable su uso para los usuarios.

En el caso de no disponer de certificados o de una CA se puede crear una CA y los certificados necesarios usando OpenSSL. El ordenador utilizado para la CA debe ser distinto a los servidores y ordenadores de los usuarios, preferiblemente sin conexión de red y con el acceso lo mas restringido posible.

Instalación OpenSSL

Si aún no está instalado OpenSSL se puede instalar con el siguiente comando:

# apt-get install openssl

Configuración OpenSSL

Una vez instalado OpenSSL se prepara el directorio de la CA con los siguientes comandos:

# cd /etc/ssl
# mkdir ca -m 700
# cd ca
# mkdir private newcerts
# touch index.txt
# echo "01" > serial

En el directorio private se guardan las claves privadas, en newcerts los certificados creados, en index.txt un índice de los certificados y en serial el número de serie a utilizar en la creación del siguiente certificado.

El siguiente paso es modificar el archivo de configuración /etc/ssl/openssl.cnf para asignar a la CA el directorio creado.

[ CA_default ]

dir = /etc/ssl/ca

El tamaño de las claves privadas se debe configurar en al menos 2048 bits.

[ req ]
  
default_bits = 2048

Certificado y clave privada de la CA

Después de configurar OpenSSL es necesario crear el certificado y clave privada de la CA con el siguiente comando:

# openssl req -new -x509 -days 3650 -extensions v3_ca -keyout private/cakey.pem -out cacert.pem

Durante la creación el programa pide una contraseña para la clave privada e información sobre la organización que gestiona la CA (código de país, provincia, localidad, nombre de la organización, departamento, dirección de Internet e email).

Generating a RSA private key
.....+++++
................................+++++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Madrid
Locality Name (eg, city) []:Madrid
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NextTypes Project
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:NextTypes CA
Email Address []:admin@nexttypes.com

Al finalizar el certificado se encuentra en el archivo cacert.pem y la clave privada en el archivo private/cakey.pem. Podemos comprobar los datos del certificado creado con el siguiente comando:

# openssl x509 -in cacert.pem -text

La salida del programa muestra una descripción del certificado y el propio certificado entre las etiquetas -----BEGIN CERTIFICATE----- y -----END CERTIFICATE-----.

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            3e:96:d9:d5:60:1a:b9:35:08:4d:77:cd:03:52:7b:d1:51:2a:23:4b
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = ES, ST = Madrid, L = Madrid, O = NextTypes Project, CN = NextTypes CA, emailAddress = admin@nexttypes.com
        Validity
            Not Before: Nov 16 20:20:23 2020 GMT
            Not After : Nov 14 20:20:23 2030 GMT
        Subject: C = ES, ST = Madrid, L = Madrid, O = NextTypes Project, CN = NextTypes CA, emailAddress = admin@nexttypes.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:b8:b1:19:35:b1:a5:5b:6b:83:2d:c1:dd:b4:ab:
                    cd:d1:ea:e6:a0:67:2b:bc:2e:bb:72:28:a7:76:e0:
                    c4:87:17:bb:91:f7:33:d8:59:4c:87:c4:9d:39:f4:
                    02:9a:cb:7f:89:61:12:e1:7e:bb:d3:b3:84:32:c9:
                    96:f4:85:99:16:1a:a4:1d:ec:60:25:d0:27:4c:87:
                    d4:f4:ab:c4:93:1a:19:95:73:72:8a:fc:b6:de:f4:
                    3b:b4:09:a8:b1:2b:0b:fc:b2:7e:ff:0d:98:07:3b:
                    4a:3f:dc:8d:73:63:c9:0b:b2:6a:4a:11:c7:9e:74:
                    46:5e:4c:f4:20:f7:1a:29:1d:83:44:6f:25:64:12:
                    eb:4b:1d:91:64:c0:5a:8e:5b:f0:c3:27:9a:7e:fa:
                    c2:34:79:45:32:78:25:b8:74:23:21:76:4a:11:3c:
                    c4:28:ee:39:d0:e2:c0:c8:68:6b:83:da:e2:fb:76:
                    0e:52:d9:3c:54:69:53:3e:40:8c:de:f8:a8:d6:c7:
                    41:ac:d6:9b:b5:58:19:0e:28:b4:64:7a:09:61:2b:
                    fd:98:d1:ae:d7:fe:4e:1f:62:d3:ab:5e:fe:3e:99:
                    d0:ec:4f:ca:32:6e:82:fc:df:ea:94:d8:64:f7:f9:
                    8e:e6:13:1a:7a:3c:5e:c7:d2:cc:6c:b7:42:e6:d0:
                    79:8b
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier: 
                55:45:97:F3:E0:71:DF:3F:39:19:DA:5E:34:76:41:70:36:9E:FE:0D
            X509v3 Authority Key Identifier: 
                keyid:55:45:97:F3:E0:71:DF:3F:39:19:DA:5E:34:76:41:70:36:9E:FE:0D

            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         1d:b5:75:0a:84:10:c3:55:03:cb:28:6e:e3:ab:1d:3f:2a:7b:
         c8:32:5d:07:4a:b6:9f:de:de:0b:23:d0:f5:04:d8:1a:ec:25:
         1a:02:7e:2c:4b:8c:a3:94:65:56:c6:4d:e7:55:fb:f1:c9:31:
         54:5d:a7:d0:b7:95:8e:db:31:26:9f:0a:73:bb:ba:90:4c:a4:
         6b:3f:75:5d:de:f1:7b:04:33:80:3c:be:58:a3:6e:c9:30:cf:
         d9:98:df:4f:27:46:cf:34:cd:49:2a:a6:56:bb:84:53:d3:f5:
         c0:0a:de:4d:34:f3:44:e1:8c:bb:f0:9d:69:6d:e5:dc:91:39:
         c7:ca:b0:0f:fe:d5:4c:f8:0a:51:1d:cf:50:11:28:2a:0b:6a:
         35:0f:74:1b:ba:05:61:ae:87:95:38:42:51:b8:1b:e2:ff:82:
         c9:aa:04:a5:da:7a:75:4c:d0:34:a0:38:8d:66:69:69:d5:ed:
         11:f1:1e:9d:a4:3c:05:03:d9:5b:11:61:b8:6a:a7:99:ca:19:
         ca:8b:22:d8:a2:c5:da:d8:41:31:5f:5e:9c:0e:76:0e:b4:e1:
         2d:fd:70:a1:4d:bb:0f:76:56:17:ca:9c:40:6c:9b:8e:5e:01:
         dd:5a:51:7b:61:4c:dc:41:2d:45:0a:c1:fc:da:d8:3c:ea:ba:
         17:71:0f:af
-----BEGIN CERTIFICATE-----
MIID7zCCAtegAwIBAgIUPpbZ1WAauTUITXfNA1J70VEqI0swDQYJKoZIhvcNAQEL
BQAwgYYxCzAJBgNVBAYTAkVTMQ8wDQYDVQQIDAZNYWRyaWQxDzANBgNVBAcMBk1h
ZHJpZDEaMBgGA1UECgwRTmV4dFR5cGVzIFByb2plY3QxFTATBgNVBAMMDE5leHRU
eXBlcyBDQTEiMCAGCSqGSIb3DQEJARYTYWRtaW5AbmV4dHR5cGVzLmNvbTAeFw0y
MDExMTYyMDIwMjNaFw0zMDExMTQyMDIwMjNaMIGGMQswCQYDVQQGEwJFUzEPMA0G
A1UECAwGTWFkcmlkMQ8wDQYDVQQHDAZNYWRyaWQxGjAYBgNVBAoMEU5leHRUeXBl
cyBQcm9qZWN0MRUwEwYDVQQDDAxOZXh0VHlwZXMgQ0ExIjAgBgkqhkiG9w0BCQEW
E2FkbWluQG5leHR0eXBlcy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC4sRk1saVba4Mtwd20q83R6uagZyu8LrtyKKd24MSHF7uR9zPYWUyHxJ05
9AKay3+JYRLhfrvTs4QyyZb0hZkWGqQd7GAl0CdMh9T0q8STGhmVc3KK/Lbe9Du0
CaixKwv8sn7/DZgHO0o/3I1zY8kLsmpKEceedEZeTPQg9xopHYNEbyVkEutLHZFk
wFqOW/DDJ5p++sI0eUUyeCW4dCMhdkoRPMQo7jnQ4sDIaGuD2uL7dg5S2TxUaVM+
QIze+KjWx0Gs1pu1WBkOKLRkeglhK/2Y0a7X/k4fYtOrXv4+mdDsT8oyboL83+qU
2GT3+Y7mExp6PF7H0sxst0Lm0HmLAgMBAAGjUzBRMB0GA1UdDgQWBBRVRZfz4HHf
PzkZ2l40dkFwNp7+DTAfBgNVHSMEGDAWgBRVRZfz4HHfPzkZ2l40dkFwNp7+DTAP
BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAdtXUKhBDDVQPLKG7j
qx0/KnvIMl0HSraf3t4LI9D1BNga7CUaAn4sS4yjlGVWxk3nVfvxyTFUXafQt5WO
2zEmnwpzu7qQTKRrP3Vd3vF7BDOAPL5Yo27JMM/ZmN9PJ0bPNM1JKqZWu4RT0/XA
Ct5NNPNE4Yy78J1pbeXckTnHyrAP/tVM+ApRHc9QESgqC2o1D3QbugVhroeVOEJR
uBvi/4LJqgSl2np1TNA0oDiNZmlp1e0R8R6dpDwFA9lbEWG4aqeZyhnKiyLYosXa
2EExX16cDnYOtOEt/XChTbsPdlYXypxAbJuOXgHdWlF7YUzcQS1FCsH82tg86roX
cQ+v
-----END CERTIFICATE-----

Claves privadas y peticiones de certificados de los servidores y usuarios

Una vez configurada la CA el siguiente paso es la creación de los certificados para los servidores y los usuarios. Esto se puede hacer mediante un CSR (Certificate Signing Request) creado con OpenSSL.

En el equipo servidor o del usuario se debe crear una clave privada si no se dispone ya de ella con el siguiente comando:

# openssl genrsa -out privkey.pem 2048

La clave privada se puede cifrar usando un algoritmo como AES añadiendo el parámetro -aes256. El siguiente paso es utilizar la clave privada para crear una petición de certificado usando el siguiente comando:

# openssl req -new -key privkey.pem -out certrequest.csr -utf8

El programa pide la información a introducir en el certificado como el código de país o la provincia. El Common Name debe ser la dirección de Internet en el caso de los servidores y el nombre y apellidos en el caso de un usuario. El parámetro -utf8 permite utilizar caracteres no ASCII en el Common Name.

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:Madrid
Locality Name (eg, city) []:Madrid
Organization Name (eg, company) [Internet Widgits Pty Ltd]:NextTypes Project
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:demo.nexttypes.com
Email Address []:admin@nexttypes.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Al finalizar la clave privada se encuentra en el archivo privkey.pem y la petición de certificado en el archivo certrequest.csr. La petición de certificado debe ser enviada al ordenador de la CA para ser firmada.

Firmado de certificados por la CA

La petición de certificado creada anteriormente debe ser firmada por la CA con el siguiente comando:

# openssl ca -in certrequest.csr -out cert.pem

El programa pide la contraseña de la clave privada de la CA, muestra los datos de la petición de certificado y pide confirmación para firmarlo y añadirlo a la base de datos de certificados.

Using configuration from /usr/lib/ssl/openssl.cnf
Enter pass phrase for /etc/ssl/ca/private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Nov 16 20:24:08 2020 GMT
            Not After : Nov 16 20:24:08 2021 GMT
        Subject:
            countryName               = ES
            stateOrProvinceName       = Madrid
            organizationName          = NextTypes Project
            commonName                = demo.nexttypes.com
            emailAddress              = admin@nexttypes.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                C2:D8:A7:80:FC:CF:12:1D:69:85:6A:A4:AB:6B:31:77:B2:00:C1:CA
            X509v3 Authority Key Identifier: 
                keyid:55:45:97:F3:E0:71:DF:3F:39:19:DA:5E:34:76:41:70:36:9E:FE:0D

Certificate is to be certified until Nov 16 20:24:08 2021 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

El certificado firmado se guarda en el archivo cert.pem y en la base de datos de certificados de la CA. El archivo contiene una descripción en texto del certificado y el propio certificado entre las etiquetas -----BEGIN CERTIFICATE----- y -----END CERTIFICATE-----.

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = ES, ST = Madrid, L = Madrid, O = NextTypes Project, CN = NextTypes CA, emailAddress = admin@nexttypes.com
        Validity
            Not Before: Nov 16 20:24:08 2020 GMT
            Not After : Nov 16 20:24:08 2021 GMT
        Subject: C = ES, ST = Madrid, O = NextTypes Project, CN = demo.nexttypes.com, emailAddress = admin@nexttypes.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:ad:46:2c:58:18:24:af:73:e7:8b:62:ae:74:bc:
                    58:7a:ad:93:25:30:09:a1:e1:8b:a1:b1:81:f8:2d:
                    08:52:96:6c:b8:78:21:00:24:dd:17:b3:be:20:0d:
                    77:c2:2e:14:5c:29:56:d6:49:d5:29:98:a5:80:9b:
                    75:30:c0:e7:e7:13:a1:55:cb:13:27:89:2a:03:8a:
                    8a:7c:5c:73:8d:82:d7:7f:15:8b:c7:27:0a:14:51:
                    79:2b:17:a6:d6:03:d2:4b:1e:41:47:19:b6:f4:a0:
                    3b:c6:7a:91:71:55:e0:6c:57:ba:fb:23:11:67:e8:
                    f3:a7:d4:18:64:20:bb:09:15:76:31:ff:89:e0:fb:
                    e4:b6:0d:2b:8a:c2:e4:e0:43:2b:52:5e:32:41:ce:
                    62:d3:61:1c:c5:c3:f3:a4:e1:ae:e5:c5:4e:6f:e8:
                    f9:d5:69:c6:46:3c:f9:39:cd:b7:b7:ed:ae:91:6a:
                    b7:6d:f6:d6:9b:38:5a:ad:9c:2c:87:e9:67:10:3a:
                    bf:ca:63:72:db:78:db:c7:00:d6:b1:34:8c:59:fa:
                    37:01:8f:ea:4a:ec:31:4d:62:93:9a:61:be:d3:e6:
                    c6:cc:79:6c:73:59:50:d1:8f:84:99:72:5d:fa:03:
                    9d:23:c2:50:f9:68:50:95:31:13:a9:fe:e2:d8:db:
                    1d:dd
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                C2:D8:A7:80:FC:CF:12:1D:69:85:6A:A4:AB:6B:31:77:B2:00:C1:CA
            X509v3 Authority Key Identifier: 
                keyid:55:45:97:F3:E0:71:DF:3F:39:19:DA:5E:34:76:41:70:36:9E:FE:0D

    Signature Algorithm: sha256WithRSAEncryption
         14:8a:8a:b9:a1:18:38:d9:a7:c1:a3:85:df:e0:f0:60:3f:10:
         73:8f:78:f7:25:0b:30:61:f9:10:f6:7e:07:a7:b3:50:69:d2:
         ba:ea:3f:59:b7:e6:2d:1f:15:6c:dc:aa:4c:83:30:4e:7e:03:
         59:94:1f:b7:63:6a:0a:79:0b:cb:2c:64:af:49:86:64:da:f0:
         4b:9d:4c:08:f1:a8:18:38:da:43:a7:47:b2:85:5b:ab:36:be:
         1a:b5:b4:b6:7e:f0:47:de:8e:4f:ef:28:ad:b9:80:da:c2:2d:
         97:5e:7f:2f:46:ac:f2:24:c8:4a:a4:c2:01:3d:d6:a1:cc:64:
         01:0b:2f:88:6c:db:52:ef:6f:a3:32:60:9a:81:88:41:82:92:
         1b:de:c6:8f:79:fd:10:60:17:e9:6e:86:1a:9f:05:50:dc:8b:
         58:c0:7f:db:55:4d:2b:c2:24:be:20:7b:ab:82:52:2a:bc:47:
         7e:13:3f:ab:86:ec:1a:6d:e7:5f:cb:6e:90:a6:91:e3:90:fa:
         6a:d4:32:1e:df:2d:bd:12:64:bd:0e:89:d6:db:39:c9:70:53:
         7a:2a:7a:82:15:95:e9:17:91:86:51:a5:7a:15:a5:87:04:ba:
         1c:54:ea:f8:b1:fc:64:e8:fb:33:0e:f7:c3:c6:ea:24:6f:d0:
         a4:6a:28:75
-----BEGIN CERTIFICATE-----
MIID+DCCAuCgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBhjELMAkGA1UEBhMCRVMx
DzANBgNVBAgMBk1hZHJpZDEPMA0GA1UEBwwGTWFkcmlkMRowGAYDVQQKDBFOZXh0
VHlwZXMgUHJvamVjdDEVMBMGA1UEAwwMTmV4dFR5cGVzIENBMSIwIAYJKoZIhvcN
AQkBFhNhZG1pbkBuZXh0dHlwZXMuY29tMB4XDTIwMTExNjIwMjQwOFoXDTIxMTEx
NjIwMjQwOFowezELMAkGA1UEBhMCRVMxDzANBgNVBAgMBk1hZHJpZDEaMBgGA1UE
CgwRTmV4dFR5cGVzIFByb2plY3QxGzAZBgNVBAMMEmRlbW8ubmV4dHR5cGVzLmNv
bTEiMCAGCSqGSIb3DQEJARYTYWRtaW5AbmV4dHR5cGVzLmNvbTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAK1GLFgYJK9z54tirnS8WHqtkyUwCaHhi6Gx
gfgtCFKWbLh4IQAk3RezviANd8IuFFwpVtZJ1SmYpYCbdTDA5+cToVXLEyeJKgOK
inxcc42C138Vi8cnChRReSsXptYD0kseQUcZtvSgO8Z6kXFV4GxXuvsjEWfo86fU
GGQguwkVdjH/ieD75LYNK4rC5OBDK1JeMkHOYtNhHMXD86ThruXFTm/o+dVpxkY8
+TnNt7ftrpFqt2321ps4Wq2cLIfpZxA6v8pjctt428cA1rE0jFn6NwGP6krsMU1i
k5phvtPmxsx5bHNZUNGPhJlyXfoDnSPCUPloUJUxE6n+4tjbHd0CAwEAAaN7MHkw
CQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2Vy
dGlmaWNhdGUwHQYDVR0OBBYEFMLYp4D8zxIdaYVqpKtrMXeyAMHKMB8GA1UdIwQY
MBaAFFVFl/Pgcd8/ORnaXjR2QXA2nv4NMA0GCSqGSIb3DQEBCwUAA4IBAQAUioq5
oRg42afBo4Xf4PBgPxBzj3j3JQswYfkQ9n4Hp7NQadK66j9Zt+YtHxVs3KpMgzBO
fgNZlB+3Y2oKeQvLLGSvSYZk2vBLnUwI8agYONpDp0eyhVurNr4atbS2fvBH3o5P
7yituYDawi2XXn8vRqzyJMhKpMIBPdahzGQBCy+IbNtS72+jMmCagYhBgpIb3saP
ef0QYBfpboYanwVQ3ItYwH/bVU0rwiS+IHurglIqvEd+Ez+rhuwabedfy26QppHj
kPpq1DIe3y29EmS9DonW2znJcFN6KnqCFZXpF5GGUaV6FaWHBLocVOr4sfxk6Psz
DvfDxuokb9Ckaih1
-----END CERTIFICATE-----

En el directorio de la CA se puede ver como el certificado se ha copiado al directorio newcerts, se ha añadido una entrada en el archivo index y se ha aumentado en uno el valor en el archivo serial. La entrada en el archivo index es la siguiente:

V 211116202408Z 01 unknown /C=ES/ST=Madrid/O=NextTypes Project/CN=demo.nexttypes.com/emailAddress=admin@nexttypes.com

El certificado y la clave privada se guardan en formato PEM. Para utilizarlos en algunos programas como Firefox o en una tarjeta inteligente, es necesario exportarlos a formato PKCS12 con el siguiente comando:

# openssl pkcs12 -export -in cert.pem -inkey privkey.pem -out keystore.p12 -name nexttypes

El programa pide una contraseña y al terminar de ejecutarse la clave privada y el certificado quedan guardados en el archivo keystore.p12 listos para poder ser usados en los programas que requieran este formato. El valor del parámetro -name es un alias que se asigna a la clave y certificado y que habrá que usar para identificarlos en el programa donde se importen.

Revocación de certificados

Cuando un certificado y su clave privada ha caido en posesión de un atacante o se desea renovar un certificado caducado es necesario revocarlo con el siguiente comando:

# openssl ca -revoke cert.pem

Una vez hecho esto se puede realizar el procedimiento descrito anteriormente de creación de petición de certificado y firmado de esta.

Certificados Let's Encrypt

Si necesitamos tener servidores accesibles a través de internet para cualquier usuario es conveniente que el certificado de los servidores sea de una autoridad de certificación reconocida por los navegadores comunmente utilizados. Una de estas autoridades es Let's Encrypt, que nos permite obtener certificados gratuitos.

Para solicitar los certificados debemos tener el servidor funcionando y las direcciones para las que queramos los certificados apuntando a la dirección IP del servidor en los servidores DNS. El sistema de generación de certificados de Let's Encrypt utilizará el protocolo ACME para conectar a nuestro servidor usando la dirección que queremos en el certificado y comprobar que tenemos el control de esa dirección.

Para recibir la conexión debemos instalar y ejecutar un programa como certbot. Nos dará dos opciones para hacer la comprobación: ejecutar un servidor HTTP desde certbot o escribir los archivos necesarios en el directorio raíz de un servidor que ya tengamos funcionado. Si tenemos un servidor funcionando, como por ejemplo Tomcat, pero preferimos usar el servidor de certbot, debemos parar nuestro servidor antes.

# systemctl stop tomcat10
# apt-get install certbot
# certbot certonly

Al ejecutar el programa nos pide que elijamos entre las dos opciones y que pulsemos enter.

Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1

A continuación nos pedirá una dirección de correo de contacto.

Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): alex@nexttypes.com

El siguiente paso es leer y aceptar los términos del servicio.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

Después podemos elegir si queremos que compartan nuestra dirección de correo con la Electronic Frontier Foundation para que nos puedan enviar correos informativos.

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

Por último debemos indicar las direcciones que queremos incluir en el certificado.

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): nexttypes.com www.nexttypes.com

Una vez introducidos estos datos se produce el proceso de comprobación de que tenemos el control de las direcciones y la generación del certificado y la clave privada.

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for nexttypes.com
http-01 challenge for www.nexttypes.com
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/nexttypes.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/nexttypes.com/privkey.pem
   Your cert will expire on 2021-07-02. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

 - We were unable to subscribe you the EFF mailing list because your
   e-mail address appears to be invalid. You can try again later by
   visiting https://act.eff.org.

Terminado el proceso, en el directorio /etc/letsencrypt/live/nexttypes.com se encuentra el certificado (cert.pem), la clave privada (privkey.pem) y la cadena completa de certificados (fullchain.pem) que incluye el certificado del servidor y el de la autoridad de certificación. El certificado es válido para tres meses, antes de que caduque es necesario renovarlo ejecutando otra vez certbot.

Con el comando openssl podemos ver la información del certificado.

# openssl x509 -in cert.pem -text

La salida del programa muestra una descripción del certificado y el propio certificado entre las etiquetas -----BEGIN CERTIFICATE----- y -----END CERTIFICATE-----.

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            04:bb:43:b8:2f:d3:85:fe:e2:87:ce:53:5a:4e:11:27:90:ca
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = Let's Encrypt, CN = R3
        Validity
            Not Before: Apr  3 19:05:33 2021 GMT
            Not After : Jul  2 19:05:33 2021 GMT
        Subject: CN = nexttypes.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:98:d4:9c:45:61:a2:37:35:b3:9f:5f:c2:4c:2c:
                    ad:a7:d6:02:d6:bd:a6:15:d0:75:f1:40:82:ef:18:
                    64:7f:b2:e5:93:37:42:20:08:d7:24:21:01:a6:09:
                    87:27:f0:61:a5:b4:57:cd:2f:2b:48:d2:c8:49:82:
                    fa:a2:f0:02:46:3e:00:50:9b:00:b5:58:05:73:87:
                    fa:15:ec:f8:89:02:f2:e8:82:c6:23:1c:d7:ff:03:
                    c8:18:6b:a2:57:c4:43:33:79:5e:3a:71:0f:9e:d0:
                    14:05:0e:a2:40:f2:40:13:63:2c:b0:66:f9:2c:4b:
                    d5:2f:e5:ad:06:bd:d8:40:bb:77:67:30:bb:a2:10:
                    49:c8:37:e3:84:65:79:5a:26:25:d5:00:2f:86:72:
                    7d:2c:22:1b:f8:59:a9:b1:28:26:c2:8a:46:0c:52:
                    c1:cd:a9:cc:f5:04:42:66:05:ae:ae:3f:33:e1:06:
                    69:94:50:b1:2d:8a:4b:bc:00:63:ba:98:c7:34:02:
                    88:1d:4d:f1:10:1c:f1:72:f3:dd:1e:77:eb:10:67:
                    66:e0:c1:ab:75:99:ea:d8:3e:2a:ab:1b:d6:17:27:
                    22:89:90:d8:0a:c7:b1:00:50:70:ab:8c:66:bd:b7:
                    b6:eb:76:9d:59:39:81:a5:d8:fe:59:eb:3b:c5:69:
                    59:5b
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Digital Signature, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Server Authentication, TLS Web Client Authentication
            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Subject Key Identifier: 
                16:01:84:21:53:75:C4:64:0F:30:03:B6:19:E5:E1:18:A1:B0:4A:6E
            X509v3 Authority Key Identifier: 
                keyid:14:2E:B3:17:B7:58:56:CB:AE:50:09:40:E6:1F:AF:9D:8B:14:C2:C6

            Authority Information Access: 
                OCSP - URI:http://r3.o.lencr.org
                CA Issuers - URI:http://r3.i.lencr.org/

            X509v3 Subject Alternative Name: 
                DNS:nexttypes.com, DNS:www.nexttypes.com
            X509v3 Certificate Policies: 
                Policy: 2.23.140.1.2.1
                Policy: 1.3.6.1.4.1.44947.1.1.1
                  CPS: http://cps.letsencrypt.org

            CT Precertificate SCTs: 
                Signed Certificate Timestamp:
                    Version   : v1 (0x0)
                    Log ID    : 6F:53:76:AC:31:F0:31:19:D8:99:00:A4:51:15:FF:77:
                                15:1C:11:D9:02:C1:00:29:06:8D:B2:08:9A:37:D9:13
                    Timestamp : Apr  3 20:05:33.686 2021 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                30:44:02:20:49:A9:85:58:DD:5F:9B:DC:6C:2B:7C:35:
                                93:46:A3:C4:36:96:E8:C8:2A:54:2E:70:94:01:42:F6:
                                F6:BB:64:A4:02:20:40:A0:96:F8:02:A0:0D:4D:D0:AA:
                                E0:FD:15:4F:55:17:52:8D:77:0C:8E:22:48:DC:E2:6A:
                                64:E5:46:7B:1D:0F
                Signed Certificate Timestamp:
                    Version   : v1 (0x0)
                    Log ID    : 7D:3E:F2:F8:8F:FF:88:55:68:24:C2:C0:CA:9E:52:89:
                                79:2B:C5:0E:78:09:7F:2E:6A:97:68:99:7E:22:F0:D7
                    Timestamp : Apr  3 20:05:33.680 2021 GMT
                    Extensions: none
                    Signature : ecdsa-with-SHA256
                                30:45:02:20:1D:D3:F0:20:B5:6B:D2:15:D5:DD:28:0D:
                                57:B2:7D:FA:3A:DD:76:A1:62:33:09:14:FE:15:8F:4A:
                                ED:3A:3D:01:02:21:00:FF:73:0E:EB:FA:9B:8D:2E:AF:
                                5B:22:1A:B0:AC:D7:3C:56:5F:BC:55:45:85:A6:E2:DD:
                                66:BD:28:39:BA:D7:15
    Signature Algorithm: sha256WithRSAEncryption
         5f:01:ed:17:6d:99:2d:b9:72:fa:6c:d8:24:ac:61:73:cb:34:
         a1:b0:c4:2c:dc:8d:97:0f:69:ab:8f:33:bd:88:81:c1:17:d3:
         a7:90:0f:eb:00:53:28:c5:a1:1a:f6:b9:cc:cf:10:b5:f2:91:
         24:f9:dc:03:9f:f1:13:8a:6e:1a:ef:08:8b:d9:aa:a8:fd:bc:
         b4:ec:49:14:bb:ce:2a:2b:38:c6:86:f8:44:9d:4c:8a:ba:7b:
         45:07:c0:21:4f:d2:11:32:a2:7e:c7:bf:9f:4c:e1:79:98:ca:
         cd:8b:15:25:f1:42:c8:55:d8:9e:0d:1a:80:89:eb:a3:77:ee:
         78:88:c0:ac:5a:d3:48:d6:77:d6:f2:b6:04:db:5a:92:70:1a:
         4b:0a:bf:05:5a:a6:07:8c:d4:ae:f1:35:03:3c:14:22:8c:ab:
         7d:dc:75:85:f3:3d:7e:42:1b:1c:42:b4:84:ac:b2:62:a2:1d:
         1f:15:75:a8:f7:81:a1:10:7b:21:a8:29:6f:38:07:87:ab:d9:
         b7:76:8c:4b:af:49:ce:ac:a6:ae:0f:3e:27:a3:29:26:e3:a6:
         d0:38:8e:c4:c8:e9:93:80:d8:8f:44:33:bf:5b:9a:24:69:87:
         8f:39:ed:21:82:7b:d2:8c:40:1c:da:dd:6b:0d:65:02:dd:01:
         47:7a:c3:33
-----BEGIN CERTIFICATE-----
MIIFUTCCBDmgAwIBAgISBLtDuC/Thf7ih85TWk4RJ5DKMA0GCSqGSIb3DQEBCwUA
MDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQD
EwJSMzAeFw0yMTA0MDMxOTA1MzNaFw0yMTA3MDIxOTA1MzNaMBgxFjAUBgNVBAMT
DW5leHR0eXBlcy5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCY
1JxFYaI3NbOfX8JMLK2n1gLWvaYV0HXxQILvGGR/suWTN0IgCNckIQGmCYcn8GGl
tFfNLytI0shJgvqi8AJGPgBQmwC1WAVzh/oV7PiJAvLogsYjHNf/A8gYa6JXxEMz
eV46cQ+e0BQFDqJA8kATYyywZvksS9Uv5a0GvdhAu3dnMLuiEEnIN+OEZXlaJiXV
AC+Gcn0sIhv4WamxKCbCikYMUsHNqcz1BEJmBa6uPzPhBmmUULEtiku8AGO6mMc0
AogdTfEQHPFy890ed+sQZ2bgwat1merYPiqrG9YXJyKJkNgKx7EAUHCrjGa9t7br
dp1ZOYGl2P5Z6zvFaVlbAgMBAAGjggJ5MIICdTAOBgNVHQ8BAf8EBAMCBaAwHQYD
VR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0O
BBYEFBYBhCFTdcRkDzADthnl4RihsEpuMB8GA1UdIwQYMBaAFBQusxe3WFbLrlAJ
QOYfr52LFMLGMFUGCCsGAQUFBwEBBEkwRzAhBggrBgEFBQcwAYYVaHR0cDovL3Iz
Lm8ubGVuY3Iub3JnMCIGCCsGAQUFBzAChhZodHRwOi8vcjMuaS5sZW5jci5vcmcv
MEoGA1UdEQRDMEGCHW1lZGlhLmN1YWRlcm5vaW5mb3JtYXRpY2EuY29tgg1uZXh0
dHlwZXMuY29tghF3d3cubmV4dHR5cGVzLmNvbTBMBgNVHSAERTBDMAgGBmeBDAEC
ATA3BgsrBgEEAYLfEwEBATAoMCYGCCsGAQUFBwIBFhpodHRwOi8vY3BzLmxldHNl
bmNyeXB0Lm9yZzCCAQMGCisGAQQB1nkCBAIEgfQEgfEA7wB1AG9Tdqwx8DEZ2JkA
pFEV/3cVHBHZAsEAKQaNsgiaN9kTAAABeJlXOXYAAAQDAEYwRAIgSamFWN1fm9xs
K3w1k0ajxDaW6MgqVC5wlAFC9va7ZKQCIECglvgCoA1N0Krg/RVPVRdSjXcMjiJI
3OJqZOVGex0PAHYAfT7y+I//iFVoJMLAyp5SiXkrxQ54CX8uapdomX4i8NcAAAF4
mVc5cAAABAMARzBFAiAd0/AgtWvSFdXdKA1Xsn36Ot12oWIzCRT+FY9K7To9AQIh
AP9zDuv6m40ur1siGrCs1zxWX7xVRYWm4t1mvSg5utcVMA0GCSqGSIb3DQEBCwUA
A4IBAQBfAe0XbZktuXL6bNgkrGFzyzShsMQs3I2XD2mrjzO9iIHBF9OnkA/rAFMo
xaEa9rnMzxC18pEk+dwDn/ETim4a7wiL2aqo/by07EkUu84qKzjGhvhEnUyKuntF
B8AhT9IRMqJ+x7+fTOF5mMrNixUl8ULIVdieDRqAieujd+54iMCsWtNI1nfW8rYE
21qScBpLCr8FWqYHjNSu8TUDPBQijKt93HWF8z1+QhscQrSErLJioh0fFXWo94Gh
EHshqClvOAeHq9m3doxLr0nOrKauDz4noykm46bQOI7EyOmTgNiPRDO/W5okaYeP
Oe0hgnvSjEAc2t1rDWUC3QFHesMz
-----END CERTIFICATE-----

Si paramos nuestro servidor HTTP podemos volver a arrancarlo.

# systemctl start tomcat10

PostgreSQL

El nodo de almacenamiento PostgreSQLNode usa el gestor de bases de datos PostgreSQL, por lo que es necesario un servidor de este tipo para poder utilizar el nodo. Para instalarlo es necesario ejecutar el siguiente comando:

# apt-get install postgresql

Creación de base de datos y usuarios

La creación de la base de datos y los usuarios se debe hacer con el usuario del sistema postgres. Para pasar a usar ese usuario se ejecuta el siguiente comando:

su postgres

El siguiente paso es crear la base de datos:

# createdb nexttypes

A continuación se crean tres usuarios a los que NextTypes asignará diferentes permisos para cada una de las tablas creadas para aislar los diferentes tipos de operaciones y que se realicen con los permisos mínimos necesarios para aumentar la seguridad. Un usuario de lectura (select), uno de lectura y escritura (select, insert, update, delete) y uno para tareas administrativas (select, insert, update, create, alter, drop). Al usuario "admin" se le debe dar permiso para crear tipos y tablas.

# psql nexttypes

create user read with password 'aaaaaa';
create user write with password 'aaaaaa';
create user admin with password 'aaaaaa';

grant create on schema public to admin;

Extensión UUID

Para que NextTypes pueda crear identificadores UUID para los objetos es necesario instalar la extensión uuid-ossp. Para ello se require ejecutar los siguientes comandos desde el usuario del sistema postgres:

# psql nexttypes

create extension "uuid-ossp";

Configuración

En el archivo de configuración /etc/postgresql/15/main/postgresql.conf se puede aumentar el número máximo de conexiones simultáneas si es necesario.

max_connections = 150

Para que se puedan realizar modificaciones en muchas tablas y filas en una transacción (como por ejemplo al importar datos) es necesario aumentar el número de bloqueos permitidos en una transacción con los siguientes parámetros:

max_locks_per_transaction=256
max_pred_locks_per_transaction=256

Una vez configurado es necesario volver al usuario root y reiniciar el servidor con el siguiente comando:

# systemctl restart postgresql

Navegador Web

Protección de las claves privadas y contraseñas

Es recomendable que las claves privadas y las contraseñas que se guarden en el navegador estén cifradas. En el caso de Firefox se puede configurar una "contraseña maestra" que proteja las claves privadas y las contraseñas.

Instalación del certificado de la CA

Tanto si se ha creado una CA o se utilizan certificados de una CA ya existente es necesario instalar en los navegadores de los usuarios el certificado de la CA si este no viene instalado por defecto. Por ejemplo el procedimiento para instalarlo en Firefox es el siguiente:

Menú -> Ajustes -> Privacidad y Seguridad -> Certificados -> Ver Certificados -> Autoridades -> Importar -> Seleccionar el archivo que contiene el certificado.

Una vez seleccionado hay que indicar para que usos se confía en la CA. Se debe seleccionar las dos opciones (sitios web y usuarios de email).

Importación de certificado de Autoridad de Certificación (CA) en Firefox
Importación de certificado de Autoridad de Certificación (CA) en Firefox.

Instalación del certificado del usuario generado mediante CSR (Certificate Signing Request)

Si se creó el certificado a partir de un CSR y se exportó a un archivo PKCS12 es necesario instalar este archivo en el navegador. Por ejemplo el procedimiento para instalarlo en Firefox es el siguiente:

Menú -> Preferencias -> Privacidad y Seguridad -> Certificados -> Ver Certificados -> Sus Certificados -> Importar -> Seleccionar archivo keystore.p12 > Insertar contraseña.

Certificados en tarjetas criptográficas

Como ejemplo en el manual se utilizan el lector de tarjetas SCR3310/v2 y la tarjeta criptográfica FNMT-RCM. El lector cumple los estándares PC/SC y CCID y la tarjeta PC/SC y PKCS#11.

De la web del fabricante del lector de tarjetas se pueden descargar los controladores aunque es muy posible que el sistema operativo lo detecte automáticamente al cumplir los estandares PC/SC y CCID. En Linux es necesario instalar PCSC-Lite, que implementa PCSC y CCID. En Debian se puede usar el siguiente comando:

# apt-get install pcscd pcsc-tools -t unstable

El comando anterior instala el proceso pcscd que controla las tarjetas inteligentes y las utilidades pcsc-tools. Entre las utilidades está el comando pcsc_scan, que al ejecutarlo mostrará los lectores y tarjetas conectados de la siguiente forma:

Using reader plug'n play mechanism
Scanning present readers...
0: SCM Microsystems Inc. SCR 3310 [CCID Interface] 00 00
 
Sat Nov 21 17:05:21 2020
 Reader 0: SCM Microsystems Inc. SCR 3310 [CCID Interface] 00 00
  Event number: 0
  Card state: Card inserted, 
  ATR: 3B 7F 96 00 00 00 6A 46 4E 4D 54 03 04 11 43 04 30 03 90 00

ATR: 3B 7F 96 00 00 00 6A 46 4E 4D 54 03 04 11 43 04 30 03 90 00
+ TS = 3B --> Direct Convention
+ T0 = 7F, Y(1): 0111, K: 15 (historical bytes)
  TA(1) = 96 --> Fi=512, Di=32, 16 cycles/ETU
    250000 bits/s at 4 MHz, fMax for Fi = 5 MHz => 312500 bits/s
  TB(1) = 00 --> VPP is not electrically connected
  TC(1) = 00 --> Extra guard time: 0
+ Historical bytes: 00 6A 46 4E 4D 54 03 04 11 43 04 30 03 90 00
  Category indicator byte: 00 (compact TLV data object)
    Tag: 6, len: A (pre-issuing data)
      Data: 46 4E 4D 54 03 04 11 43 04 30
    Mandatory status indicator (3 last bytes)
      LCS (life card cycle): 03 (Initialisation state)
      SW: 9000 (Normal processing.)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
3B 7F 96 00 00 00 6A 46 4E 4D 54 03 04 11 43 04 30 03 90 00
	CERES Spanish SmartCard from the "Fabrica Nacional de Moneda y Timbre" (FNMT) (eID)
	http://www.cert.fnmt.es/

Una vez preparado el lector es necesario instalar el software de la tarjeta inteligente desde la web del fabricante. En el caso de la tarjeta FNMT-RCM se puede descargar desde la web de FNMT. Ahí se encuentra la biblioteca PKCS#11 que permite utilizar la tarjeta por programas como Firefox y varias aplicaciones para configurar la tarjeta y administrar los certificados. Para Debian es necesario descargar el paquete libpkcs11-fnmtdnie_1.6.1_Debian_10_Buster_32bits.deb o libpkcs11-fnmtdnie_1.6.1_Debian_10_Buster_64bits.deb dependiendo de si se utiliza la versión de 32 o 64 bits del sistema operativo. Una vez descargado se instala con el comando dpkg. Antes es necesario instalar el paquete pinentry-gtk2 o pinentry-qt.

# apt-get install pinentry-gtk2
# dpkg -i libpkcs11-fnmtdnie_1.6.1_Debian_10_Buster_64bits.deb

Este paquete provee la biblioteca /usr/lib/libpkcs11-fnmtdnie.so con el módulo criptográfico PKCS#11 que se puede instalar en Firefox para poder usar los certificados desde el navegador. En Menú -> Preferencias -> Privacidad y Seguridad -> Certificados -> Dispositivos de Seguridad es necesario cargar este archivo .so.

Configuración de módulo PKCS#11 de tarjeta criptográfica en Firefox
Configuración de módulo PKCS#11 de tarjeta criptográfica en Firefox.

Con el programa "Importador de Certificados" podremos importar el certificado y clave privada del archivo keystore.p12 en la tarjeta criptográfica. Completados todos estos pasos ya se pueden utilizar los certificados del sistema NextTypes.

Incompatibilidades con navegadores

Al usar Firefox en resoluciones de pantalla bajas al presionar el botón derecho del ratón el menu contextual aparece debajo del puntero del ratón, por lo que al soltar el botón del ratón se presiona automáticamente la opción del menú que está debajo del puntero. Para evitar esto se puede activar la opción ui.context_menus.after_mouseup para que el menú contextual se muestre después de haber soltado el botón del ratón.

Tomcat

Debemos instalar Tomcat y Java OpenJDK para ejecutarlo.

# apt-get install openjdk-17-jre
# apt-get install tomcat10

Conexión HTTPS

El servidor necesita una conexión segura HTTPS con una clave privada y un certificado firmado por una CA. El primer paso es crear el directorio donde se almacenarán. Por defecto el directorio utilizado por NextTypes es /etc/nexttypes pero se puede utilizar otro directorio. Solo el usuario con el que se ejecuta Tomcat, por defecto tomcat, debe tener acceso.

# mkdir -m 750 /etc/nexttypes
# chgrp tomcat /etc/nexttypes

Si se creó un certificado siguiendo los pasos indicados en el punto Autoridad de Certificación o Certificados Let's Encrypt se dispone de un archivo cert.pem con el certificado y un archivo privkey.pem con la clave privada. Si hemos creado una autoridad de certificación tambien tendremos el achivo cacert.pem con su certificado que nos permitirá configurar la autenticación de clientes mediante certificados firmados por esta autoridad. Deberemos copiar estos tres archivos al directorio /etc/nexttypes y darles permisos para que pueda leerlos el usuario tomcat.

# cp cert.pem /etc/nexttypes
# cp privkey.pem /etc/nexttypes
# cp cacert.pem /etc/nexttypes
# chgrp tomcat /etc/nexttypes/*.pem
# chmod 640 /etc/nexttypes/*.pem

Una vez preparados los certifiados y clave es necesario configurar un conector HTTPS en el archivo de configuración de Tomcat /etc/tomcat10/server.xml de la siguiente forma:

<Connector
    port="443"
    SSLEnabled="true"
    secure="true"
    scheme="https">

    <SSLHostConfig
        ciphers="TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305"
        disableSessionTickets="true"
        honorCipherOrder="false"
        protocols="TLSv1.2, TLSv1.3"
        certificateVerification="optional"
        caCertificateFile="/etc/nexttypes/cacert.pem">

        <Certificate
            certificateFile="/etc/nexttypes/cert.pem"
            certificateKeyFile="/etc/nexttypes/privkey.pem" />
    </SSLHostConfig>

</Connector>

El parámetro certificateVerification indica el tipo de autenticación del cliente mediante un certificado firmado por una de las CA en las que se confía. Puede tener tres niveles:

Si se desea utilizar autenticacion de los usuarios mediante certificados es necesario que el nivel sea al menos optional. De esta forma se podrán usar certificados o contraseñas. Si se quiere que la autenticación sea obligatoriamente con un certificado el nivel debe ser required.

El parámetro secure debe tener el valor true para que NextTypes pueda saber si la petición se realiza por un canal seguro mediante el método isSecure de la clase ServletRequest.

Es importante indicar las versiónes del protocolo TLS más recientes y una lista con los conjuntos de algoritmos de cifrado mas seguros admitidos por el servidor y los clientes mediante las variables protocols y ciphers ya que aunque el servidor y el cliente al realizar la conexión eligen el algoritmo más seguro que tienen en común es posible ser víctima de un ataque que intente hacer que se use una versión del protocolo o algoritmo de cifrado inseguro. En la documentación de Firefox se pueden ver las versiones de protocolo y los conjuntos de algoritmos disponibles y recomendados según el grado de compatibilidad hacia atrás que se desee tener con navegadores antiguos. También hay disponible un generador de configuraciones para varios servidores. En la web SSL Labs - SSL Test se puede realizar un test de la seguridad de la configuración del protocolo HTTPS y el certificado.

Si se utiliza algún conjunto que incluya el algoritmo Diffie Hellman (DH) es recomendable configurar el tamaño de la clave temporal en 2048 bits o superior mediante el parámetro de configuración de la máquina virtual Java jdk.tls.ephemeralDHKeySize en el archivo de configuración de Tomcat /etc/default/tomcat10.

JAVA_OPTS="-Djava.awt.headless=true -Djdk.tls.ephemeralDHKeySize=2048"

En determinadas cirunstancias en las que /dev/random no reciba suficiente entropia, como por ejemplo en una máquina virtual, puede ser necesario utilizar /dev/urandom añadiendo el siguiente parámetro a JAVA_OPTS:

-Djava.security.egd=file:/dev/urandom

Una vez modificada la configuración es necesario reiniciar Tomcat con el siguiente comando:

# systemctl restart tomcat10

Despliegue de Archivo WAR

NextTypes se distribuye en un archivo WAR que se puede descargar del directorio de lanzamientos. El archivo WAR es necesario desplegarlo como la aplicación raíz. Esto se puede realizar de diferentes formas. La forma mas simple es sustituir el directorio webapps/ROOT de la aplicación por defecto por el WAR de NextTypes.

# cd /var/lib/tomcat10/webapps
# mv ROOT ROOT.bak
# mv nexttypes-x.x.war ROOT.war

Al seguir estos pasos Tomcat extrae el contenido del WAR en el directorio ROOT y queda como aplicación principal.

Host Virtual

También se puede añadir un host virtual a la configuración de Tomcat en /etc/tomcat10/server.xml.

<Host name="demo.nexttypes.com" appBase="demo.nexttypes.com"
	unpackWARs="true" autoDeploy="false">
</Host>

Para el parámetro appBase se debe crear un directorio y dar permisos sobre él al usuario que ejecuta Tomcat. A continuación debemos renombrar el archivo nexttypes-x.x.war a ROOT.war, copiarlo al directorio del host virtual.

# mkdir -m 770 /var/lib/tomcat10/demo.nexttypes.com
# chgrp tomcat /var/lib/tomcat10/demo.nexttypes.com
# cp nexttypes-x.x.war /var/lib/tomcat10/demo.nexttypes.com/ROOT.war

Por último es necesario configurar el servicio de systemd de Tomcat para permitir la lectura y escritura en el directorio.

# mkdir /etc/systemd/system/tomcat10.service.d/
# vi /etc/systemd/system/tomcat10.service.d/extend.conf

[Service]
ReadWritePaths=/var/lib/tomcat10/demo.nexttypes.com/

Una vez editado se debe recargar la configuración de systemd y reiniciar el servicio.

# systemctl daemon-reload
# systemctl restart tomcat10

También se puede crear manualmente el directorio ROOT y descomprimir el contenido del archivo WAR en su interior.

Configuración NextTypes

Para configurar el sistema podemos crear un directorio de configuración e indicarlo en el archivo WEB-INF/web.xml en la variable settings_directory. Por defecto se utiliza /etc/nexttypes/settings.

De esta forma podemos reemplazar el archivo WAR manteniendo la configuración. También existe la posibilidad de modificar la configuración en el archivo WAR para distribuirlo con la configuración deseada.

Se debe crear el directorio y darle permisos de lectura al usuario tomcat.

# mkdir /etc/nexttypes/settings
# chgrp tomcat /etc/nexttypes/settings

Configuración HTTP y Base de Datos

Antes de iniciar el sistema debemos configurar algunos parámetros del protocolo HTTP y la base de datos. Para ello crearemos los archivos http.properties y postgresql.properties en el directorio /etc/nexttypes/settings. En http.properties se debe configurar el nombre y dominio del sistema mediante la variable host y en postgresql.properties las contraseñas de los usuarios de la base de datos.

host=demo.nexttypes.com
read_password=aaaaaa
write_password=aaaaaa
admin_password=aaaaaa

Configuración Cópias de Seguridad

Para realizar las copias de seguridad incrementales y totales el sistema necesita que creemos un directorio donde almacenar los archivos y demos permisos de escritura al usuario tomcat.

# mkdir -m 770 /var/backups/nexttypes
# chgrp tomcat /var/backups/nexttypes

Además es necesario dar permisos en el servicio de systemd de igual forma que con el directorio del host virtual donde se despliega el archivo WAR.

ReadWritePaths=/var/backups/nexttypes/

Para cambiar la configuración por defecto podemos crear el archivo backup.properties en el directorio de configuración y modificar las variables que deseemos.

Memoria

Si se desea usar campos text o binary grandes o utilizar un sistema de caché es necesario aumentar la memoria máxima que puede utilizar Tomcat. Esto se puede hacer mediante el parámetro -Xmx en el archivo /etc/default/tomcat10 en la variable JAVA_OPTS. El tamaño debe ser de al menos unos 512MB.

JAVA_OPTS="-Djava.awt.headless=true -Djdk.tls.ephemeralDHKeySize=2048 -Xmx1024m"

Seguidamente es necesario fijar el tamaño máximo permitido de la petición HTTP en el archivo de configuración WEB-INF/web.xml.

<max-file-size>52428800</max-file-size>
<max-request-size>52428800</max-request-size>

Configuración de red

Una vez preparado el conector en Tomcat el siguiente paso es configurar en el sistema DNS la resolución del nombre del servidor a su dirección IP. Para realizar pruebas se puede añadir en los clientes una entrada en el archivo /etc/hosts como la siguiente:

192.168.1.36	demo.nexttypes.com demo

Después de configurar la resolución del nombre de dominio se puede acceder al servidor en la dirección HTTP http://demo.nexttypes.com:8080 o en la dirección HTTPS https://demo.nexttypes.com:8443. Después de comprobar que todo funciona podemos modificar la configuración de Tomcat para utilizar los puertos estándar 80 (HTTP) y 443 (HTTPS). En el archivo de configuración de NextTypes http.properties debemos configurar la variable https_port.

https_port=443

Después de finalizar la configuración podemos reiniciar Tomcat.

# systemctl restart tomcat10

Postfix

NextTypes se puede integrar con un MTA como Postfix para recibir y enviar correos. Se puede instalar Postfix con el siguiente comando:

# apt-get install postfix

NextTypes dispone de un servidor SMTP simple con la funcionalidad básica para recibir correo desde un MTA completo como Postfix y convertir los correos en objetos raw_email:

{
  "name" : "raw_email",
  "cdate" : "2015-04-01T14:30:16Z",
  "adate" : "2015-04-01T14:30:16Z",
  "fields" : {
    "mail_from" : {
      "type" : "string",
      "length" : 250,
      "not_null" : true
    },
    "rcpt_to" : {
      "type" : "text",
      "not_null" : true
    },
    "data" : {
      "type" : "text",
      "not_null" : true
    }
  }
}

El servidor se configura con el archivo /etc/nexttypes/settings/smtp.properties, en el que es necesario indicar el nombre de host a mostrar en el mensaje de inicio y el puerto en el que debe recibir conexiones.

host=demo.nexttypes.com
port=2525

En la configuración de Postfix, en el archivo /etc/postfix/main.cf, es necesario configurar un dominio virtual.

virtual_transport = smtp:127.0.0.1:2525
virtual_mailbox_domains = example.com

Una vez configurado se puede reiniciar el servidor con el siguiente comando:

# systemctl restart postfix

Terminada la configuración y reiniciado el servidor se puede crear un controlador para procesar los objetos raw_email según son recibidos. Para enviar correos se puede usar la clase Email que utiliza Jakarta Mail.

ClamAV

El sistema de escaneo de virus de NextTypes utiliza el antivirus ClamAV para escanear los objetos del sistema. Para ello es necesario instalarlo con el siguiente comando:

# apt-get install clamav-daemon

Una vez instalado debemos configurarlo para que escuche en un puerto TCP, por defecto se usa el 3310. Después se debe recargar la configuración y reiniciar el servicio.

# mkdir /etc/systemd/system/clamav-daemon.socket.d/
# vi /etc/systemd/system/clamav-daemon.socket.d/extend.conf

[Socket]
ListenStream=3310
# systemctl daemon-reload
# systemctl restart clamav-daemon

Por último es necesario configurar en el archivo clamav.properties el host y port del servidor ClamAV.

Fecha de Creación:

Fecha de Actualización: