Chinaunix首页 | 论坛 | 博客
  • 博客访问: 407763
  • 博文数量: 92
  • 博客积分: 3153
  • 博客等级: 中校
  • 技术积分: 780
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-03 16:26
文章存档

2011年(21)

2010年(71)

分类: LINUX

2010-12-26 11:40:59

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列表




    
 
阅读(2223) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~