Versleutel al het client-server-app-verkeer op Windows met Stunnel

DeStunneltool kan worden gebruikt als proxyservice om een ​​veilige TLS-tunnel te creëren voor client-server-netwerkapps die zelf geen codering ondersteunen. In sommige gevallen verdient het de voorkeur om deze tool te gebruiken om de toegang op afstand tot een enkele app (dienst) te beveiligen in plaats van een volledige VPN-oplossing te implementeren.

DeStunnelservice kan worden uitgevoerd in server- of clientmodus. In de clientmodus ontvangt Stunnel verkeer van de client-app, codeert het en stuurt het vervolgens naar de server. Verkeer wordt gedecodeerd op deStunnel serverzijdeen vervolgens verzonden naar de doel-app of -service. Het belangrijkste is dat de beheerderhoeft het client- of servergedeelte van de app niet te wijzigen.Certificatenkan worden gebruikt voor clientauthenticatie. Stunnel wordt ondersteund voor zowel Windows als Linux.

Laten we eens kijken hoe we stunnel kunnen gebruiken om veilige toegang tussen de client en de server te creëren. In dit voorbeeld is de server een Windows-host met een IIS-webserver waarop een niet-gecodeerde HTTP-site draait. De taak is om de toegang tot deze website te beperken voor clients met certificaatauthenticatie en om verkeersversleuteling in te schakelen.

Stunnel Server configureren op Windows

Download het Stunnel-installatieprogramma voor Windows vanhttps://www.stunnel.org/downloads.htmlen installeer het met de standaardinstellingen, inclusiefopenssl.

De volgende stap is het genereren van sleutels en certificaten voor de CA, server en clients. Open een opdrachtprompt en navigeer naar de map:

cd "c:Program Files (x86)stunnelbin"

CA-sleutel genereren:

openssl genpkey -algorithm RSA -out ca.key

In dit geval gebruiken we geen wachtwoordzin om de privésleutel van het certificaat te beschermen.

Maak een CA-certificaat:

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

Voeg informatie over het certificaat toe in hetonderwveld voor gemakkelijke identificatie.

Maak een privésleutel voor de server:

openssl genpkey -algorithm RSA -out server.key

Maak een certificaatondertekeningsverzoek (CSR):

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

Gebruik de root-CA om het servercertificaat te ondertekenen.

Aanbevolen lees:Netwerkmonitor: netwerkverkeer op Windows vastleggen en analyseren

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"

Maak nu een privésleutel voor de client:

openssl genpkey -algorithm RSA -out client.key

Genereer een aanvraag voor een clientcertificaat:

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

Onderteken het clientcertificaat:

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"

Kopieer op de webserver hetca.crt, server.crt, Enserver.sleutelbestanden naar deC:Program Files (x86)stunnelconfigmap.

Bewerk het bestand stunnel.conf (u kunt de standaardinstellingen wissen) en voeg de volgende configuratie toe:

; 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

Zorg ervoor dat deaccepterenregel bevat een poortnummer dat niet door een ander Windows-proces wordt gebruikt.

Open de opgegeven poort in Windows Defender Firewall om inkomende verbindingen toe te staan. U kunt een firewallregel maken met PowerShell.

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

Blokkeer externe verbindingen met de onveilige TCP-poort 80 op router- of firewallniveau.

LoopStunnel.exeen controleer de GUI-logboeken om er zeker van te zijn dat uw configuratie geen fouten bevat. Dankzij de grafische interface kan het configuratiebestand snel opnieuw worden gelezen en kunnen de foutlogboeken onmiddellijk worden bekeken, wat het debuggen eenvoudiger maakt.

1

Sluit de GUI van stunnel.exe door op Beëindigen in het menu te klikken en start stunnel vervolgens als een Windows-service. Voer de opdracht uit:

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

DeStunnel TLS-wikkelaardienst zal worden gecreëerd. Begin ermee:

Start-Service wrapper

Het stunnel-proces luistert op poort 443 zodra het is gestart.

Stunnel Client-configuratievoorbeeld op Windows

Installeer vervolgens stunnel vanuit dezelfde distributie op declient Windows-apparaat. Kopieer vervolgens deca. krt,klant.crt, Enklant.sleutelbestanden van de server naar deC:Program Files (x86)stunnelconfigmap.

Voeg het volgende toe aan het configuratiebestand 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

Sla het configuratiebestand op. Voer Stunnel eerst handmatig uit en controleer de logboeken op fouten. Wanneer u nu toegang krijgt tot het adreslocalhost:8080vanuit de browser zal Stunnel de verbinding omleiden naar de externe server.

Voor uw gemak kunt u certificaten en sleutels combineren in één bestand. Bijvoorbeeld:

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

Geef in dit geval alleen het volgende op in het stunnel-configuratiebestand:

cert = client1.pem

Als alles naar behoren werkt, kunt u stunnel als service op een client uitvoeren.

stunnel.exe -install

Om certificaten (bijvoorbeeld gecompromitteerde certificaten) in te trekken, voegt u deCRLpadoptie voor de stunnel-serverconfiguratie. Geef het pad op naar de map waar de ingetrokken certificaten (Certificate Revocation Lists) in PEM-indeling zijn opgeslagen.

Je kunt ook gebruik maken van deCApadoptie om de locatie op te geven van de map die de toegestane certificaten bevat.

Related Posts