LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: trinity

使用数字证书,保护个人邮件安全

[复制链接]
发表于 2003-10-21 16:28:09 | 显示全部楼层
mozilla的客户端(比如Thuderbird)可以使用Enigmail+GnuPG。甚至还有人写了SysTray,这样就可以对页面输入的内容加密(比如登陆到hotmail网站写完邮件后可以签名或加密)。公钥是要先发给别人的,否则你签名的信无法验证,加密的信他们根本看不到。不能说看不到,只能说看到的是这样的:
-----BEGIN PGP MESSAGE-----
Version: PGP 8.0.2 - not licensed for commercial use: www.pgp.com

qANQR1DBwE4DmUTeNXvDy8oQBAC5dmFqtN1q2MKtuEV/faIu8+GDy4lL7yQJPm+A
0Fjmk6i2jr9dGc+2ObHBJiXmhFH1f5NZ/sytGXDqwiqazwn9XDeGLKnoPI4Li08v
XqGwWrxLsH4+ilShXXaLTjvYCPXG4ldc7+8COyXKkM8tO0viO9ixPDOHpbPJTBy2
AYCG3AQAva/iOnGKqbKYPCO6mqy0yfMBf6bQhz5G6GgSps5dUPNCJNMy9S1DtGFy
NQpmRfkmx/DBa7r62V6wxFuRKMkXluXdNEna3ro0NE8NfxbZDJPgNx/BxvaXFlih
CGBdGU9P+lvtilPhogacDst6alTQh9B0tYcYrmBNMHyjsBGwvv/SsQHRUuCfb+Jv
cBvlzyqu/l1p7sjBSgwqwkWJydfH+Borujuxr+B3e4B89C60i89GQqjBac3y8xid
x8CZmZ/oQX6kMoLAqxcO4wE6dmifaW24tvEZJ7/MOKuOz5G21f05o7968UBpFLiJ
DhUdPa8k1eJyY50ppzihD0jYVu5lnwhC78fCaYFBhEUOtwsG7+gsCQWMJf/7fiIR
3in7AtGgkKpYIQttlzBUVqGQhKcnm1Pt9w==
=Dfse
-----END PGP MESSAGE-----
公钥分发形式很多,你可以把它传到一个公钥服务器上,供别人下载,或是放在一个可信的地方(比如你的个人网页上,国外好多网站都有),或者是得到第三方签名过的公钥(比如你的朋友把你的公钥签名后发给第三人),目的就是可信。当然你附在邮件后面也没有问题。
 楼主| 发表于 2003-10-21 21:37:08 | 显示全部楼层

先回复几个问题吧

1. Mozilla的邮件客户端我没有用过,但应该和以前的netscape的客户端相似,PGP应该是支持的,GnuPG也算是一种PGP,但S/MIME可能还不支持。

2. 加密方式其实质就两种,一种是对称的,也就是收发双方使用同样的密钥,要通信,就要先把密钥通过某种方式传递给收信人,然而怎样传送密钥成为一个问题。
另一种是非对称的,也就是公钥加密体制,使用两个密钥:一个公钥公开,大家都能从网上或某种途径得到,另一个私钥,自己保留。用公钥加密,用私钥解密;用私钥加密,用公钥解密。
比如A发信给B,要使信件保密,就用B的公钥加密信件内容,B得到后可以用自己的私钥解开,其他人没有B的私钥就无法解密。同样,如果A想让B知道这封信是A自己写的,不是别人冒充的,就用自己的私钥加密,这样任何人都可以用A的公钥解密看到内容,但却无法更改内容,因为更改后的内容无法以A的私钥加密,从而无法用A的公钥解开,也就不能表示这是A发送的信件--这就是签名。

3. 公钥的分发主要是身份验证的问题
只要你安装好了PGP或S/MIME,默认设置下,当你发信时,信件中将携带你的公钥信息。收信人可以将你的公钥保留,以便给你回信时加密用。
楼上提到的是PGP的公钥分发形式,它的基础是互相信任。你有2个朋友A、B,你信任A,也信任经A签名的其他人的公钥,你信任B,但你不信任B签名的其他人的公钥。那么,当你收到一封信,信上的签名是C的,且与C签名的私钥的对应的公钥是由A签名的,那么你就会相信这确实是C发来的。

