Настройте Stunnel для создания SSL-обертки для одного приложения

Настройте Stunnel для создания SSL-обертки для одного приложения

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

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

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

Section myservice: SSL server needs a certificate

Что я делаю не так?

решение1

Устанавливается 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")

Связанный контент