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

Я пытаюсь использовать stunnel, чтобы заставить старый клиент usenet поддерживать SSL. Я попробовал следующий конфиг:

[myservice]
accept = <LOCAL_PORT>
connect = <REMOTE_HOST>:<REMOTE_PORT>

но stunnel продолжал работать с ошибкой:

Section myservice: SSL server needs a certificate

Что я делаю неправильно?

1 ответ

Решение

Задавать client = yes в [myservice] раздел. Это говорит о том, что 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")
Другие вопросы по тегам