一、对称算法:Hash算法
1、hash算法主要用于保证数据的完整性
2、相同的密码通过hash算法加密后,其hash值也不会一样
[root@station1 ~]# md5sum yum_forAS4.tar.gz
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,crl,private}
[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,表示可用
3、CA中心得到证书的序列号和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
# firefox,thunderbird只支持DER格式的crl,所以还需要生成另外一个crl文件
[root@station1 ~]#openssl crl -in my-ca.crl -noout –text #查看被吊销证书
最后要求复制my-ca.crl和my-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列表
八、GnuPG对数据加密解密
gpg主要用来保证数据的完整性
环境:station2.kvm.com 192.168.32.32
用户:netsword zhxiaoyu
1、生成公私钥
[netsword@station2 .gnupg]$ gpg --gen-key #输入信息,默认即可
请选择您要使用的密钥种类:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (仅用于签名)
(4) RSA (仅用于签名)
您的选择?
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)
您所要求的密钥尺寸是 2048 位
请设定这把密钥的有效期限。
0 = 密钥永不过期
<n> = 密钥在 n 天后过期
<n>w = 密钥在 n 周后过期
<n>m = 密钥在 n 月后过期
<n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)
密钥永远不会过期
以上正确吗?(y/n)y
真实姓名:netsword
电子邮件地址:[email protected]
注释:
您选定了这个用户标识:
“netsword <[email protected]>”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?o
您需要一个密码来保护您的私钥。
[netsword@station2 .gnupg]$ gpg --list-keys #显示公钥
[netsword@station2 .gnupg]$ gpg --list-secret-keys #显示私钥
[zhxiaoyud@station2 .gnupg]$ gpg --gen-key #生成zhxiaoyu的公钥
2、导出、导入公钥
[netsword@station2 .gnupg]$ gpg --export -a netsword >netsword.key
#导出netsword的公钥,要指定用户信息
[zhxiaoyud@station2 .gnupg]$ gpg --export -a zhxiaoyu >zhxiaoyu.key
#导出zhxiaoyu的公钥
[netsword@station2 .gnupg]$ gpg --import zhxiaoyu.key
#导入zhxiaoyu的公钥
[zhxiaoyud@station2 .gnupg]$ gpg --import netsowrd.key
#导入netsword的公钥
3、利用公钥对文件加密、解密
[netsword@station2 .gnupg]$ gpg -ear zhxiaoyu ~/message.txt --output /tmp/message.txt.asc
#加密文件
[zhxiaoyud@station2 .gnupg]$ gpg --output ~/message.txt -d /tmp/message.txt.asc
#解密文件