0.准备工作 需要三台机器,分别扮演不同的角色:
a. 192.168.0.48 ca.example.com CA证书中心
b. 192.168.0.49 server.example.com 服务器,以dovecot服务器为例
c. 192.168.0.50 client.example.com 客户端
ps.其实两台,甚至1台都可以,但是新手估计会很混乱的,这东西有一点点绕人
1.配置CA
修改openssl配置文件/etc/pki/tls/openssl.cnf,做如下修改:
[ CA_default ]
dir = /etc/pki/CA #CA中心的目录
crl_dir = $dir/crl #被吊销证书的目录
database = $dir/index.txt #证书索引文件
new_certs_dir =$dir/newcerts #经过CA中心签名的证书备份目录
certificate = $dir/my-ca.crt # CA的公钥文件名
serial = $dir/serial # CA中心的颁发证书序列号
crlnumber = $dir/crlnumber #已吊销证书序列号
crl = $dir/my-ca.crl #证书吊销列表
private_key = $dir/private/my-ca.key #CA私钥文件
...
default_days = 365 #证书有效期
[ policy_match]
此段为证书相关信息选项,其中match指定的项,要求被签名证书一定要与CA的对应项一致。
[ req_distinguished_name ]
此段为CA证书的默认配置
下面开始配置,先建立CA中心的各个文件和目录,且umask 使用077
#(umask 077;mkdir -p /etc/pki/CA/{certs,crl,newcerts,private})
#touch /etc/pki/CA/{crl,serial,crlnumber}
#echo 00 > /etc/pki/CA/serial
然后生成CA的私钥和公钥
#(umask 077;openssl genrsa -out /etc/pki/CA/private/my-ca.key -des3 2048)
由私钥生成公钥
#openssl req -new -x509 -key /etc/pki/CA/private/my-ca.key -days 365 > /etc/pki/CA/my-ca.crt
将my-ca.crt,即公钥放到ftp或者http等服务器,供其他人下载
2.配置服务器
安装dovecot,配置dovecot只提供imaps服务,修改/etc/dovecot.conf的protocol项,并取消以下两行的注释:
#ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
#ssl_key_file = /etc/pki/dovecot/private/dovecot.pem
此时dovecot已经在这两个地方提供了证书,但是证书信息是默认的,所以需要重新生成,生成证书的方法有很多,CE的课程里使用make命令生成pem的对称密钥,这里我们使用dovecot自带的脚本工具生成非对称加密的一对密钥:
复制/usr/share/doc/dovecot-1.7.0/examples/mkcert.sh到root家目录,不复制直接改也行,复制以下保险一点
修改mkcert.sh的OPENSSL、SSLDIR、OPENSSLCONFIG几项,如:
OPENSSL=/usr/bin/openssl
SSLDIR=/etc/pki/dovecot
OPENSSLCONFIG=/etc/pki/tls/openssl.cnf #此处可以事先更改openssl.cnf
删除/etc/pki/dovecot/certs/dovecot.pem和/etc/pki/dovecot/private/dovecot.pem,执行mkcert.sh生成新的服务器密钥,此时的公钥是自签名的,文件位置跟刚才删除的一样,然后启动服务
3.客户端mutt配置
在客户端新建用户,如alice,此用户在服务器上也有。
使用alice登录,如果没有~/.mutt目录则新建,然后新建~/.mutt/muttrc文件,加入如下几行,指明改用的mutt目录,以及使用imaps服务,否则mutt不能使用imaps,只能用不加密的imap。
set folder=imaps://server.example.com/
set spoolfile=imaps://server.example.com/
set imap_force_ssl=yes
运行mutt,此时会提示证书自签名,不被信任,但是仍旧可以看到邮件。下面将dovecot服务器的证书发到CA中心进行授权。
ps.这里也可以使用Thunderbird或Evolution进行测试,图形化界面,比mutt更容易配置。
4.CA对DOVECOT证书签名授权
重新生成dovecot的私钥,用原来的也行,不过不太安全。
#(umask 077;openssl genrsa 2048 > ~/dovecot.key)
由这个私钥生成csr(证书签名请求)文件:
#(umask 077;openssl req -new -key ~/dovecot.key -out dovecot.csr)
查看这个请求的内容
#openssl req -in deovecot.csr -noout -text
将dovecot.csr发送到CA中心,在CA中心对其进行签名:
#openssl ca -in devecot.csr -out dovecot.crt
ps.CA中心每对一个证书进行签名,serial会自动加1,签过名的证书会保存在newcerts目录,以备以后吊销时使用,index.txt文件里会记录所有证书的相关信息
将签过名的证书还给dovecot服务器,并用新的一对密钥替换掉老的
#cp ~/dovecot.key /etc/pki/dovecot/private/dovecot.pem
#cp ~/dovecot.crt /etc/pki/dovecot/certs/dovecot.pem
重启服务,使新证书生效
5.在将CA中心的证书导入mutt
下载CA的证书,wget
修改.muttrc文件,加入如下行:
set certificate_file=~/.mutt/my-ca.crt
再次打开mutt,证书提示不见了,因为此时的dovecot证书已经过CA中心的签名,mutt已经可以识别了
6.吊销证书
假设dovecot的私钥被窃取,导致经CA签名的证书变得不可靠,所以CA中心吊销此证书的签名授权。
先在服务器上查出证书的序列号,主题信息:
#openssl x509 -in /etc/pki/dovecot/certs/dovecot.pem -noout -serial -subject
查看CA中心里证书的状态:
more /etc/pki/CA/index.txt
此时证书状态为 V,表示可用
CA中心得到证书的序列号和subject就可以定位证书并注销:
#openssl ca -revoke /etc/pki/CA/newcerts/00.pem
更新被吊销证书列表文件:
#openssl ca -gencrl -out /etc/pki/CA/crl/my-ca.crl
此时证书才真正被吊销,index.txt中证书状态变为R,标明revoked。
查看被吊销证书:
#openssl crl -in my-ca.crl -noout -text
firefox,thunderbird只支持DER格式的crl,所以还需要生成另外一个crl文件
#openssl crl -in my-ca.crl -outform DER -out my-ca-der.crl
复制my-ca.crl和my-ca-der.crl文件到http服务器,供别人下载,否则客户端仍旧不知道哪些证书被吊销了
7.在客户端导入crl列表
mutt没找到如何使用crl,所以这里使用ThunderBird。
在“属性”下导入crl列表,填入crl文件的地址就行了:
配置完成后重启ThunderBird,会收到提示,说证书已失效。
以上是openssl的配置过程,涉及的关键命令如下:
openssl genrsa 2048 my-ca.key #生成私钥
openssl req -new -x509 -key my-ca.key > my-ca.crt #生成公钥
mkcert.sh 生成自签名公钥证书
openssl req -new -key dovecot.key -out dovecot.csr # 生成证书签名请求文件
openssl ca -in dovecot.csr -out dovecot.crt #对证书进行签名
openssl ca -revoke 00.pem #吊销证书
openssl ca -gencrl -out my-ca.crl #更新crl列表