Mostrando entradas con la etiqueta Aplicaciones. Mostrar todas las entradas
Mostrando entradas con la etiqueta Aplicaciones. Mostrar todas las entradas

Agregando certificados a Java

 

Cuando comenzamos a preocuparnos de la seguridad en nuestros desarrollos, sin duda alguna, una de las primeras cosas con las que nos tropezaremos serán las conexiones seguras, y los certificados que necesitamos para las mismas.

Comencemos desde el principio: 


¿Qué es HTTP?

HTTP (por las siglas de Hypertext Transfer Protocol) es un protocolo de comunicación que permite transmitir mensajes y documentos.  Fue pensado para la comunicación entre servidores web y navegadores web, pero puede ser usado también para otros propósitos.  En otras palabras, es la forma estándar en la que tu navegador se comunica con otras máquinas cada vez que buscas algo (como este artículo!).


¿Qué es HTTPS?

HTTPS (por las siglas de HTTP Secure) es el hermano responsable de HTTP.  Mientras que HTTP solo se encarga de definir la forma en la que el mensaje se envía desde el origen y se recibe en el destino, HTTPS se encarga además de garantizar que en dicha comunicación participen solamente dichos origen y destino, evitando que la comunicación sea interceptada y las identidades suplantadas.

Básicamente, este protocolo permite que el mensaje sea encriptado usando SSL (Secure Sockets Layer), su hijo más actualizado TLS (Transport Layer Security), o el protocolo de encriptación que sea el apropiado.  De esta forma, solamente los participantes adecuados, el origen y el destino, pueden participar en una conversación dada.


¿Qué es un Certificado?

Un certificado no es otra cosa, ni más ni menos, que un documento que prueba que uno de los participantes de una conversación es quien dice ser.  Podemos tener certificados tanto suministrados por el servidor para el cliente, como por el cliente para el servidor, pero lo más común siempre es el primer caso.

Para compartirles un ejemplo resumido, si yo tengo un servidor que publica cierta información, y quiero que uno de ustedes tenga acceso seguro (usando HTTPS/TLS), sería mi responsabilidad compartirles mi certificado (normalmente un archivo .cer), y responsabilidad de ustedes instalarlo para que su navegador pueda usarlo.  De esa forma, cuando mi servidor les mandara información, ustedes podrían saber si en efecto la estoy enviando yo.

Normalmente, para empresas "públicas" (Google, Amazon, y casi cualquier otro site que consigas en Internet) a las que accedemos usando nuestros navegadores, el intercambio de certificados es bastante transparente para nosotros como usuarios: existen entidades responsables de validar los certificados (las CAs o Certificate Authorities), de tal forma que nuestro navegador tenga contra qué comparar que ese certificado de Google que le está llegando es realmente de Google.  Sin embargo, para las comunicaciones "privadas" que normalmente manejamos como desarrolladores, esa responsabilidad recae en nosotros.

Noten que un certificado puede tener fecha de caducidad, según lo que decida su dueño, por lo que puede ser necesario reimportarlo de cuando en cuando.


¿Qué es un Java KeyStore?

Un Java KeyStore (JKS, o simplemente KeyStore) es un repositorio de certificados, sean públicos o privados, y de cualquier clave privada que sea necesaria para su uso.  Básicamente, es el lugar donde debemos, como desarrolladores, importar el certificado de la otra máquina con la que queremos ser capaces de comunicarnos vía comunicación segura.

Si nuestro programa o herramienta usa la comunicación TLS o similar, debemos añadir un certificado al almacén de claves JKS en cada una de las máquinas (servidores, estaciones de trabajo, etc) con las que queramos comunicarnos.  Así de sencillo.


Y al fin, ¿cómo importo un certificado .cer a mi KeyStore Java?

Pues simplemente usaremos el comando keytool de Java para importar el certificado al almacén de claves.  Podemos ejecutarlo vía línea de comandos, o vía algún programa o interfaz con la que contemos.  Si usamos la línea de comandos, tendríamos algo como esto:

keytool -importcert -file <certificate.cer> -keystore <keystore.jks>

Donde:

  • <certificate.cer> es la ubicación y nombre del certificado que nos ha compartido el servidor.
  • <keystore.jks> es la ubicación y nombre del KeyStore dentro de la instalación Java del servidor o cliente que estamos usando.

Además de estos parámetros podemos usar muchos otros (para asignarle una clave a un KeyStore y que no cualquiera pueda revisarlo, por ejemplo, o asignarle un alias a un certificado importado).  Pueden ver el detalle del comando aquí.

Noten que el mismo comando puede ser usado no solo para la importación de un certificado (que es lo que hemos cubierto en este artículo), sino para todo lo que tenga que ver con un KeyStore, incluyendo su creación! No teman en pasear por la documentación.


Como siempre, ¡Quedo a la orden ante cualquier duda!

-- Gorka Siverio


IDEA 10.5 - Pre-encuentro


