Я пытаюсь использовать станнель чтобы старый клиент usenet поддерживал SSL. Я пробовал такую конфигурацию:
[myservice]
accept = <LOCAL_PORT>
connect = <REMOTE_HOST>:<REMOTE_PORT>
но stunnel продолжал давать ошибку:
Section myservice: SSL server needs a certificate
Что я делаю не так?
Устанавливать client = yes
в [myservice]
раздел. Это говорит stunnel, что connect
(также известная как «сервер») - это SSL, а accept
(она же «клиентская») сторона проста. По умолчанию все наоборот, требуется сертификат SSL.
Но это не все! По какой-то безумной причине stunnel по умолчанию работает в полностью небезопасном режиме, который не проверяет сертификаты сервера, а это означает, что вы будете подвержены атакам типа «человек посередине» (MitM)! Чтобы исправить это, используйте verify = 2
и CAfile
параметры. В Ubuntu CAfile
можно найти на /etc/ssl/certs/ca-certificates.crt
(из ca-certificates
пакет). Пока вы это делаете, также установите options = NO_SSLv2
чтобы отключить небезопасный протокол SSLv2.
Наконец, при настройке программы usenet отключите SSL, так как соединение между приложением и stunnel НЕ использует SSL.
Чтобы помочь в этом, я написал следующий сценарий-оболочку. Заменить <LOCAL_PORT>
, <REMOTE_HOST>
, и <REMOTE_PORT>
при необходимости и замените # ...
с любой командой, которую вы хотите запустить.
#!/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")