Ich versuche zu verwendenTunnelum einen älteren Usenet-Client dazu zu bringen, SSL zu unterstützen. Ich habe die folgende Konfiguration ausprobiert:
[myservice]
accept = <LOCAL_PORT>
connect = <REMOTE_HOST>:<REMOTE_PORT>
aber stunnel schlug immer wieder mit dem folgenden Fehler fehl:
Section myservice: SSL server needs a certificate
Was mache ich falsch?
Antwort1
client = yes
Im [myservice]
Abschnitt festlegen . Dies teilt stunnel mit, dass die connect
(auch als „Server“ bezeichnete) Seite SSL-basiert ist und die accept
(auch als „Client“ bezeichnete) Seite normal ist. Die Standardeinstellung ist das Gegenteil, was ein SSL-Zertifikat erfordert.
Aber das ist noch nicht alles! Aus irgendeinem verrückten Grund ist stunnel standardmäßig in einem völlig unsicheren Modus, in dem die Zertifikate des Servers nicht überprüft werden, was bedeutet, dass Sie Man-in-the-Middle-Angriffen (MitM) ausgesetzt wären! Um dies zu beheben, verwenden Sie die Optionen verify = 2
und CAfile
. Unter Ubuntu CAfile
finden Sie sie unter /etc/ssl/certs/ca-certificates.crt
(aus dem ca-certificates
Paket). Wenn Sie schon dabei sind, options = NO_SSLv2
deaktivieren Sie auch das unsichere SSLv2-Protokoll.
Deaktivieren Sie abschließend SSL, wenn Sie Ihr Usenet-Programm konfigurieren, da die Verbindung zwischen der Anwendung und Stunnel KEIN SSL verwendet.
Ich habe das folgende Wrapper-Skript geschrieben, um dabei zu helfen. Ersetzen Sie <LOCAL_PORT>
, <REMOTE_HOST>
, und <REMOTE_PORT>
nach Bedarf und # ...
durch den Befehl, den Sie ausführen möchten.
#!/bin/bash
PIDFILE=/tmp/stunnel-agent.pid
# Start stunnel in the background.
cat << EOF | stunnel4 -fd 0
pid = $PIDFILE
# Enable proper SSL security. Without this, you are completely insecure!
verify = 2
CAfile = /etc/ssl/certs/ca-certificates.crt
options = NO_SSLv2
[myservice]
client = yes
accept = <LOCAL_PORT>
connect = <REMOTE_HOST>:<REMOTE_PORT>
EOF
# Start whatever program you want.
# ...
# Kill stunnel.
kill $(cat "$PIDFILE")