作弊条:如何为postfix配置TLS

• 本文约675字,阅读大致需要2分钟 • Cheatsheets

📜 历史文件已不具备现实意义

本文记录的是2006年通过自建私有CA为Postfix签发一年期证书及生成512/1024位DH参数的早期做法,相关流程与密码学参数均已过时(512/1024位DH参数早已不再安全)。现时已有Let’s Encrypt等免费CA服务,通过ACME自动签发并续期短期证书(亦可配合DANE TLSA)是当前的最佳实践。

以下内容为作弊条,仅供参考;只保证在FreeBSD下能用。

为Postfix配置TLS的关键是产生自己的CA证书,并签署一年一续的服务证书。注意一定要保管好前者的私钥!

第一步:创建自签名CA

1
2
3
4
5
6
7
mkdir /usr/local/etc/ca
cd /usr/local/etc/ca
mkdir certs crl newcerts private
echo "01" > serial
cp /dev/null index.txt
cp /etc/ssl/openssl.cnf openssl.cnf
vi openssl.cnf

把:

dir = ./demoCA # Where everything is kept

改为:

dir = /usr/local/etc/ca # Where everything is kept

接着生成根CA证书:

cd /usr/local/etc/ca
openssl req -new -x509 -keyout private/cakey.pem -out cacert.pem \
  -days 3652 -config openssl.cnf

注意:运气好的话,相当于10年。

第二步:生成与签署服务证书

接下来生成证书请求:

cd /usr/local/etc/ca
openssl req -nodes -new -x509 -keyout mykey.pem -out myreq.pem \
  -days 365 -config openssl.cnf
openssl x509 -x509toreq -in myreq.pem -signkey mykey.pem -out tmp.pem

签署:

openssl ca -config openssl.cnf -policy policy_anything \
  -out mycert.pem -infiles tmp.pem
rm -f tmp.pem

❗ 重要

/usr/local/etc/ca这个目录需要严格限制访问。

第三步:部署证书与生成DH参数

接下来,复制证书到/usr/local/etc/certs:

mkdir /usr/local/etc/certs
cp /usr/local/etc/ca/mykey.pem /usr/local/etc/certs/
cp /usr/local/etc/ca/mycert.pem /usr/local/etc/certs/

合并CA证书到服务器证书:

cat /usr/local/etc/ca/cacert.pem >> /usr/local/etc/certs/mycert.pem

修正权限:

chmod og-rwx /usr/local/etc/certs/mykey.pem
chmod og=r /usr/local/etc/certs/mycert.pem

生成Diffie-Hellman参数:

openssl dhparam -out /usr/local/etc/postfix/dh_512.pem -2 512
openssl dhparam -out /usr/local/etc/postfix/dh_1024.pem -2 1024