|
Certificados de Seguridad en MIDP 2.0 |
|
Una de las características que hacen de MIDP una buena plataforma para dispositivos móviles es la seguridad que ofrece. La seguridad se ve incrementada en MIDP 2.0 y podemos considerar que las siguientes fuentes de dicha seguridad son:
Con la implementación de protocolos de conexión seguros cada vez son más la aplicaciones que deben ser descargadas desde un servidor para ser ejecutadas en nuestro terminal. Cobra, por tanto, una gran importancia el hecho de poder asegurar que el código descargado sea exactamente el que queremos y que no presente un comportamiento malicioso. El código descargado será especialmente peligroso cuando desconocemos su autor, su fin o su procedencia. Como ya se dijo anteriormente, Java ofrece un alto grado de seguridad en este aspecto a través de su máquina virtual, ya que el código descargado no se ejecutará directamente sobre el sistema operativo sino sobre dicha máquina virtual. Sin embargo, partiendo de la base de que nunca conseguiremos un sistema cien por cien seguro, la máquina virtual de Java no será suficiente y se deben implementar nuevos mecanismos de seguridad. Es en este punto dónde MIDP 2.0 supone un considerable avance respecto a su predecesor. Como ya se ha dicho nos permite definir distintos dominios protección, cada uno de ellos con un nivel de seguridad determinado. MIDP 2.0 define muy vagamente cómo deben ser definidos estos dominios pero sí sugiere que estén basados en firmas criptográficas y certificados de seguridad. MIDP 2.0 define a través del MIDP X.509 Certificate Profile (perfil de certificados X.509 de MIDP) cómo debe ser el formato y la utilización de los certificados. Las aplicaciones DEBEN soportar los certificados X.509 (son los más extendidos y se denominan así porque se definen en la recomendación X.509 de CCITT) y el algoritmo de cifrado RSA utilizando SHA-1. Además, PUEDEN soportar (o no) cualquier otro tipo de certificados (dependerá de la implementación). |
|||
|
A la hora de establecer una conexión segura, por ejemplo para descargar una aplicación en nuestro terminal móvil, debemos estar seguros de la identidad del otro participante en la conexión o del autor o propietario que nos ofrece la aplicación. La solución adoptada es la de utilizar certificados de seguridad y consiste básicamente en autenticar mutuamente a ambos extremos de la comunicación a través de una autoridad de certificación en la que confían ambos. Así pues, la Autoridad de certificación actúa como un tercero de confianza en la comunicación entre clientes, cliente y servidor, etc. El escenario en el que nos encontramos es el siguiente:
El proceso de autenticación es el siguiente: cuando se va a establecer la conexión segura, por ejemplo, cuando A va a descargar en el terminal una aplicación desde el servidor B, solicitará que le sea enviado el certificado de seguridad. Una vez recibido, el usuario A comprobará cuál es la autoridad de certificación que expidió el certificado (en nuestro caso es AC) y si es una autoridad de certificación reconocida se lo reenviará. Si AC reconoce el certificado como el propio de B estará en condiciones de autenticarle frente a A y, dado que éste confía en la autoridad de certificación, aceptará el establecimiento de la conexión. Por último comentar que los certificados contienen información adicional importante en la autenticación de usuarios (como por ejemplo marcas de tiempo o "timestamps" con las que hacer que los certificados tengan un tiempo de validez finito). Algunos de estos datos se verán con más detalle al tratar el interfaz Certificate. |
|||
|
El interfaz Certificate abstrae una serie de datos contenidos en los certificados como son: el tema, el emisor, el tipo, la versión, el número de serie, el algoritmo de firmado digital, fechas de validez y número de serie. Ya se ha explicado que los certificados de seguridad se intercambian a la hora de establecer una conexión segura. Si volvemos a la página de este tutorial referente al paquete javax.microedition.io veremos que cualquier conexión segura (HTTPS o SSL) tiene asociado un objeto SecurityInfo. Es en este objeto donde podemos encontrar el certificado recibido y en función del cuál se pudo establecer correctamente la conexión segura: HttpsConnection conexionSegura = (HttpsConnection)Connector.open("........"); SecurityInfo si = conexionSegura.getSecurityInfo(); Certificate c = si.getServerCertificate(); Los distintos métodos que ofrece este interfaz están encaminados a poder acceder a los distintos datos que ofrece el certificado:
|
|||
|
API MIDP/CLDC | |||
|