而S/MIME的公钥分发形式是基于“权威”的,你肯定相信你的操作系统厂商,你也相信象ORACLE、IBM这样的公司不会恶意破坏你的计算机,那你也会相信CA--数字证书管理中心(不知道这个词怎样说更好)--不会随便给未经验证的个人或公司分发数字证书。全球著名的CA有VeriSign、EziTrust、Thawte等几家,他们颁发的数字证书被认为是可信的。
你要做的就是向这些CA申请一个数字证书(有的是免费的,也有的要付费)。把这个证书装在你的系统里,然后当你发签名信时,你的证书的公开部分就发送给了对方,对方收到你的信,邮件客户端就会先检查这个证书是否是由系统中默认的CA颁发的,如果是,就相信发信人的身份,如果不是,则提示,用收信人决定是否相信。加密信不涉及身份验证的内容。当然你发信时可以选择加密、签名或既加密也签名。

使用LINUX的人是不是都不太相信“权威”?但这里的CA和普通意义上的权威并不是一回事。由于CA的重要性,只有货真价实的CA才能担些重任,一旦发生问题,这个CA即被淘汰。你可以不相信权威,但当某一天,你在收到的信中,或在某公共PGP服务器上看到的某个PGP公钥自称是Ritche、Knuth、Stallman、Linus或Raymond的公钥,你是否可以相信呢?反之,如果某个证书上面有VeriSign(操作系统默认安装的CA)的签名,声称这个证书是它颁发给Linus的,你会相信吗?
国外用户使用PGP的较多,主要是S/MIME协议出现晚于PGP,早期的*nix系统不支持S/MIME协议,只能使用PGP了,后来也就不想再换了,可省掉通知所有的朋友的开销。
 楼主| 发表于 2003-10-21 22:29:08 | 显示全部楼层

三、证书的申请和管理

一、申请
要使用S/MIME,你必须要有一个x509的数字证书。目前可以到www.thawte.com免费申请,可以得到一个以自己的邮箱地址为名的数字证书。你需要懂英语。
建议使用IE申请,你没有看错,是M$ IE。我用mozilla 1.0.2申请,在某个页面会出错,用Konqueror 3.14申请,提示我当前的Konqueror是测试版本,用Firebird 0.6.1申请成功,但却无法将证书导出来,因为Firebird没有这个功能。其它的浏览器没有试过。(现在你知道浏览器其实并不是只用来浏览网页了吧?功能是很重要的一个评价)
进入windows,打开IE,输入www.thawte.com ,点击页面上的免费个人邮箱数字证书申请,先填一个表,然后按提示一步一步来,thawte会发一封邮件到你填写的邮箱地址去,以验证这个地址确实属于你。根据来信中的地址你再次访问这个网站,然后再按提示来,最终,你会在网页上你的证书一栏看到你的证书,点fetch,将这个证书安装到你的IE中。

二、导出
现在在IE中点击tool-option-content(?)-数字证书,你会在个人证书中看到thawte freemail CA颁发给你的证书,点导出,包括证书路径和私钥,格式为pfx,确定。IE会提示你输入一个密码保护你的私钥,这里假定为1234,因为后来输入密码的地方较多,稍不注意就错了。假设文件名为mymail.pfx。再点击trusted root certification,找到thawte freemail CA和personal freemail RSA两个证书,分别导出,格式为der,假设文件名分别为thawte.cer和freemail.cer。

如果你用mozilla申请成功,请跳到四
三、导入moailla
重启进入linux,将存放证书的盘mount上。运行mozilla,如果你是其它浏览器,请自便 。选择菜单上edit-preference-security & privacy,点manage certificate,导入,系统会提示你这是第一次使用保密设置,要求设定master密码,这里假定是abcd,输两遍。接着会要求你输入保护私钥的密码1234。再浏览到你保存的mymail.pfx文件,确定。mozilla提示导入成功。

四、从mozilla导出
将证书导出为mutt使用的p12格式。同上,在mozilla--edit--preference--privacy&security--manage certificate里点中自己的邮件证书,导出,格式p12,输入abcd的master密码,提示输入保护私钥的密码,这个密码自定,可以继续用1234也可以不是,还是用1234为例。导出成功。假定导出文件名为mymail.p12。

以上在windows下申请的证书可以在Outlook Express中使用。只要设置一下即可,非常方便。Foxmail4.2不支持S/MIME,也不支持PGP,Thebat 都支持。其它的邮件客户端不详。
据有的文档说明,mutt可以直接使用pfx格式的数字证书,但由于mutt的官方文档说明要将pfx转为p12,因此这里用mozilla实现了转换。其他的浏览器应该和mozilla差不多。

由于我的windows是英文版,又长期不用,有的地方菜单项目可能记错了,mozilla也是凭记忆写的,如有错漏,请fix me。
 楼主| 发表于 2003-10-22 13:34:52 | 显示全部楼层

