Requisitos:

  • Tener instalado OpenSSL 1.0
  • Tener instalado la JDK 1.8

Creación de una Autoridad Certificadora:

  1. Genera clave privada de la CA
    openssl genrsa -des3 -out private/ca-private.key 2048
  2. Generar una petición de certificado para la propia CA
    openssl req -new -key private/ca-private.key -out ca.csr -subj "/C=ES/ST=Asturias/L=Siero/O=RuBeNsA/OU=Departamento Seguridad/CN=rubensa.eu.org"
  3. Generar el certificado de la CA firmado por la propia CA
    openssl x509 -signkey private/ca-private.key -req -days 3650 -in ca.csr -out public/ca.crt

Creación de un certificado de servidor:

  1. Crear un almacén de claves con la clave privada del servidor
    keytool -genkeypair -keystore private/server.p12 -storetype PKCS12 -alias server -keyalg RSA -keysize 2048 -dname "CN=rubensa.eu.org,OU=Departamento Seguridad,O=RuBeNsA,L=Siero,S=Asturias,C=ES" -ext san=dns:rubensa.eu.org,dns:localhost,ip:127.0.0.1
  2. Generar una petición de certificado
    keytool -certreq -alias server -keystore private/server.p12 -storetype PKCS12 -file server.csr
  3. Generar un certificado firmado por la CA (si existe previamente el fichero “serial.txt” eliminar -CAcreateserial)
    openssl x509 -req -days 365 -in server.csr -CA public/ca.crt -CAkey private/ca-private.key -CAcreateserial -CAserial serial.txt -out public/server.crt
  4. Importar el certificado de la CA en el almacén de claves del servidor
    keytool -import -alias CA -file public/ca.crt -keystore private/server.p12 -storetype PKCS12
  5. Importar el certificado firmado del servidor en el almacén de claves
    keytool -import -alias server -file public/server.crt -keystore private/server.p12 -storetype PKCS12
  6. Exportar la clave privada del servidor
    openssl pkcs12 -in private/server.p12 -nodes -nocerts -out private/server-private.key
  7. Exportar la clave pública del servidor
    openssl rsa -in private/server-private.key -pubout > public/server-public.key

Creación de un certificado de cliente (con estructura de DNI electrónico):

  1. Generar la clave privada del cliente
    openssl genrsa -des3 -out private/client-private.key 2048
  2. Crear un fichero “dnie.cnf” con el siguiente contenido

    [ req ]
    distinguished_name = req_distinguished_name

    [ req_distinguished_name ]
    countryName = Pais (2 letras)
    countryName_default = ES
    countryName_min = 2
    countryName_max = 2

    commonName = Apellido1 Apellido2, Nombre (AUTENTICACIÓN|FIRMA)
    commonName_max = 64

    givenName = Nombre

    surname = Apellido1

    serialNumber = NNNNNNNNA (número de DNI con letra)
    serialNumber_min = 9
    serialNumber_max = 9

  3. Generar una petición de certificado
    openssl req -config dnie.cnf -new -key private/client-private.key -out client.csr
  4. Generar un certificado firmado por la CA (si no existe previamente el fichero “serial.txt” añadir -CAcreateserial)
    openssl x509 -req -days 365 -in client.csr -CA public/ca.crt -CAkey private/ca-private.key -CAserial serial.txt -out public/client.crt
  5. Generar un fichero pkcs12 para importar el certificado en el navegador
    openssl pkcs12 -export -clcerts -in public/client.crt -inkey private/client-private.key -out private/client.p12 -name "client"

Creación de un truststore (un almacén de claves en el que ir guardar los certificados en los que el servidor “confía”):

  1. Crear un keystore
  2. Importar el certificado del CA (de tal modo que cualquier certificado de cliente firmado por la CA sea válido)
    keytool -importcert -alias CA -file public/ca.crt -keystore private/truststore.p12 -storetype PKCS12 -keyalg RSA -keysize 2048

Nota: Para poder consultar los certificados existentes en un keystore podemos utilizar el siguiente comando
keytool -v -list -keystore private/server.p12 -storetype PKCS12

Algunos enlaces de interés
Receta para la creación de certificados de prueba desde cero
Steps to generate self-signed PKCS#12 SSL certificate and export its keys

Anuncios


Aprender JavaScript moderno es como si desde el principio no hubieses estado ahí. El ecosistema está creciendo y cambiando tan rápidamente que es difícil comprender los problemas que las diferentes herramientas están tratando de resolver.

