¿Cómo asegurar un servicio web para aplicaciones web utilizando la misma base de datos?

1

Tengo 2 o más aplicaciones web que necesitan poder comunicarse entre sí mediante una interfaz de servicio web.

Información

  • Todas las aplicaciones utilizan TLS / SSL (https)
  • Todas las aplicaciones tienen acceso a la misma base de datos y solo se puede acceder a esa base de datos

Mi problema es que no quiero que nadie más pueda usar el servicio web. Lo que significa que solo las aplicaciones deben poder llamar al servicio web para obtener información o ejecutar una acción en otra aplicación.

¿Hay alguna forma "simple" de hacerlo?

Pensé que, dado que solo las aplicaciones tienen acceso a la base de datos, probablemente podría utilizarla como un tercero de confianza para validar la identidad del que llama al servicio web.

EDIT

Hubo cierta confusión con la configuración actual, por lo que aquí hay información adicional

  • Las aplicaciones y el servicio web son lo mismo. Cada aplicación define una interfaz de servicio web para permitir que las otras aplicaciones se comuniquen con ella
  • Las aplicaciones y la base de datos están todas alojadas en el mismo servidor y es un servidor dedicado que solo hospeda esas aplicaciones y esa base de datos, y es ejecutado por "yo"
  • Todas las aplicaciones son seguras y requieren autenticación para ser utilizadas
  • Necesito usar un servicio web en lugar de usar la base de datos para comunicarme entre las aplicaciones porque cada aplicación usa un idioma diferente y la lógica de negocios está en el código de la aplicación. Este código de lógica de negocios debe llamarse cuando las aplicaciones se comunican entre sí.
pregunta Gudradain 28.08.2014 - 20:59
fuente

2 respuestas

3
  

Mi problema es que no quiero que nadie más pueda usar la web   Servicio. Lo que significa que solo las aplicaciones deben poder llamar al   Servicio web para obtener información o ejecutar una acción en otro.   aplicación.

     

¿Hay alguna forma "simple" de hacerlo?

Hay varias maneras. Usted dice que usa HTTPS; para que pueda agregar un esquema de autenticación simple (secreto compartido) con una seguridad muy razonable. Supongo que las aplicaciones en sí están protegidas.

También puede emplear certificados de cliente para la conversación SSL (es decir, el canal SSL también proporciona certificación de identidad). Dependiendo de su configuración, podría ser más fácil de implementar que agregar autenticación al servicio web.

Posiblemente, puede utilizar un proxy de autenticación. Esto requiere una configuración más incómoda, ya que en la práctica usas el proxy para ejecutar un ataque de hombre en el medio contra tu propia conexión SSL. O puede usar algún tipo de front-end para servicios web desarrollado para ese propósito, que haría esencialmente lo mismo (identificándose a sí mismo como el servicio web real, y luego pasando la conexión al servicio web real después de eliminar la información de autenticación adicional).

En todos los casos, puede reducir la superficie de ataque negando rutinariamente el acceso a los servicios en el nivel de IP, a menos que las solicitudes provengan de un entorno de instalaciones de aplicaciones conocidas.

Una especialización de este enfoque sería establecer una VPN completa entre las aplicaciones y el servicio web. Esto tendría la ventaja de que ni las aplicaciones ni el servicio web requerirían una modificación sustancial, pero tendrían un costo de rendimiento (está ejecutando una conexión cifrada dentro de otra).

  

Pensé que ya que solo las aplicaciones tienen acceso a la   Base de datos, probablemente podría utilizarlo como un tercero de confianza para validar   la identidad del que llama al servicio web.

Puede, pero en ese momento sus aplicaciones ya están ya comunicándose con el sistema que ejecuta el servicio web a través de la base de datos. Cualquiera que sea el canal que esté utilizando para la base de datos, puede usar ese mismo canal / método, o debe sospechar que es inseguro.

Por ejemplo, las aplicaciones (o el servicio) ahora están accediendo a un servidor de base de datos externo . ¿Puede cualquier persona acceder a ese servidor? Si es así, podría tener algunos problemas allí mismo. Si no, ¿cuál es más probable, entonces por qué? (Y supongo que la respuesta es "conexión cifrada SSL, autenticación de contraseña / certificado y / o verificación de IP, o VPN completa").

Actualizar

En su configuración, las aplicaciones y los servicios web que exponen están en la misma máquina (esto no es tan común, por lo que no había pensado en la posibilidad). Esto permite "seguridad trivial", es decir, puede exponer la (s) interfaz (s) del servicio web en "localhost". Incluso puede usarlos en el claro, eliminando SSL por completo, ya que las comunicaciones de localhost no se filtrarán fuera de la máquina. Y para interceptarlos, uno necesitaría un nivel de acceso suficiente al servidor para que el punto sea discutible de todos modos.

Si lo desea, o si alguna vez lo necesita, puede también exponer un servicio web (¿diferente?) en la interfaz externa, y ejecutar ese punto final con autenticación y seguridad SSL (posiblemente también con verificación de certificado de cliente).

Como están las cosas, me parece que ya estás seguro . Simplemente verifique que la configuración predeterminada de las aplicaciones / marcos / servidores no incluya la vinculación a la interfaz a cualquier (muy a menudo es la predeterminada), porque eso potencialmente permitiría el acceso desde el exterior.

    
respondido por el LSerni 28.08.2014 - 23:46
fuente
0

Si estuviera usando WCF, podría usar la autenticación para permitir que solo usuarios específicos ejecuten métodos específicos. Yo uso esto en un entorno de intranet. No estoy al 100%, pero este podría ser un buen punto de partida para usar WCF o encontrar un método equivalente en cualquier tecnología que esté utilizando para llamar a los métodos.

    
respondido por el user1438082 28.08.2014 - 23:16
fuente

Lea otras preguntas en las etiquetas