四、在mutt中使用数字证书

(一)导入根证书
为使在收到签名的邮件时能自动检查该签名的证书是否由受信任的CA颁发,需要将CA的证书(根证书)导入到mutt中去。

smime_key add_root ~/ca-bundle.crt

这里的ca-bundle.crt就是从mutt源代码的contrib目录拷出来的那个同名文件。
此外,为了验证自己的证书和其他同样从 thawte申请的证书,还需要将从 windows中导出的那两个cer文件导入为根证书:

openssl x509 -inform der -in thawte.cer -out thawte.crt
openssl x509 -inform der -in freemail.cer -out freemail.crt
smime_keys add_root thawte.crt
smime_keys add_root freemail.crt

(二)导入个人证书
smime_keys add_p12 mymail.p12
按提示输入保护私钥的密码1234,并为这个证书取一个好记的label。你会看到这样的一行信息:

added private keys /home/.../87654321.0
记住这个数字,包括.0

下面修改.muttrc(如果你曾把smime.rc的内容复制到.muttrc中)或者smime.rc(如果你是用“source ...”)
找到 smime_sign_as 12345678.0
将其改为上面记住的数字 smime_sign_as 87654321.0

修改.mailcap文件,加入下面一行:
application/x-pkcs7-signature; openssl pkcs7 -in %s -inform der -noout -print_certs -text | less; needsterminal

(三)使用数字证书签名和加密邮件
1. 签名
按正常方式写邮件,编辑完成后在按“y”发送之前,按“S”设置S/MIME选项。选择“sign”,再按“y”发送即可。

2.加密
在加密之前,你需要拥有收信人的公钥证书。最简单的方法是请收信人发送一封签名的邮件给你。收到这封信后,mutt会自动检查发信人的数字签名,如果正确,你可以按"ctrl-K"提取对方证书并保存。这一过程只需要一次,除非对方更换数字证书。
发信时,编辑完成后,按“S” 设置信件的S/MIME选项,按e选择加密,也可按w选择加密方式。

3.签名并加密
同上,在选择S/MIME选项时选择both。信件会用你的证书签名,然后以对方的证书加密,确保了只有你指定的收信人才可以看到信件内容并检查你的签名。
 楼主| 发表于 2003-10-22 13:51:12 | 显示全部楼层

五、制作自己的数字证书(略)

这一段内容我自己也在实践之中,虽有简单经验,但难以写出有意义的东西来。留待以后完成吧。

六、后记
东西写完了,有一些遗憾,觉得没有写出让人思考的、有价值的内容来。
这篇文章只能算是一份mutt说明,对不用mutt的人来说可能没有一点意义。这和我的水平有限有关,但linux下支持S/MIME的软件还不多。Kmail的菜单里有S/MIME,但我一直没有找到那个插件。在KDE网站上的文档里提到,除了那个插件外,好象还需要什么额外的库支持,没有细究。Ximian Evolution不错,功能强大,但我也没办法实现S/MIME的功能,而且它的体积也太大了,我只需要一个邮件客户端而已。
在证书的使用管理方面,outlook express就做得很好,证书导入后就可以很方便地使用。签名(加密)时,你不需要自己选定要使用的证书,它会根据你使用的发件人地址(收件人地址)自动选用。在收到对方的签名信后,它会自动将对方的公钥证书导入。在你拥有多个信箱、多个证书时完全不用担心证书会不会乱套。
mutt还有很大的提高余地。
发表于 2003-10-31 17:46:24 | 显示全部楼层
申请证书时,完成step8后,在X.509 Format Certificates下点
出现附件的页面……
是我的问题还是网站本身的问题?用Mozilla、Konqueror、IE都出现这样的错误

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2003-11-1 12:25:01 | 显示全部楼层
不是网站的问题。我用IE正常,用Konqueror正常,用firebird正常,只有mozilla 1.0是这样的。建议用IE6
如果还是不行,建议换一个网站去申请,比如下面两个站点:
www.ezitrust.com (商业+免费)
www.cacert.com  (免费)
发表于 2004-12-7 13:50:00 | 显示全部楼层
不错,帮我解决了evolution下添加证书的问题。谢谢。

导出证书的时候,需要把私钥也导出。
发表于 2004-12-7 18:58:15 | 显示全部楼层
不错不错,
有空试试
不过不知道可否设置在加密发送的时候自动去LDAP服务器取公钥
太平洋里的水 该用户已被删除
发表于 2004-12-7 21:40:52 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表