发信人: zenz.hu(真)
整理人: sungang(2003-04-02 20:04:07), 站内信件
|
Qmail SSL实施手册
Zenz.hu
有的时候我们会要求更安全的网络服务,就像浏览网页的时候,希望通过SSL来提交自己的私人信息,不希望被别人窃听。而对于电子邮件也可能有同样的要求。下面是一份简单的描述如何在Qmail上实施SSL的手册,希望能帮助对此服务有需求的网络管理员。
实施过程是在OpenBSD 3.0上面进行的,但是在其他Open Source的Unix系统上实现应该是大致相同的。我不打算详细的讲解怎样安装相关的程序,因为已经有很多写得很好的文章了,我只略微讲一下qmail的处理和怎样实现SSL加密。
首先,在这里下载一个qmail大补贴http://gadsoft.3322.net/packages/totalbig.patch,这个大补贴是我根据需要把几个不错的补丁组合起来的。包含了qmail-queue补丁(在调用qmail-queue分发邮件之前,先检查环境变量QMAILQUEUE有没有指向某个程序,如果有的话,交由该程序处理);qmail-smtp-auth补丁(SMTP发信认证补丁,要注意,我这里用的是nimh.org的补丁,也就是只支持plaintext验证);以及qmail-tls补丁(也就是本文的重点,为实施SSL加密而打的补丁)。如果你只需要SSL的补丁,那么可以自己对补丁进行分离,或者到这里下载单独的SSL补丁:http://www.esat.kuleuven.ac.be/~vermeule/qmail/tls.patch
如果你采用我的大补贴,那么对qmail的修改编译过程非常简单,到qmail.org下载qmail-1.03的源代码包,展开后,进入目录,执行patch –p0 < /your/path/totalbig.patch就会打好所有的补丁,然后按照普通的qmail安装步骤就行了。
怎样测试SSL加密的功能有没有加入到qmail中呢?很简单,在qmail系统运转正常之后(这里假设运行搭配的是tcpserver vpopmail吧),telnet到服务器的smtp端口,执行ehlo命令,如果返回信息中有250-STARTTLS这样一行,就代表服务器有此功能了。如下图
但是,这不代表你现在可以使用这个功能了(继续使用starttls命令,会返回错误的提示信息的:454 TLS not available: missing certificate (#4.3.0)),还需要做一些处理,什么处理?当然就是生成SSL加密所需的协议啊。
我们这里提供的是自己进行认证的做法,就是自己做RootCA,然后签署自己的认证了,当然,如果有钱,愿意向VeriSign等认证机构付费,那么也是有好处的,因为可以肯定,这样得到的认证,可以在使用的时候不会提示认证未经检验。但是要做好心理准备,好贵的。你要真这么有钱,请赞助我一点点吧,我写这篇文章不容易的,要经过N多次的测试,死伤大脑细胞无数(……全都是废话!J)
openssl genrsa –out /etc/ssl/private/server.key 1024
openssl req –new –x509 –days 730 –key /etc/ssl/private/server.key –out /etc/ssl/server.crt
你会看到下面的提示和要求输入的内容:
Using configuration from /etc/ssl/openssl.cnf
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) []:CN
State or Province Name (full name) []:GUANGDONG
Locality Name (eg, city) []:GUANGZHOU
Organization Name (eg, company) []:PASSDEV
Organizational Unit Name (eg, section) []:AUTHDEPT
Common Name (eg, fully qualified host name) []:www.asura.com
Email Address []:
这个,我不用太多解释了吧?不懂?自己上Google找资料去。要注意的是Common Name中,我们填入了web服务器的地址。这有什么用?这是方便把这个认证交给HTTPS使用,这样,我们可以很方便的通过浏览器来添加这个认证到RootCA中去。
完成了吗?当然不,我们还没有生成给qmail用的认证呢。
openssl req -new -nodes -out /tmp/req.pem -keyout /var/qmail/control/servercert.pem
chmod 640 /var/qmail/control/servercert.pem
chown qmaild:qmail /var/qmail/control/servercert.pem
openssl x509 –req –days 365 –sha1 –CA /etc/ssl/server.crt –CAkey /etc/ssl/private/server.key \
CAserial /etc/ssl/smtpca.sr1 –CAcreateserial –in /tmp/req.pem –out /tmp/cert.crt
又出现上面那样的提示和要求输入的内容了,要注意,这次,Common Name中,要填入smtp服务的地址,如:smtp.asura.com。这个很重要,不然的话,在验证的时候,验证地址会不正确的。
cat /tmp/cert.crt >> /var/qmail/control/servercert.pem
设置邮件软件的时候,把服务器要求安全连接选上(类似选项),当然不选也可以,也不过是不用这项功能罢了,不过既然不用,你搞这么多干嘛?Outlook Express的设置如下图:
这样行了吗?如果你用的邮件程序是Outlook Express 4或者5的话,那么,SMTP的SSL功能确实可以用了,因为Outlook Express 4和5是不检查服务端的认证的。但是如果你用的是Outlook Express 6或者其他邮件程序,那么会提示证书无法验证的,如下图:
当然,你选继续使用服务器,是不影响使用的,但是这多不美观呀。刚才我不是说可以从HTTPS导入RootCA吗,启动HTTPS服务,用IE浏览https://www.asura.com/,自动会提示证书安装的,把它安装到受信任根目录中去吧,当然如果你不打算启动HTTPS服务,那么把server.crt存到软盘上,在IE的Internet 选项中导入也是一样的。
导入的时候要选x.509证书就行了。
然后再试一试发信,怎么样?畅通无阻了吧?哈哈!!
不过,你在收信的时候遇到问题了,对不对?仔细看看上面设置Outlook Express的那张切图。有没有发现,收信的POP3端口变成995了。不再是标准的110。怎么办?是不是把服务器对应pop3的监视改到995就行了?当然不是啦,这样是不可能实现SSL加密的。继续看下去怎么做吧。
这个时候,我们要安装stunnel了,一个用于实现SSL的tunnel功能的软件(要注意,要采用3.22以上的版本,因为之前的版本有严重的安全漏洞)。建议从ports安装啦,方便嘛。修改/etc/services文件,加入新的端口对应关系
pop3s 995/tcp
pop3s 995/udp
不做这步也可以,不过要用数字来明确端口号了。
还要建立供pop3s用的认证文件pop3scert.pem,同servercert.pem的制作相同,Common Name填pop3的地址,如:pop3.asura.com,另外由于stunnel原因,这个文件的属性是400的,不然,stunnel会提示权限不正确。
/usr/local/bin/tcpserver –u $QMAILDID –g $NOFILESGID \
0 pop3s /usr/local/sbin/stunnel -s $QMAILDID -g $NOFILESGID -D 3 \
-p /var/qmail/control/pop3scert.pem -l /var/qmail/bin/qmail-popup pop3d_ssl \
asura.com /var/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir > /dev/null &
OK,现在再试一试收信功能,一切畅通无阻了吧?恭喜,你又可以为你的服务器提供一个更安全的服务了。
PS:文章写的很随意,所以语法甚至执行的命令都有可能写错(应该不会有原则性问题),因此,需要你对qmail的安装和使用已经有一定了解。有什么问题可以在坛子上留言给我,谢谢 http://openbsd.gzclub.163.com/
----
来OpenBSD版看看吧!
我的QQ:256229 |
|