一、对称算法:Hash算法

 

1hash算法主要用于保证数据的完整性

 

2、相同的密码通过hash算法加密后,其hash值也不会一样

 

[root@station1 ~]# md5sum yum_forAS4.tar.gz

 

原文来自:http://www.linuxidc.com/Linux/2011-04/34690.htm

 

24d703673cb83aade16065ed402dea50  yum_forAS4.tar.gz

[root@station1 ~]# md5sum -b yum_forAS4.tar.gz  

24d703673cb83aade16065ed402dea50 *yum_forAS4.tar.gz

#hash值未变,说明yum_forAS4.tar.gz数据未变修改

二、非对称算法:数字证书

1、私钥:用于授权认证

2、公钥:用于数据加密

三、创建一个CA中心(station1)

1、修改/etc/pki/tls/openssl.conf                      

[root@station1 ~]# vi /etc/pki/tls/openssl.cnf

[ CA_default ]

dir            = /etc/pki/CA           

#ca所有信息存放目录

certs           = $dir/certs         

存放公钥

crl_dir         = $dir/crl             

#证书吊销列表,存放吊销的证书

database        = $dir/index.txt       

# 证书索引文件,证书颁发的信息,

new_certs_dir   = $dir/newcerts      

#存放经过CA中心签名的证书的副本,吊销证书时需要副本

certificate     = $dir/my-ca.crt     

#CA的公钥,任何人都可下载使用

serial          = $dir/serial        

#每做一次签名,此号加1,即颁发证书序列号

crlnumber       = $dir/crlnumber  

#每吊销一次证书,此号加1,即吊销证书序列号

crl             = $dir/my-ca.crl   #吊销证书列表,即黑名单列表,客户自动下载

private_key     = $dir/private/my-ca.key    #CA中心的私钥

RANDFILE        = $dir/private/.rand        # private random number file

x509_extensions = usr_cert              # The extentions to add to the cert

# Comment out the following two lines for the "traditional"

# (and highly broken) format.

name_opt        = ca_default            # Subject Name options

cert_opt        = ca_default            # Certificate field options

# Extension copying option: use with caution.

# copy_extensions = copy

# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs

# so this is commented out by default to leave a V1 CRL.

# crlnumber must also be commented out to leave a V1 CRL.

# crl_extensions        = crl_ext

default_days    = 365               证书有效期,默认365天、防止证书丢失带来风险

default_crl_days= 30                    

30更新一次crl列表 

policy          = policy_match

 # For the CA policy

 [ policy_match ]

 countryName             = match            

#客户端在生成crt时字段必须完全匹配

stateOrProvinceName     = match

organizationName      = match

organizationalUnitName  = optional     #可不一样

commonName              = supplied       

#必须不一样,代表的唯一身份的

emailAddress            = optional

[ req_distinguished_name ]

countryName             = Country Name (2 letter code)  

countryName_default         = CN   

countryName_min            = 2

countryName_max            = 2

stateOrProvinceName         = State or Province Name (full name)

stateOrProvinceName_default      = Beijing

localityName             = Locality Name (eg, city)

localityName_default         = Beijing

0.organizationName          = Organization Name (eg, company)

0.organizationName_default      = bjicc,Inc.

2、生成相关目录和文件

[root@station1 CA]# mkdir {certs,newcerts,crlprivate}

[root@station1 CA]# touch index.txt

[root@station1 CA]# echo 00 >serial

3、生成CA的私钥和公钥

[root@station1 CA]# (umask 077; openssl genrsa -out private/my-ca.key -des3 2048)  #生成CA中心自己的私钥

[root@station1 CA]# openssl req -new -x509 -key private/my-ca.key -days 365 -out my-ca.crt  #根据私钥生成CA中心自己的公钥

[root@station1 CA]# scp my-ca.crt 192.168.32.41:/root/

#CA中心的公钥发送给客户,客户需要根据此公钥确认其他证书的合法性

