如何配置 stunnel 来接受 SSL 连接,然后连接到不同服务器上的 SSL 端口?
这是我的设置:
我们的 ISP 服务器“邮件服务器”支持通过 SSL 进行 smtp/imap。(不是 starttls。只是通过 ssl。)
但是,我有一堆客户端计算机只信任特定的内部根证书。因此,它们可以不是连接到“邮件服务器”。
对于这些客户端机器,我想创建一个专用的“邮件隧道”主机,该主机使用 stunnel 来监听内部签名的 SSL 证书,然后使用第二个 SSL 连接将数据转发到“邮件服务器”。
这能做到吗?
Ubuntu Server 10.10 的具体步骤是什么?(我不太熟悉持久服务配置。)
谢谢
答案1
我不太熟悉 10.10 的具体细节,但我认为它与 Debian 非常接近。
您可以做的一件事是设置单独的 stunnel 配置。一个接受 SSL,并将其转发到本地端口,另一个监听该本地端口,然后与外部主机建立 SSL 连接。这两个只能绑定到环回接口,这样未加密的数据就不会穿过网络。请记住,您基本上是在对自己进行 MITM 攻击。我在帮助诊断某人正在开发的 Web 服务的一些问题时使用了这样的设置。
Debian/Ubuntu 中的 stunnel 打包版本应该可以轻松实现这一点。启动脚本基本上会为 /etc/stunnel4 中找到的每个配置文件 (*.conf) 启动一个 stunnel 实例。因此,您可以将两个单独的配置放入 /etc/stunnel4 中,生成密钥,重新启动 stunnel,它应该就可以正常工作了。
这是第一个接受 SSL 的配置
; /etc/stunnel/ssl_in.conf
; Certificate/key is needed in server mode and optional in client mode
cert = /etc/stunnel/srv1.keys
; Some security enhancements for UNIX systems - comment them out on Win32
chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4
; PID is created inside chroot jail
pid = /srv1.pid
debug = 4
output = /var/log/stunnel4/ssl_in.log
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
[ssl_in_imap]
accept = 993
connect = localhost:10993
[ssl_in_smtp]
accept = 587
connect = localhost:10587
创建传出连接的第二个实例。
; /etc/stunnel/ssl_out.conf
; Some security enhancements for UNIX systems - comment them out on Win32
chroot = /var/lib/stunnel4/
setuid = stunnel4
setgid = stunnel4
; PID is created inside chroot jail
pid = /clt1.pid
; Some performance tunings
socket = l:TCP_NODELAY=1
socket = r:TCP_NODELAY=1
client=yes
CAfile = clt1.ca
verify = 0
[ssl_out_imap]
accept = 10993
connect = remote_server:993
[ssl_out_smtp]
accept = 10587
connect = remote_server:10587
为服务器生成filename.keys。
# Create a new key and preparte a CSR
openssl req -new -keyout filename.pem -out filename.csr
# Remove the passphrase from the key
openssl rsa -in filename.pem -out filename.key
# Self sign
openssl x509 -in filename.csr -out filename.cert -req -signkey filename.key -days 720
# combine files to get the keys file stunnel needs.
cat filename.key filename.cert > filename.keys
您的文件将如下所示。
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDkwzyKrPRXGyvEgITm/7oC9fDU4Y7L9mtMXmcIR98cp0g1ndcz
...
qhP3y97k67EVdSC+92pIGrAL7kBWckpJ2HP1El4KeZg=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICHzCCAYgCCQDq/33qh7Dq5TANBgkqhkiG9w0BAQUFADBUMQswCQYDVQQGEwJV
...
ebbhvhYLx1KkhD8/dXEbU0+kNg==
-----END CERTIFICATE-----