나는 사용하려고충격을 주다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
옵션을 사용하세요. 우분투에서는 (패키지에서 ) CAfile
에서 찾을 수 있습니다 . 그 동안 안전하지 않은 SSLv2 프로토콜도 비활성화하도록 설정하세요./etc/ssl/certs/ca-certificates.crt
ca-certificates
options = NO_SSLv2
마지막으로, 유즈넷 프로그램을 구성할 때 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")