sql >> Base de Datos >  >> RDS >> Database

Una introducción a la API de seguridad de Java

La seguridad es una de las partes más importantes del desarrollo de aplicaciones. El lenguaje Java facilita el desarrollo de aplicaciones seguras al proporcionar muchas opciones y características que hacen que las aplicaciones sean seguras. Debido a que es un gran tema, este artículo abordará algunos aspectos clave de las funciones de seguridad y las API disponibles en la plataforma Java.

Resumen

La plataforma Java, desde cero, está construida teniendo en cuenta la seguridad. La propiedad type safe del lenguaje y la recolección automática de elementos no utilizados indican que la arquitectura Java trató de incorporar funciones de seguridad directamente desde su núcleo.

En los últimos años, la seguridad ha sido un foco importante. Por ejemplo, los navegadores modernos están trabajando para restringir o reducir la compatibilidad con complementos como Java, Silverlight y Flash, ya que se pueden utilizar de forma indebida para incorporar código dañino en un complemento de apariencia inofensiva. Aunque el entorno de Java está limpio, la naturaleza del subprograma es que descarga código no confiable de la red pública. Esto puede ser una brecha de seguridad importante. Además, el mundo de los navegadores ha cambiado significativamente en los últimos años. La necesidad absoluta de Applet se ha vuelto casi obsoleta. Quizás esto y principalmente la creciente preocupación por la seguridad hicieron que Applet quedara obsoleto en Java 9.

Marco de seguridad de Java

Los servicios de Java Security se han ampliado e incluyen un gran conjunto de interfaces de programación de aplicaciones (API), herramientas, una serie de implementaciones de algoritmos de seguridad, mecanismos y protocolos. Esto proporciona un entorno integral para desarrollar aplicaciones seguras y administrarlas en consecuencia.

El alcance de la API de seguridad de Java es extenso. La base para desarrollar una aplicación segura radica en las interfaces criptográficas y de infraestructura de clave pública (PKI), la implementación algorítmica común interoperable múltiple y otros servicios de seguridad. Hay interfaces para realizar la autenticación y el control de acceso. Esto permite que las aplicaciones se protejan contra el acceso no autorizado a los recursos protegidos.

Seguridad del idioma

Para empezar, el lenguaje en sí está construido con la preocupación de imbuir seguridad en su núcleo. El ejemplo más sencillo es quizás la incorporación del tipo de seguridad. Escriba seguro significa que los programas tienen acceso restringido a la memoria en tiempo de ejecución. Esto se logra asociando memoria solo a objetos Java. Los objetos tienen una clase correspondiente que define su comportamiento; esto asegura que el programa pueda actuar sobre él solo de acuerdo con el comportamiento definido. Esta idea resuena con la verificación dinámica de tipos, pero Java también incorpora una verificación compleja de tipos estáticos siempre que sea posible para sucumbir a la limitación de su contraparte dinámica. Por ejemplo, el verificador de código de bytes es un verificador de tipo estático efectivo que se emplea en el momento de la compilación para detectar cualquier tipo de error e informar de manera proactiva al desarrollador. El verificador de código de bytes garantiza que se ejecute un código de bytes legítimo conforme a la especificación del lenguaje Java. Además de esto, también verifica la violación de la memoria, los desbordamientos / desbordamientos de la pila, los encasillamientos adecuados, etc. Además de esto, hay modificadores como privado, protegido y público para afirmar el acceso restringido.

Proveedores de seguridad

Los servicios actúan como un proveedor de seguridad. Cuando se conectan a la plataforma Java a través de interfaces estándar, facilitan que la aplicación obtenga servicios de seguridad. La ventaja de este mecanismo es que el desarrollador no tiene que conocer los detalles intrincados y, en cambio, puede concentrarse en integrar las funciones de seguridad en la aplicación. Esta idea está encapsulada dentro de la clase abstracta llamada java.security.Provider . El servicio de seguridad se obtiene a través de getInstance() método proporcionado por el Proveedor . Puede haber muchos proveedores configurados donde cada uno tiene un nombre y un número de versión configurado en cada tiempo de ejecución en el que está instalado. Por ejemplo, un programa puede obtener un algoritmo de resumen de mensaje particular solicitando opcionalmente un proveedor específico por su nombre de la siguiente manera:

MessageDigest messageDigest = MessageDigest.getInstance("MD5",
   "MyProvider1");

Criptografía

Las API criptográficas de Java se distribuyen en dos paquetes:java.security y javax.crypto . Java proporciona una gran variedad de servicios criptográficos mediante la implementación de una serie de algoritmos criptográficos. Algunos de ellos son los siguientes:

  • java.security.MessageDigest: Esta clase proporciona la implementación de una función hash unidireccional que toma datos de tamaño arbitrario y genera un valor hash de longitud fija. El algoritmo se llama SHA-1 o SHA-256.
  • java.security.Firma: Esta clase se utiliza para proporcionar la funcionalidad de un algoritmo de firma digital, como los algoritmos DSA, RSA o DSA, mediante el algoritmo de resumen de mensajes SHA-256. Una firma digital se utiliza especialmente para garantizar la integridad y autenticidad de los datos digitales.
  • java.security.SecureRandom: Esta clase proporciona funcionalidad para generar un número aleatorio criptográficamente fuerte.

Infraestructura de clave pública (PKI)

La infraestructura PKI permite el intercambio seguro de datos mediante criptografía de clave pública. Abarca claves, certificados, cifrado de clave pública y certificados digitales. Las clases relacionadas con PKI se almacenan en java.security y java.security.cert paquetes.

Autenticación

Autenticación es el proceso de verificación de la identidad del usuario. Java permite que la aplicación realice la autenticación de usuario con la ayuda del módulo conectable. Hay una clase llamada LoginContext en javax.security.auth.login paquete. Esta clase se instancia con un nombre y un CallbackHandler. El Contexto de inicio de sesión utiliza el nombre como índice de la configuración. La configuración determina el LoginModule específico (javax.security.auth.spi.LoginModule ). El controlador de devolución de llamada se pasa al LoginModule para solicitar el nombre de usuario y la contraseña, en una GUI, por ejemplo.

Comunicación segura

La plataforma Java implementa los protocolos SSL y TLS que brindan funcionalidad para la integridad de los mensajes, el cifrado de datos y la autenticación de clientes y servidores. Esto se puede usar para pavimentar un paso seguro de comunicación de datos entre pares sobre el protocolo HTTP o TCP/IP. El soporte de API para la implementación se puede encontrar en javax.net.ssl paquete. Hay muchas clases de apoyo; por ejemplo, el SSLSocket La clase es una extensión de java.net.Socket class para proporcionar un socket seguro utilizando el protocolo SSL/TLS. Esto no es más que un socket de transmisión normal con una capa adicional de protección sobre el protocolo de capa de transporte (TCP).

Control de acceso

La clase de control de acceso protege el acceso a recursos confidenciales, como archivos locales. El java.lang.SecurityManager la clase media en todos los accesos. Esta clase permite que la aplicación implemente una política de seguridad. Por lo tanto, una posible operación insegura puede verse restringida en el intento, por lo que la aplicación tiene control total sobre las operaciones permitidas.

Conclusión

Este es un recorrido rápido por las características de seguridad, la funcionalidad y las API de la plataforma Java. Java proporciona un soporte integral para implementar la seguridad en una aplicación donde los desarrolladores pueden estar felizmente inconscientes de las complejidades involucradas en su implementación y, sin embargo, cosechar sus beneficios. Esto aprovecha la entrega rápida y eficiente del producto sin tener que construir todo desde cero.

Referencias

  • Documentación de la API de Java
  • Descripción general de la seguridad de Java