四、服务器(station2)生成私钥并以此产生一个证书请求文件,CA中心对证书签名

[root@station2 ~]# umask 077;openssl genrsa -out /etc/pki/tls/dovecot.key -des3 2048)   #生成私钥dovecot.key

[root@station2 ~]# openssl req -new -key /etc/pki/tls/dovecot.key -out /etc/pki/tls/dovecot.csr 

#根据私钥来生成证书请求文件,证书请求文件中信息必须和ca中心规定的完全一样

Country Name (2 letter code) [GB]:CN 

#必须与CA中心里的完全一样

State or Province Name (full name) [Berkshire]:Beijing

Locality Name (eg, city) [Newbury]:Beijing

Organization Name (eg, company) [My Company Ltd]: bjicc,Inc.

Organizational Unit Name (eg, section) []:

Common Name (eg, your name or your server's hostname) []:rhce.kvm.com

Email Address []:

[root@station2 ]# openssl req -in /etc/pki/tls/dovecot.csr -noout -text       #查看证书请求文件

[root@rhce ~]#scp dovecot.csr 192.168.32.31:/root/  

#将证书请求文件发送给CA中心

[root@station1 ~]# openssl ca -in dovecot.csr -out dovecot.crt

#CA中心对证书请求文件签名

[root@station1 ~]# scp dovecot.crt 192.168.32.41:/root/

[root@station1 ~]#cp dovect.crt /etc/pki/tls/certs/dovecot.pem 

#将公钥复制成dovecot的公钥

[root@station1 ~]#cp rhce.key /etc/pki/tls/private/dovecot.pem

#rhce自生成的私钥复制成dovecot的私钥

[root@station1 ~]#vi /etc/dovecot.conf  

#dovecot利用CA签发的公钥和自产的私钥进行认证

ssl_cert_file = /etc/pki/tls/certs/dovecot.pem

ssl_key_file = /etc/pki/tls/private/dovecot.pem

sl_key_password = xiaobai  #在生产证书时,设置的对其密码保护

[root@station2 ~]#service dovecot restart 

五、客户端(station6)测试

[root@station6 ~]#scp 192.168.32.31:/etc/pki/CA/my-ca.crt /root/.     #下载CA中心公钥

[root@station6 ~]#mkdir /root/.mutt    #配置mutt环境变量

[root@station6 ~]#mv /root/my-ca.crt /root/.mutt/my-ca.crt

[root@station6 ~]# vi .muttrc    #加入如下行

set certificate_file=~/.mutt/my-ca.crt

[root@station6 ~]# mutt -f impas://[email protected]

#再次打开mutt,证书提示不见了,因为此时的dovecot证书已经过CA中心的签名,mutt已经可以识别了

 

六、证书的吊销

1、在服务器(station2)上查出证书的序列号

[root@station2 ~]#openssl x509 -in /etc/pki/tls/certs/dovecot.pem -noout -serial –subject
2、查看CA中心(station1)里证书的状态:
[root@station1 ~]# more /etc/pki/CA/index.txt   #此时证书状态为 V,表示可用
3CA中心得到证书的序列号和subject就可以定位证书并注销:
[root@station1 ~]#openssl ca -revoke /etc/pki/CA/newcerts/00.pem 

#吊销证书  

[root@station1 ~]#openssl ca -gencrl -out /etc/pki/CA/crl/my-ca.crl 

#更新被吊销证书列表文件此时证书才真正被吊销,index.txt中证书状态变为R,标明revoked
[root@station1 ~]#openssl crl -in my-ca.crl -outform DER -out my-ca-der.crl
# firefoxthunderbird只支持DER格式的crl,所以还需要生成另外一个crl文件
[root@station1 ~]#openssl crl -in my-ca.crl -noout –text  #查看被吊销证书 
最后要求复制my-ca.crlmy-ca-der.crl文件到http服务器,供别人下载,否则客户端仍旧不知道哪些证书被吊销了

七、关键命令
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列表