Du siehst aber schon, daß das jetzt ein anderer Fehler ist?
Was sagt Dir denn "das Internet", wenn Du mit der dazugehörenden Fehlermeldung (wie Du an deren Text kommst, habe ich oben gezeigt) nach Leidensgenossen suchst?
Ich würde ja immer noch gerne die INHALTE von Dateien sehen wollen (private Schlüssel MÜSSEN nicht sein, sind aber - wenn man sie mit einem Kennwort versehen hat - i.d.R. auch nicht problematisch), denn es bleibt unklar, warum hier überhaupt ein eigener Schlüssel benutzt werden sollte, dessen Länge offensichtlich nicht ausreicht.
Wobei das eigentlich auch nur eine Einstellung in der benutzten SSL-Library sein kann - aber auch das ist nur geraten, denn es fehlen praktisch ALLE Angaben zu den verwendeten Programmen, das geht beim Modell der FRITZ!Box los, zieht sich über die Freetz(-NG?)-Version bis zur verwendeten Konfigurationsdatei für den Freetz-Build (wo man sich das NOTFALLS noch selbst ansehen könnte, auch wenn sich eigentlich das "Vorzeigen" dieser Angaben durch den Fragesteller von selbst verstehen sollte) und auch
stunnel
kann ein entsprechendes Protokoll erstellen. In der Konfigurationsdatei kann man dann auch noch festlegen, ob das ins Syslog oder in eine Datei geschrieben werden soll.
Stunnel does need a pem file, regardless whether or not the data is used.
Das steht da tatsächlich, ist aber ein Widerspruch zu hier:
https://www.stunnel.org/static/stunnel.html
cert = CERT_FILE
certificate chain file name
The parameter specifies the file containing certificates used by stunnel to authenticate itself against the remote client or server. The file should contain the whole certificate chain starting from the actual server/client certificate, and ending with the self-signed root CA certificate. The file must be either in PEM or P12 format.
A certificate chain is required in server mode, and optional in client mode.
This parameter is also used as the certificate identifier when a hardware engine is enabled.
Die weiter oben noch "gezeigten" Parameter
cert
,
key
und
CAfile
haben (im Moment jedenfalls, wo erst mal das Prinzip funktionieren soll und erst später das LE-Zertifikat von
pvoutput.org
geprüft werden soll) KEINEN Platz in der entsprechenden Service-Konfiguration, wo
stunnel
nur als Client aktiv werden soll.
Mit dieser Datei (das ist das "Standard-File", was eigentlich vom
stunnel
installiert werden sollte) klappt das jedenfalls ... auch ohne die Angabe irgendeines eigenen Schlüssels und/oder Zertifikats:
Rich (BBCode):
peh@vidar:~> sudo cat /etc/stunnel/stunnel.conf
[sudo] password for root:
# Sample stunnel configuration file for Unix by Michal Trojnara 1998-2022
# Some options used here may be inadequate for your particular configuration
# This sample file does *not* represent stunnel.conf defaults
# Please consult the manual for detailed description of available options
# **************************************************************************
# * Global options *
# **************************************************************************
# It is recommended to drop root privileges if stunnel is started by root
setuid = stunnel
setgid = nogroup
# PID file is created inside the chroot jail (if enabled)
#pid = /var/run/stunnel.pid
# Debugging stuff (may be useful for troubleshooting)
#foreground = yes
#debug = info
debug = 7
output = /var/log/stunnel.log
# Enable FIPS 140-2 mode if needed for compliance
#fips = yes
# The pkcs11 engine allows for authentication with cryptographic
# keys isolated in a hardware or software token
# MODULE_PATH specifies the path to the pkcs11 module shared library,
# e.g. softhsm2.dll or opensc-pkcs11.so
# Each section using this feature also needs the "engineId = pkcs11" option
#engine = pkcs11
#engineCtrl = MODULE_PATH:/usr/lib/softhsm/libsofthsm2.so
#engineCtrl = PIN:1234
# **************************************************************************
# * Service defaults may also be specified in individual service sections *
# **************************************************************************
# Enable support for the insecure SSLv3 protocol
#options = -NO_SSLv3
# These options provide additional security at some performance degradation
#options = SINGLE_ECDH_USE
#options = SINGLE_DH_USE
# **************************************************************************
# * Include all configuration file fragments from the specified folder *
# **************************************************************************
include = /etc/stunnel/conf.d
# **************************************************************************
# * Service definitions (remove all services for inetd mode) *
# **************************************************************************
# ***************************************** Example TLS client mode services
[pvoutput.org]
client = yes
accept = 8088
connect = pvoutput.org:443
verifyChain = no
# The following examples use /etc/ssl/certs, which is the common location
# of a hashed directory containing trusted CA certificates. This is not
# a hardcoded path of the stunnel package, as it is not related to the
# stunnel configuration in /etc/stunnel/.
#[gmail-pop3]
#client = yes
#accept = 127.0.0.1:110
#connect = pop.gmail.com:995
#verifyChain = yes
#CApath = /etc/ssl/certs
#checkHost = pop.gmail.com
#OCSPaia = yes
#[gmail-imap]
#client = yes
#accept = 127.0.0.1:143
#connect = imap.gmail.com:993
#verifyChain = yes
#CApath = /etc/ssl/certs
#checkHost = imap.gmail.com
#OCSPaia = yes
#[gmail-smtp]
#client = yes
#accept = 127.0.0.1:25
#connect = smtp.gmail.com:465
#verifyChain = yes
#CApath = /etc/ssl/certs
#checkHost = smtp.gmail.com
#OCSPaia = yes
# Encrypted HTTP proxy authenticated with a client certificate
# located in a cryptographic token
#[example-pkcs11]
#client = yes
#accept = 127.0.0.1:8080
#connect = example.com:8443
#engineId = pkcs11
#cert = pkcs11:token=MyToken;object=MyCert
#key = pkcs11:token=MyToken;object=MyKey
# ***************************************** Example TLS server mode services
#[pop3s]
#accept = 995
#connect = 110
#cert = /etc/stunnel/stunnel.pem
#[imaps]
#accept = 993
#connect = 143
#cert = /etc/stunnel/stunnel.pem
# Either only expose this service to trusted networks, or require
# authentication when relaying emails originated from loopback.
# Otherwise the following configuration creates an open relay.
#[ssmtp]
#accept = 465
#connect = 25
#cert = /etc/stunnel/stunnel.pem
# TLS front-end to a web server
#[https]
#accept = 443
#connect = 80
#cert = /etc/stunnel/stunnel.pem
# "TIMEOUTclose = 0" is a workaround for a design flaw in Microsoft SChannel
# Microsoft implementations do not use TLS close-notify alert and thus they
# are vulnerable to truncation attacks
#TIMEOUTclose = 0
# Remote shell protected with PSK-authenticated TLS
# Create "/etc/stunnel/secrets.txt" containing IDENTITY:KEY pairs
#[shell]
#accept = 1337
#exec = /bin/sh
#execArgs = sh -i
#PSKsecrets = /etc/stunnel/secrets.txt
# Non-standard MySQL-over-TLS encapsulation connecting the Unix socket
#[mysql]
#cert = /etc/stunnel/stunnel.pem
#accept = 3307
#connect = /run/mysqld/mysqld.sock
# vim:ft=dosini
peh@vidar:~>
Wenn da bei Dir irgendwie versucht wird, einen Key bzw. ein Zertifikat zu finden, zu öffnen und zu verwenden (darauf deutet die Fehlermeldung hin), dann kann das eigentlich nur daran liegen, daß da noch IRGENDWO ein Parameter gesetzt ist, der zum Zugriffsversuch auf diese Datei animiert. EDIT: Die Einstellungen für
setuid
und
setgid
solltest Du erst einmal AUCH NICHT verwenden (bringt im FRITZ!OS ohnehin fast nichts an zusätzlicher Sicherheit, weil praktisch alle Prozesse als
root
laufen).
Zeig doch mal die VOLLSTÄNDIGE Konfigurationsdatei ...
Ich kann jedenfalls auch im "ausführlichen Protokoll" (mit der o.a. Konfiguration, nur noch das
foreground = yes
"einkommentiert") keinen Zugriff auf irgendeine Datei erkennen (die bräuchte es eben nur für den "server mode" bei
client = no
):
Rich (BBCode):
vidar:/tmp # strace -o stunnel.strace -ff stunnel /etc/stunnel/stunnel.conf
2022.04.27 14:14:20 LOG6[ui]: Initializing inetd mode configuration
2022.04.27 14:14:20 LOG7[ui]: Clients allowed=500
2022.04.27 14:14:20 LOG5[ui]: stunnel 5.63 on x86_64-suse-linux-gnu platform
2022.04.27 14:14:20 LOG5[ui]: Compiled/running with OpenSSL 1.1.1n 15 Mar 2022
2022.04.27 14:14:20 LOG5[ui]: Threading:PTHREAD Sockets:POLL,IPv6 TLS:ENGINE,OCSP,PSK,SNI Auth:LIBWRAP
2022.04.27 14:14:20 LOG7[ui]: errno: (*__errno_location ())
2022.04.27 14:14:20 LOG6[ui]: Initializing inetd mode configuration
2022.04.27 14:14:20 LOG5[ui]: Reading configuration from file /etc/stunnel/stunnel.conf
2022.04.27 14:14:20 LOG5[ui]: UTF-8 byte order mark detected
2022.04.27 14:14:20 LOG7[ui]: "/etc/stunnel/conf.d/." is not a file
2022.04.27 14:14:20 LOG7[ui]: "/etc/stunnel/conf.d/.." is not a file
2022.04.27 14:14:20 LOG5[ui]: FIPS mode disabled
2022.04.27 14:14:20 LOG6[ui]: Compression enabled: 0 methods
2022.04.27 14:14:20 LOG7[ui]: No PRNG seeding was required
2022.04.27 14:14:20 LOG6[ui]: Initializing service [pvoutput.org]
2022.04.27 14:14:20 LOG6[ui]: OpenSSL security level is used: 2
2022.04.27 14:14:20 LOG7[ui]: Ciphers: HIGH:!aNULL:!SSLv2:!DH:!kDHEPSK
2022.04.27 14:14:20 LOG7[ui]: TLSv1.3 ciphersuites: TLS_AES_256_GCM_SHA384:TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256
2022.04.27 14:14:20 LOG7[ui]: TLS options: 0x2100004 (+0x0, -0x0)
2022.04.27 14:14:20 LOG6[ui]: Session resumption enabled
2022.04.27 14:14:20 LOG7[ui]: No certificate or private key specified
2022.04.27 14:14:20 LOG4[ui]: Service [pvoutput.org] needs authentication to prevent MITM attacks
2022.04.27 14:14:20 LOG6[ui]: DH initialization skipped: client section
2022.04.27 14:14:20 LOG7[ui]: ECDH initialization
2022.04.27 14:14:20 LOG7[ui]: ECDH initialized with curves X25519:P-256:X448:P-521:P-384
2022.04.27 14:14:20 LOG5[ui]: Configuration successful
2022.04.27 14:14:20 LOG7[ui]: Deallocating deployed section defaults
2022.04.27 14:14:20 LOG7[ui]: Binding service [pvoutput.org]
2022.04.27 14:14:20 LOG7[ui]: Listening file descriptor created (FD=9)
2022.04.27 14:14:20 LOG7[ui]: Setting accept socket options (FD=9)
2022.04.27 14:14:20 LOG7[ui]: Option SO_REUSEADDR set on accept socket
2022.04.27 14:14:20 LOG6[ui]: Service [pvoutput.org] (FD=9) bound to 0.0.0.0:8088
2022.04.27 14:14:20 LOG7[ui]: Listening file descriptor created (FD=10)
2022.04.27 14:14:20 LOG7[ui]: Setting accept socket options (FD=10)
2022.04.27 14:14:20 LOG7[ui]: Option SO_REUSEADDR set on accept socket
2022.04.27 14:14:20 LOG5[ui]: Binding service [pvoutput.org] to :::8088: Address already in use (98)
2022.04.27 14:14:20 LOG7[ui]: No pid file being created
2022.04.27 14:14:20 LOG7[cron]: Cron thread initialized
2022.04.27 14:14:20 LOG6[cron]: Executing cron jobs
2022.04.27 14:14:20 LOG6[cron]: Cron jobs completed in 0 seconds
2022.04.27 14:14:20 LOG7[cron]: Waiting 86400 seconds
2022.04.27 14:14:24 LOG7[ui]: Found 1 ready file descriptor(s)
2022.04.27 14:14:24 LOG7[ui]: FD=4 events=0x2001 revents=0x0
2022.04.27 14:14:24 LOG7[ui]: FD=9 events=0x2001 revents=0x1
2022.04.27 14:14:24 LOG7[ui]: Service [pvoutput.org] accepted (FD=3) from 127.0.0.1:46888
2022.04.27 14:14:24 LOG7[0]: Service [pvoutput.org] started
2022.04.27 14:14:24 LOG7[0]: Setting local socket options (FD=3)
2022.04.27 14:14:24 LOG7[0]: Option TCP_NODELAY set on local socket
2022.04.27 14:14:24 LOG5[0]: Service [pvoutput.org] accepted connection from 127.0.0.1:46888
2022.04.27 14:14:24 LOG6[0]: s_connect: connecting 45.56.66.169:443
2022.04.27 14:14:24 LOG7[0]: s_connect: s_poll_wait 45.56.66.169:443: waiting 10 seconds
2022.04.27 14:14:24 LOG7[0]: FD=6 events=0x2001 revents=0x0
2022.04.27 14:14:24 LOG7[0]: FD=11 events=0x2005 revents=0x0
2022.04.27 14:14:24 LOG5[0]: s_connect: connected 45.56.66.169:443
2022.04.27 14:14:24 LOG5[0]: Service [pvoutput.org] connected remote server from 192.168.131.2:37582
2022.04.27 14:14:24 LOG7[0]: Setting remote socket options (FD=11)
2022.04.27 14:14:24 LOG7[0]: Option TCP_NODELAY set on remote socket
2022.04.27 14:14:24 LOG7[0]: Remote descriptor (FD=11) initialized
2022.04.27 14:14:24 LOG6[0]: SNI: sending servername: pvoutput.org
2022.04.27 14:14:24 LOG6[0]: Peer certificate not required
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): before SSL initialization
2022.04.27 14:14:24 LOG7[0]: Initializing application specific data for session authenticated
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS write client hello
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS write client hello
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS read server hello
2022.04.27 14:14:24 LOG6[0]: Certificate verification disabled
2022.04.27 14:14:24 LOG6[0]: Certificate verification disabled
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS read server certificate
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS read server key exchange
2022.04.27 14:14:24 LOG6[0]: Client certificate not requested
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS read server done
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS write client key exchange
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS write change cipher spec
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS write finished
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS write finished
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS read server session ticket
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS read change cipher spec
2022.04.27 14:14:24 LOG7[0]: TLS state (connect): SSLv3/TLS read finished
2022.04.27 14:14:24 LOG7[0]: New session callback
2022.04.27 14:14:24 LOG7[0]: Peer certificate was cached (3684 bytes)
2022.04.27 14:14:24 LOG6[0]: Session id: 986AB872E3F0F186764707FF75850C9EB955048246868191039FB58D9A9B0287
2022.04.27 14:14:24 LOG7[0]: 1 client connect(s) requested
2022.04.27 14:14:24 LOG7[0]: 1 client connect(s) succeeded
2022.04.27 14:14:24 LOG7[0]: 0 client renegotiation(s) requested
2022.04.27 14:14:24 LOG7[0]: 0 session reuse(s)
2022.04.27 14:14:24 LOG6[0]: TLS connected: new session negotiated
2022.04.27 14:14:24 LOG6[0]: TLSv1.2 ciphersuite: ECDHE-RSA-AES256-GCM-SHA384 (256-bit encryption)
2022.04.27 14:14:24 LOG6[0]: Peer temporary key: ECDH, P-256, 256 bits
2022.04.27 14:14:24 LOG7[0]: Compression: null, expansion: null
2022.04.27 14:14:24 LOG6[0]: Read socket closed (readsocket)
2022.04.27 14:14:24 LOG7[0]: Sending close_notify alert
2022.04.27 14:14:24 LOG7[0]: TLS alert (write): warning: close notify
2022.04.27 14:14:24 LOG6[0]: SSL_shutdown successfully sent close_notify alert
2022.04.27 14:14:24 LOG7[0]: TLS alert (read): warning: close notify
2022.04.27 14:14:24 LOG6[0]: TLS closed (SSL_read)
2022.04.27 14:14:24 LOG7[0]: Sent socket write shutdown
2022.04.27 14:14:24 LOG5[0]: Connection closed: 129 byte(s) sent to TLS, 4043 byte(s) sent to socket
2022.04.27 14:14:24 LOG7[0]: Remote descriptor (FD=11) closed
2022.04.27 14:14:24 LOG7[0]: Local descriptor (FD=3) closed
2022.04.27 14:14:24 LOG7[0]: Service [pvoutput.org] finished (0 left)
^C2022.04.27 14:14:33 LOG7[ui]: Found 1 ready file descriptor(s)
2022.04.27 14:14:33 LOG7[ui]: FD=4 events=0x2001 revents=0x1
2022.04.27 14:14:33 LOG7[ui]: FD=9 events=0x2001 revents=0x0
2022.04.27 14:14:33 LOG7[ui]: Dispatching a signal from the signal pipe
2022.04.27 14:14:33 LOG3[ui]: Received SIGINT; terminating
2022.04.27 14:14:33 LOG7[ui]: Leak detection table utilization: 15/997, 1.50%
2022.04.27 14:14:33 LOG7[ui]: No pid file to remove
2022.04.27 14:14:33 LOG7[ui]: Terminating the cron thread
2022.04.27 14:14:33 LOG6[ui]: Terminating 1 service thread(s)
2022.04.27 14:14:33 LOG6[ui]: Service threads terminated
2022.04.27 14:14:33 LOG7[ui]: Unbinding service [pvoutput.org]
2022.04.27 14:14:33 LOG7[ui]: Service [pvoutput.org] closed (FD=9)
2022.04.27 14:14:33 LOG7[ui]: Service [pvoutput.org] closed
vidar:/tmp #
(bei der grünen Zeile startete ein stinknormales
wget -O - http://localhost:8088
, das dann zu
pvoutput.org
verbunden wurde) und auch im
strace
ist nichts zu sehen, daß da irgendein Key geöffnet würde:
Rich (BBCode):
vidar:/tmp # grep open stunnel.strace.279*
stunnel.strace.27928:openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
stunnel.strace.27928:openat(AT_FDCWD, "/lib64/libssl.so.1.1", O_RDONLY|O_CLOEXEC) = 3
stunnel.strace.27928:openat(AT_FDCWD, "/lib64/libcrypto.so.1.1", O_RDONLY|O_CLOEXEC) = 3
stunnel.strace.27928:openat(AT_FDCWD, "/lib64/libwrap.so.0", O_RDONLY|O_CLOEXEC) = 3
stunnel.strace.27928:openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
stunnel.strace.27928:openat(AT_FDCWD, "/lib64/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
stunnel.strace.27928:openat(AT_FDCWD, "/lib64/.libcrypto.so.1.1.hmac", O_RDONLY) = -1 ENOENT (No such file or directory)
stunnel.strace.27928:openat(AT_FDCWD, "/proc/sys/crypto/fips_enabled", O_RDONLY) = 3
stunnel.strace.27928:openat(AT_FDCWD, "/dev/null", O_RDWR) = 3
stunnel.strace.27928:openat(AT_FDCWD, "/etc/ssl/openssl.cnf", O_RDONLY) = 4
stunnel.strace.27928:openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 4
stunnel.strace.27928:openat(AT_FDCWD, "/etc/stunnel/stunnel.conf", O_RDONLY|O_NONBLOCK|O_CLOEXEC) = 8
stunnel.strace.27928:openat(AT_FDCWD, "/etc/stunnel/conf.d", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 9
stunnel.strace.27928:openat(AT_FDCWD, "/etc/gai.conf", O_RDONLY|O_CLOEXEC) = 8
stunnel.strace.27928:openat(AT_FDCWD, "/etc/crypto-policies/back-ends/openssl.config", O_RDONLY) = 8
stunnel.strace.27928:openat(AT_FDCWD, "/var/log/stunnel.log", O_WRONLY|O_CREAT|O_APPEND|O_NONBLOCK|O_CLOEXEC, 0640) = 10
stunnel.strace.27929:openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 4
stunnel.strace.27929:openat(AT_FDCWD, "/lib64/libgcc_s.so.1", O_RDONLY|O_CLOEXEC) = 4
vidar:/tmp #
Es GIBT also (mit passender Konfiguration) KEINEN Zugriff auf einen privaten Schlüssel oder ein Zertifikat, solange man wirklich nur einen "client"-Service so konfiguriert hat, wie das oben zu sehen ist. Daher MUSS es da noch irgendeinen anderen Parameter geben - ggf. wird der ja vom Freetz-Interface automatisch gesetzt. Denn der eigentliche Zweck dieses Pakets war es ja einmal (dahin zielt auch die Beschreibung bzw. das Beispiel in der Freetz-Dokumentation), als TLS-
Server für das Freetz-GUI zu dienen und dafür braucht es dann tatsächlich ein eigenes Zertifikat (das auch "self-signed" sein kann).
Ich habe eigentlich die denkbar trivialste Anwendung und bekomme es nicht hin. Schade.
Nicht aufgeben ... vielleicht funkt ja tatsächlich nur das Freetz-GUI dazwischen. Ich würde aber, bevor ich mich da "in die Tiefe stürze", gerne erst einmal sicher sein, daß es nicht doch nur an einem Konfigurationsfehler auf Deiner Seite liegt.
Es ist schon einige Jahre her, daß ich mich zuletzt mit dem
stunnel
-Paket in Freetz befaßt habe (
https://www.ip-phone-forum.de/threads/fritz-box-zertifikat-auf-der-box-für-andere-software-mit-tls-verschlüsselung-benutzen.279420/#post-2096745) und auch dabei ging es eigentlich ums Patches des Programms und nicht um die Konfigurationsmöglichkeiten in der Freetz-Oberfläche:
https://github.com/Freetz/freetz/pull/16/commits/6a1978de3922915f3d11afac8a9a2acf77f7108d
Ohne mir das ganz genau anzusehen, weiß ich aber nicht (auch weil ich selbst gar kein Freetz oder Freetz-NG nutze auf einer Box), ob da tatsächlich IMMER ein Server-Dienst konfiguriert wird oder ob man auch eine "custom config" hinterlegen kann, bei der die Konfiguration NICHT beim Start aus Einstellungen im GUI konfiguriert wird. Wobei auch ein ständig aktiver Server-Dienst ja noch KEIN K.O.-Kriterium sein muß, WENN Du den Key denn korrekt erstellst (was wieder zum Beginn dieses Beitrags führt).