如果不需要来自 CA 的签名,也可以创建自行签名的证书。 首先, 需要生成 RSA 密钥:
# openssl dsaparam -rand -genkey -out myRSA.key 1024
接下来, 生成 CA 密钥:
# openssl gendsa -des3 -out myca.key myRSA.key
然后用这个密钥来创建证书:
# openssl req -new -x509 -days 365 -key myca.key -out new.crt
上述步骤将在当前目录中生成两个新文件: 一个是权威发证机构的签名文件, myca.key; 另一个是证书本身, new.crt。这些文件应该放到同一个目录中, 一般而言, 推荐放到 /etc,并且只允许 root 读取。 建议把权限设置为 0700, 这可以通过 chmod 工具来完成。
那么有了这些文件可以做些什么呢? 一个比较典型的用法是用来加密 Sendmail MTA 的通讯连接。这可以解决用户通过本地 MTA 发送邮件时使用明文进行身份验证的问题。
注意: 这个用法可能并不完美, 因为某些 MUA 会由于没有在本地安装证书而向用户发出警告。请参考那些软件的说明了解关于安装证书的信息。
下面的设置应添加到本地的 .mc 文件
dnl SSL Options
define(`confCACERT_PATH',`/etc/certs')dnl
define(`confCACERT',`/etc/certs/new.crt')dnl
define(`confSERVER_CERT',`/etc/certs/new.crt')dnl
define(`confSERVER_KEY',`/etc/certs/myca.key')dnl
define(`confTLS_SRV_OPTIONS', `V')dnl
这里, /etc/certs/ 是准备用来在本地保存证书和密钥的位置。 最后, 需要重新生成本地的 .cf 文件。 这一工作可以简单地通过在 目录中执行 make install 来完成。 接下来, 可以使用 make restart 来重新启动 Sendmail 服务程序。
如果一切正常的话, 在 /var/log/maillog 中就不会出现错误提示, Sendmail 也应该出现在进程列表中。
做一个简单的测试, 使用 telnet(1) 来连接邮件服务器:
# telnet example.com 25
Trying 192.0.34.166...
Connected to example.com.
Escape character is '^]'.
220 example.com ESMTP Sendmail 8.12.10/8.12.10; Tue, 31 Aug 2004 03:41:22 -0400 (EDT)
ehlo example.com
250-example.com Hello example.com [192.0.34.166], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE
250-DSN
250-ETRN
250-AUTH LOGIN PLAIN
250-STARTTLS
250-DELIVERBY
250 HELP
quit
221 2.0.0 example.com closing connection
Connection closed by foreign host.
如果输出中出现了 “STARTTLS” 则说明一切正常。