VPN significa "Red privada virtual". Es un concepto genérico que designa una parte de una red más grande (por ejemplo, Internet en general) que está lógicamente aislada de la red más grande a través de medios que no son hardware (eso es lo que significa "virtual"): no es que estemos usando distintos cables e interruptores; más bien, el aislamiento se realiza mediante el uso de la criptografía.
SSL (ahora conocido como TLS) es una tecnología que toma un medio de transporte bidireccional y proporciona un medio bidireccional asegurado . Requiere que el medio de transporte subyacente sea "en su mayoría confiable" (cuando no está atacado, los bytes de datos se transfieren en el orden debido, sin pérdida y sin repetición). SSL proporciona confidencialidad, integridad (las alteraciones activas se detectan de manera confiable) y cierta autenticación (generalmente autenticación del servidor, posiblemente autenticación mutua cliente-servidor si se usan certificados en ambos lados).
Así que VPN y SSL no son del mismo nivel. Una implementación de VPN requiere algo de criptografía en algún momento. Algunas implementaciones de VPN realmente utilizan SSL, lo que da como resultado un sistema de capas: la VPN transfiere paquetes IP (de la red virtual) al serializarlos en una conexión SSL, que a su vez utiliza TCP como medio de transporte, que se construye sobre paquetes IP Red física desprotegida). IPsec es otra tecnología que está más profundamente integrada en los paquetes, que suprime algunas de esas capas y, por lo tanto, es un poco más eficiente (menos sobrecarga de ancho de banda). Por otro lado, IPsec debe administrarse bastante dentro del código de red del sistema operativo, mientras que una VPN basada en SSL solo necesita una forma de secuestrar el tráfico entrante y saliente; el resto puede estar inactivo en el software de nivel de usuario.
Según entiendo su pregunta, tiene una aplicación donde algunas máquinas deben comunicarse a través de Internet. Tiene algunos requisitos de seguridad y está pensando en utilizar SSL (sobre TCP sobre IP) o posiblemente en HTTPS (que es HTTP sobre SSL sobre TCP) o configurar una VPN entre cliente y servidor y usar TCP "simple" en esa red privada (el punto de la VPN es que le proporciona una red segura en la que ya no tiene que preocuparse más por la confidencialidad). Con SSL, su código de conexión debe ser consciente de la seguridad; desde el punto de vista de la programación, no abre una conexión SSL como si fuera "solo un socket". Algunas bibliotecas lo hacen relativamente simple, pero aún así, debe administrar la seguridad en el nivel de la aplicación. Una VPN, por otro lado, está configurada a nivel de sistema operativo, por lo que la seguridad no es entre su aplicación en el cliente y su aplicación en el servidor, sino entre el sistema operativo cliente y el sistema operativo del servidor: no es la misma seguridad modelo, aunque en muchas situaciones la diferencia resulta no ser relevante.
En la práctica, una VPN significa que se necesita algún paso de configuración en el sistema operativo del cliente. Es bastante invasivo. El uso de dos aplicaciones basadas en VPN en el mismo cliente puede ser problemático (desde el punto de vista de la seguridad, ya que el cliente actúa como un puente que une dos VPN que deberían estar aisladas entre sí, y también en la práctica, debido a colisiones en la dirección espacio). Si el cliente es un cliente, hacer que configure una VPN correctamente parece una tarea imposible. Sin embargo , una VPN significa que las aplicaciones no necesitan estar al tanto de la seguridad, por lo que esto hace que sea mucho más fácil integrar el software de terceros dentro de su aplicación.