postfix/tls的设定过程整理

总结前述的基本知识,在postfix系统上设定tls的大致过程如下:

1、安装openssl包,因为我们需要使用该软件包来产生tls证书。

2、使用tls patch,并重新编译、安装postfix。

3、产生一份服务器端证书以及一个证书签署请求(csr)。然后将两者一并提交给有一定信誉的ca请求签署;或是自己扮演ca的角色,自己核发证书给自己。

4、将所有证书文件(服务器的密钥、csr、ca的根证书)安装在postfix目录下。

5、编辑main.cf,设定下列tls参数:

smtpd_use_tls = yes

smtpd_tls_key-file = /etc/postfix/mailkey.pem

smtpd_tls_cert_file = /etc/postfix/mail_sigend_cert.pem

smtpd_tls_cafile = /etc/postfix/cacert.pem

如果还需要设定其他tls参数,现在正是时候。

6、重新加载postfix,使我们在main.cf所做的改变生效。

现在,每当有客户端要求秘密通信,postfix/tls server都能适当应对。

取得客户端证书

你可能会想要使用客户端证书来代替或加强其他smtp验证技术。客户端证书是非常可靠的验证方法,因为其非常难以假造。

客户端证书必须由ca核发。如果你打算选择一个ca来核发证书给你的用户,你应该遵照该ca的申请过程来取得客户端证书。当然,你也可以使用openssl包提供的工具,自己扮演ca的角色,自己签发证书给用户。

制作客户端证书

客户端证书的制作程序,其实与服务器端证书的制作过程很相似,唯一差别是多了一个步骤:将签署好的证书换成mua可用的格式。大部分流行的mua都偏好 pkcs12格式的证书文件,这种格式将签署好的证书与私钥封装在一起,并以一个密码保护。如果你使用第三方ca,该ca应该能提供正确格式的证书文件来 满足用户的mua。如果你自己签署证书,你应该制作pkcs12格式的证书文件来分发给用户。证书文件应该包含核发给用户个人的证书(公钥)、搭配于该证 书的私钥以及你自己的ca根证书。

对于每一位你打算以证书来验证其身份的用户,你都必须分别产生一对专属的公私钥。你应该指定“辨别名称”的命名原则。一般而言,在产生证书时,你应该使用 个人的邮件地址或是客户端机器的主机名称。举例来说,假设你决定以邮件地址为分辨名称,而现在要签发证书给kdent@ora.com这位用户,步骤如 下:

1、使用openssl命令产生一对公私钥。请注意,你自己的公钥也必须有ca的签名

openssl req -new -nodes -keyout kdentkey.pem -out kdentreq.pem -days 365

由于使用了-new选项,所以上述命令会产生一个私钥与一份csr。-nodes选项要求openssl不要将私钥密封。-keyout和-out分别指出私钥文件和csr的文件名。最后,-days 365表示证书的有效期是一年。

2、签署证书。如果你与ca合作,请按照他们的申请流程,提出前一步骤所产生的csr,要求他们签署。如果你自己作为ca,请用下列命令签署证书:

openssl ca -out kdent_signed-cert.pem -infiles kdentreq.pem

3、将签署好的证书文件转换成适当格式。问清楚用户所用的mua是哪一种,将ca签章的证书文件转换成该mua能接受的格式:

openssl pkcs12 -in kdent_sigend_cert.pem -inkey kdentkey.pem -certfile /etc/postfix/cacert.pem -out kdent.p12 -export -name "kdent@ora.com"

这命令会要求你提供一个密码来保护所产生的文件(kdent.p12),而你必须将这个密码告知用户。-certfile选项指出你自己的ca根证书文件。完成之后,就可将kdent.p12文件与脚本交付给用户。

最后一步,请用户自己将证书文件安装道mua。大多数mua都提供相当简便的步骤来导入证书文件,所以应该不成问题。如果你有不擅长操作计算机的用户,请给予适当的指导。

设定客户端证书验证

postfix/tls依据证书的“指纹”来判别证书是否可接受。“指纹”是从证书中计算出来的值,不同的证书,不可能计算出相同的指纹。你必须将每个客 户端证书的指纹都存放于一个标准的postfix查询表。每当有客户端出示其证书,postfix/tls就计算该证书的指纹,然后检查该指纹是否已登记 在查询表,借此决定是否要容许客户端使用转发服务。

你必须收集每一位获得授权的客户端的证书指纹。许多mua都有显示证书指纹的功能,你可以要求用户将他们在mua看到的证书指纹提供给你。如果他们的证书是你自己核发的,你可以用openssl x509命令直接算出指纹:

openssl x509 -fingerprint -noout -in kdent_signed_cert.pem | cut -d -f2

整个设定流程如下:

1、分别取得每一位用户的证书指纹。你可以按照上述步骤自己计算,或是要求用户提供给你。

2、将收集道的指纹集中在/etc/postfix/clientcerts文件,并注明其对应的辨别名称。

3、将制作好的clientcerts查询表转换成数据库:

postmap /etc/postfix/clientcerts

4、编辑main.cf配置文件,加入下列参数:

relay_clientcerts = hash:/etc/postfix/clientcerts

smtpd_tls_ask_cert = yes

smtpd_recipient_restrictions =

permit_mynetworks

permit_tls_clientcerts

reject_unauth_destination

5、重新加载postfix,使我们在main.cf所做的改变生效:

postfix relaod

tls/smtp client的设定过程

既然smtp/tls server能要求客户端出示证书,那么,当postfix扮演客户端角色时--寄信到其他smtp server,或要求其他smtp server转发邮件--smtp mda也可能被要求提供客户端证书。注意,一个postfix系统只能有一个代表自己的客户端证书,除非你在master.cf中设定了其他mda,才有 可能安装多个的客户端证书。

证明服务器端身份的证书,也可以用来证明客户端身份。不过,正式ca核发的证书,不见得能让你同时用在两种身份上。这种情况下,你可能需要向ca另外申请 一个客户端证书。我们先前制作的自签名服务器证书没有这样的限制。不管你的客户端证书是怎么来的,其辨别名称都必须符合myhostname参数所指定的 主机名称。

制作客户端证书的过程,其实与服务器端证书的制作过程完全一样,所以不再赘述。如果你打算使用同样的证书,那么,只要将几个tls client参数指向tls server参数所用的相同文件即可。

以下是最基本的tls client参数。

smtp_use_tls

启动postfix smtp client的tls支持。

smtp_use_tls = yes

smtp_tls_key_file

指向客户端证书所对应的私钥文件。

smtp_tls_key_file = /etc/postfix/mailkey.pem

smtp_tls_cert_file

指向客户端证书文件。

smtp_tls_cert_file = /etc/postfix/mail_signed_cert.pem

smtp_tls_cafile

签署客户端证书的ca的根证书文件,例如:

smtp_tls_cafile = /etc/postfix/cacert.pem

假设你打算让smtp使用与smtpd相同的证书,设定步骤相当简单:

1、编辑main.cf,设定下列参数:

smtp_use_tls = yes

smtp_tls_key_file = /etc/postfix/mailkey.pem

smtp_tls_cert_file = /etc/postfix/mail_signed_cert.pem

smtp_tls_cafile = /etc/postfix/cacert.pem

2、重新加载postfix,使main.cf的改变生效;

postfix reload

现在,每当postfix联机到一个妖气出示客户端证书的smtp server,smtp便会提供必要的信息。

通过阅读本文,想必大家都知道了在Postfix里传输层安全协议是怎么安装、整理和设定的,希望对大家有所帮助!


相关内容