Cifre cualquier tráfico de aplicaciones cliente-servidor en Windows con Stunnel

EltúnelLa herramienta se puede utilizar como un servicio proxy para crear un túnel TLS seguro para aplicaciones de red cliente-servidor que no admiten el cifrado. En algunos casos, es preferible utilizar esta herramienta para proteger el acceso remoto a una única aplicación (servicio) en lugar de implementar una solución VPN con todas las funciones.

EltúnelEl servicio se puede ejecutar en modo servidor o cliente. En modo cliente, Stunnel recibe tráfico de la aplicación cliente, lo cifra y luego lo envía al servidor. El tráfico se descifra en elDel lado del servidor Stunnely luego enviado a la aplicación o servicio de destino. Lo importante es que el administradorNo es necesario modificar ni la parte del cliente ni la del servidor de la aplicación..Certificadosse puede utilizar para la autenticación del cliente. Stunnel es compatible tanto con Windows como con Linux.

Veamos cómo utilizar stunnel para crear un acceso seguro entre el cliente y el servidor. En este ejemplo, el servidor es un host de Windows con un servidor web IIS que ejecuta un sitio HTTP sin cifrar. La tarea es restringir el acceso a este sitio web de clientes con autenticación de certificado y habilitar el cifrado del tráfico.

Configurar el servidor Stunnel en Windows

Descargue el instalador de Stunnel para Windows desdehttps://www.stunnel.org/downloads.htmle instálelo con la configuración predeterminada, incluidaopenssl.

El siguiente paso es generar claves y certificados para la CA, el servidor y los clientes. Abra un símbolo del sistema y navegue hasta el directorio:

cd "c:Program Files (x86)stunnelbin"

Generar clave CA:

openssl genpkey -algorithm RSA -out ca.key

En este caso, no utilizamos una frase de contraseña para proteger la clave privada del certificado.

Cree un certificado de CA:

openssl req -new -x509 -key ca.key -out ca.crt -subj "/O=woshubLTD/OU=IT/CN=CA_webserver1.com"

Agregue información sobre el certificado en elsujetocampo para una fácil identificación.

Cree una clave privada para el servidor:

openssl genpkey -algorithm RSA -out server.key

Cree una solicitud de firma de certificado (CSR):

openssl req -key server.key -new -out server.csr

Utilice la CA raíz para firmar el certificado del servidor.

openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -subj "/O=woshubLTD/OU=IT/CN=server_webserver1.com"

Ahora, cree una clave privada para el cliente:

openssl genpkey -algorithm RSA -out client.key

Genere una solicitud de certificado de cliente:

openssl req -key client.key -new -out client.csr

Firma el certificado de cliente:

openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -subj "/O=woshubLTD/OU=IT/CN=client1_webserver1.com"

En el servidor web, copie elca.crt, servidor.crt, yservidor.clavearchivos alC:Program Files (x86)stunnelconfigcarpeta.

Edite el archivo stunnel.conf (puede borrar la configuración predeterminada) y agregue la siguiente configuración:

; Write logs to stunnel.log
debug = info
output = stunnel.log
; Strong encryption settings. We assume that both devices have modern CPUs that support AES hardware acceleration. If such encryption settings cause server performance degradation under heavy traffic, you can simplify them.
options = CIPHER_SERVER_PREFERENCE
options = NO_SSLv2
options = NO_SSLv3
options = NO_TLSv1
sslVersion = TLSv1.2
sslVersion = TLSv1.3
ciphers = ECDHE-RSA-AES256-GCM-SHA384
; names (paths) to certificate files
cert = server.crt
key = server.key
CAfile = ca.crt
; This section contains the configuration of the service that the client will access via Stunnel.
[ITPoral]
; This is the IP address and port on which the Stunnel instance should listen for connections.
accept = 192.168.158.144:443
; or accept = 443
; The IP address and port of the service to which the connection should be redirected. In our case, this is a local HTTP site.
connect = 127.0.0.1:80
; or connect = 80
; Always check the remote computer's client certificate. Clients without a certificate will not be able to connect to the service.
verify=2

Asegúrese de que elaceptarLa línea contiene un número de puerto que no está siendo utilizado por otro proceso de Windows.

Abra el puerto especificado en el Firewall de Windows Defender para permitir conexiones entrantes. Puede crear una regla de firewall con PowerShell.

New-NetFirewallRule -DisplayName "ITPoral_stunnel_443" -Direction Inbound -LocalPort 443 -Protocol TCP -Action Allow

Bloquee las conexiones externas al puerto TCP inseguro 80 a nivel de enrutador o firewall.

CorrerStunnel.exey verifique los registros de la GUI para asegurarse de que su configuración no contenga errores. La interfaz gráfica permite volver a leer rápidamente el archivo de configuración y ver inmediatamente los registros de errores, lo que facilita la depuración.

1

Cierre la GUI de stunnel.exe haciendo clic en Terminar en el menú, luego inicie stunnel como un servicio de Windows. Ejecute el comando:

"C:Program Files (x86)stunnelbinstunnel.exe" -install "C:Program Files (x86)stunnelconfigstunnel.conf"

ElEnvoltorio TLS StunnelSe creará el servicio. Empiece:

Start-Service wrapper

El proceso stunnel escucha en el puerto 443 una vez iniciado.

Ejemplo de configuración del cliente Stunnel en Windows

Luego, instale stunnel de la misma distribución en eldispositivo cliente Windows. Luego copia elCalifornia. crt,cliente.crt, ycliente.clavearchivos del servidor alC:Program Files (x86)stunnelconfigcarpeta.

Agregue lo siguiente al archivo de configuración stunnel.conf:

[ITPoral]
; Run Stunnel in the client mode.
client = yes
; Specify the IP address and TCP port through which your service will be accessible to your clients.
accept = localhost:8080
; the address of the stunnel server to redirect connections to
connect = 192.168.158.144:443
; certificate paths
CAfile = ca.crt
cert = client.crt
key = client.key
; Certificates must be checked explicitly when establishing a connection.
verify=2

Guarde el archivo de configuración. Primero, ejecute Stunnel manualmente y verifique los registros en busca de errores. Ahora, cuando accedes a la direcciónlocalhost:8080Desde el navegador, Stunnel redirigirá la conexión al servidor remoto.

Para mayor comodidad, puede combinar certificados y claves en un solo archivo. Por ejemplo:

Get-Content client.key, client.crt | Set-Content client.pem

En este caso, especifique únicamente lo siguiente en el archivo de configuración de stunnel:

cert = client1.pem

Si todo funciona correctamente, puede ejecutar stunnel en un cliente como servicio.

stunnel.exe -install

Para revocar certificados (por ejemplo, los comprometidos), agregue elrutaCRLopción para la configuración del servidor stunnel. Especifique la ruta a la carpeta donde se almacenan los certificados revocados (Listas de revocación de certificados) en formato PEM.

También puedes utilizar elrutaCAopción para especificar la ubicación de la carpeta que contiene los certificados permitidos.

Leer más:Solución: Windows no pudo conectarse al servicio de cliente de directiva de grupo

Related Posts