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).
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.
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:
- required: Solo permite la conexión si el cliente dispone de un certificado válido.
- optional: Solicita al cliente un certificado válido pero permite la comunicación aunque no lo tenga.
- none: No solicita certificado.
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.