El objetivo de este artículo es proporcionar un contexto histórico de cómo han evolucionado las herramientas JavaScript hasta lo que son hoy, en 2017. Empezaremos desde el principio, construyendo un sitio web de ejemplo como lo hacían los dinosaurios – sin herramientas, solamente HTML plano y JavaScript. Posteriormente iremos introduciendo diferentes herramientas, una a una, de manera incremental para ver los problemas que resuelven. Con este contexto histórico, podrás adaptarte mejor al siempre cambiante ecosistema JavaScript. ¡Empecemos!

Lee el resto de esta entrada »

spring-by-pivotal
Hay muchos conceptos básicos en el Framework Spring que pueden resultar confusos. Uno de ellos es la configuración basada en Java. A continuación encontrarás una descripción condensada de cómo declarar beans usando la configuración en Java.

Ten en cuenta que esta entrada no cubre las dependencias entre beans de diferentes ámbitos ni cubre anotaciones como @Component, @Service, @Repository, etc., que a menudo son una buena alternativa a lo aquí descrito.

Lee el resto de esta entrada »

eclipse_logo
A raíz de la última actualización de Ubuntu (pasando de 17.04 GNOME a 17.10) he tenido problemas (“Unhandled event loop exception” al intentar cambiar de perspectiva utilizando la botonera) al ejecutar alguna versión de Eclipse (concretamente la 4.6.3, con la 4.7.l no he tenido problemas).

El problema parece estar relacionado con libwebkit y GTK3.

Para solucionarlo (forzando el uso de GTK2) he tenido que modificar el eclipse.ini para incluir:

--launcher.GTK_version
2

de tal modo que ahora queda algo así:

-startup
plugins/org.eclipse.equinox.launcher_1.3.201.v20161025-1711.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.401.v20161122-1740
--launcher.GTK_version
2
-product
org.eclipse.epp.package.jee.product
--launcher.defaultAction
openFile
-showsplash
org.eclipse.platform
--launcher.defaultAction
openFile
--launcher.appendVmargs
-configuration
/home/rubensa/development/eclipse/4.6.3/configuration
-data
/home/rubensa/development/eclipse/4.6.3/workspace
-vm
/home/rubensa/software/jdk1.8/bin/java
-vmargs
-Dosgi.requiredJavaVersion=1.8
-XX:+UseG1GC
-XX:+UseStringDeduplication
-Dosgi.requiredJavaVersion=1.8
-Xms256m
-Xmx1024m
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=/home/rubensa/development/eclipse/4.6.3/dropins

angular

NgModule es la estructura básica con la que te encuentras al codificar una aplicación con Angular, pero también es la más sutil y compleja, debido a sus diferentes ámbitos. La documentación de Angular tiene incluso una completa FAQ acerca de NgModules, pero sigue siendo una locura entenderlos.

Lee el resto de esta entrada »

angular
Los módulos de Angular representan un concepto central y juegan un papel fundamental en la estructuración de las aplicaciones Angular.

Un Módulo Angular agrupa un conjunto de artefactos Angular, como son componentes, directivas, pipes y servicios que forman parte de ese mismo módulo. Dicho esto, representa una agrupación lógica en lo que podríamos llamar área funcional de nuestra aplicación (ej. módulo de contactos, módulo de administración,…). Es más, un Módulo Angular también define las dependencias con otros módulos, esto es, que otros módulos necesita importar y a su vez qué componentes, directivas o pipes exporta.

@NgModule({
imports: [ BrowserModule, HttpModule, FormsModule ],
declarations: [ PersonComponent, ContactComponent, ContactListComponent ],
providers: [ PersonService, ContactService ],
exports: [ ContactListComponent, ContactComponent ]
})
export class ContactModule {}

Lee el resto de esta entrada »

El desarrollo moderno de JavaScript puede ser abrumador.

Al trabajar en un proyecto, te puedes preguntar si toda la maquinaria e instrumentación moderna es necesaria.

¿Qué hacen herramientas como Webpack y SystemJS? O ¿qué significa AMD, UMD o CommonJS?  ¿Qué relación tienen entre ellas? y ¿porqué, siquiera, las necesitas?

En esta entrada aprenderemos las diferencias entre módulos JavaScript, formatos de módulo, cargadores de módulo y empaquetadores de módulos.

No se trata de una guía en profundidad de ninguna de las herramientas o patrones individuales, sino de una aproximación que permita entender rápidamente los conceptos del JavaScript moderno.

Lee el resto de esta entrada »

A %d blogueros les gusta esto: