<b>一、對稱算法:Hash算法</b>
<b></b>
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資料未變修改
<b>二、非對稱算法:數字證書</b>
1、私鑰:用于授權認證
2、公鑰:用于資料加密
<b>三、建立一個CA中心(station1)</b><b></b>
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中心的公鑰發送給客戶,客戶需要根據此公鑰确認其他證書的合法性
<b>四、伺服器(station2)生成私鑰并以此産生一個證書請求檔案,CA中心對證書簽名</b><b></b>
[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
<b>五、用戶端(station6)測試</b>
[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已經可以識别了
<b>六、證書的吊銷</b>
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伺服器,供别人下載下傳,否則用戶端仍舊不知道哪些證書被吊銷了
<b>七、關鍵指令</b>
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清單
<b>八、GnuPG對資料加密解密</b>
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
#解密檔案
本文轉自netsword 51CTO部落格,原文連結:http://blog.51cto.com/netsword/509270