Me acabo de bajar IDEA 10.5 para probarlo. Aún no lo instalo, pero compartiré con ustedes algunas cosas de las que supuestamente tiene...
  • Soporte Java 7
  • Más rápido (ya esto solo vale la pena!)
  • Más chévere
  • Mayor soporte para Groovy, Spring, Android, Ruby, Python, Scala, PHP...
  • Mayor integración con SVN (incluso aplica parches él mismo)
Hasta ahora, vamos bien, verdad? Pues se pone mejor.
  • Auto-Completación sin pisar ninguna tecla extra (si lo de antes era magia, esto ya serán milagros!).
  • Refactor más fáciles de usar
  • Debugger de JavaScript
  • Cliente de comparación (adios a Beyond Compare y similares)
  • Arreglaron el bendito search, que era una de las cosas que más apestaban de IDEA.
Y el colmo? Ahora trae un BugTracker, YouTrack (bueno, te lo puedes bajar), con lo que podemos botar hasta nuestras ticketeras. De aquí a poco, podremos botar a nuestros jefes gracias a algún plug-in! :D

Apenas lo instale y pruebe, les echaré los cuentos...


Akamai NetSession Interface



Soy de los usuarios a los que le molesta que la computadora tome decisiones por mí sin consultármelo. Me molesta tener programas corriendo en background, revisando cosas y calculando cálculos de los que no tengo idea que existen, mientras se comen los recursos de mi máquina, que estoy tratando de usar para ejecutar procesos que sí me interesan.

En particular los updaters o downloaders me generan algo de malestar. Entiendo que un programa trate de actualizarse al momento de iniciar, para ver si hay nuevas versiones que nos interesen. Pero cuando dicho programa deja un demonio corriendo en background, todo el tiempo, aún cuando llevas más de un mes sin usarlo, es cuando me molesto.

Uno de esos casos es el Akamai NetSession Interface.

Akamai es una suite de soluciones enfocadas al mejor uso de la red. Permite desde monitoreo de la red, hasta conexiones p2p, pasando por managers de las descargas de tu máquina. Como dije arriba, no dudo que dichos programas sean muy útiles, pero me gustarían más si me preguntaran cuándo conectarse, si me avisaran que se están instalando, si me avisaran que puedo configurarlos.

En particular el Akamai NetSession Interface es una aplicación que clama mejorar enormemente la calidad y la velocidad de las descargas desde sitios que soporten tecnología Akamai. Se encarga de manejar el caching, la seguridad, y es fácilmente removible.

En mi idioma, eso significa lo siguiente: es un programa que se instala sin avisarte (ya me dirás cómo remueves fácilmente algo que no sabes que existe), y que se encarga tanto de ocupar espacio en tu máquina (no borra los archivos que guarda en el cache, por lo que tuve un instalador que medía dos gygas viviendo en mi disco por meses) como de ocupar tus recursos (el servicio inicia y trata de conectarse sin avisarte, siempre que inicies sesión, para compartir los archivos que te has descargado). Me enteré de la existencia de esto por casualidad, gracias a un mensaje de confirmación de conexión debido a un proxy.

Para evitar que este molesto inquilino siguiera usando mis implementos sin mi permiso, tenía varias opciones, aunque es difícil conseguir documentación al respecto. Opté por no desinstalarlo, pues al parecer Adobe trabaja con este programa, por lo que no me servía eliminarlo y que se volviera a instalar, silencioso cual ninja, la siguiente vez que descargara un programa que lo usara. La solución era amarrarlo para mantenerlo bajo control.

1.- Vayan a Inicio -> Configuración -> Panel de Control -> Panel de Control de la Interfaz NetSession de Akamai.

2.- En el primer tab (General), seleccionen el radio button "Deshabilitar" en la opción Permitir Cargas. Eso hará que los demás usuarios con Akamai no se puedan descargar archivos desde tu máquina.

3.- En el segundo tab (Avanzado), revisen la sección de Memoria Caché de Descarga. Ahí pueden ver el espacio que están ocupando los archivos descargados, así como seguir el link para revisarlos, o eliminarlos.

4.- En el segundo tab (Avanzado), presionen el botón "Detener", si es que lo ven. Eso detendrá el servicio, aunque no evitará que vuelva a iniciarse al prender la máquina de nuevo.

5.- Por último, para evitar que el zombie regrese de la muerte cuando reiniciemos la máquina, ejecutemos services.msc (para los no iniciados, vayan a Inicio -> Ejecutar, tipeen services.msc y presionen Aceptar). Ahí busquen el servicio Akamai NetSession Interface, y configúrenlo para que el Tipo de Inicio sea Manual (no lo deshabiliten, para que los programas que lo necesiten puedan usarlo, pero solo bajo demanda).

Eso debería bastar para evitar que Akamai, el ninja fujitivo, robe los recursos de tu máquina sin que te enteres... Bienvenido cualquier comentario o corrección al respecto!