Назад | Перейти на главную страницу

Настройте stunnel для обертывания SSL для одного приложения

Я пытаюсь использовать станнель чтобы старый клиент 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")