簡述:
重要的數據在互聯網中進行傳輸的時候必須保證數據的安全性,需從四個方面來做:
1.保證數據是從真正的源發送的,而不是其他人(源認證)
2.保證數據在傳輸的過程中沒有被篡改過(數據的完整性)
3.保證數據在傳輸的過程中別人看不懂(數據的私密性)
4.保證數據的不可否認性(不可否認性)
加密算法
1、對稱加密
概念:加密和解密使用同一個秘鑰
算法:DES、3DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5等
優點:效率高;將數據分割成固定大小的塊,逐個進行加密
缺點:每一個通信就需要一個秘鑰;秘鑰傳遞不安全;無法確定數據來源
2、非對稱加密
公鑰與私鑰:公鑰是公開給所有人的;私鑰是只有自己知道;通過私鑰可以推算出公鑰,但是通過私鑰無法退出公鑰;使用公鑰加密必須使用私鑰解密,或者使用私鑰加密必須使用公鑰解密;公私鑰必須成對出現
算法:RSA、DSA、ELGamal
優缺點:可以實現數字簽名來驗證數據來源;可以安全的交換對稱秘鑰;可以實現時間加密,但是對應大的數據解密時效率太低,適合加密少量數據
3、單向散列(hash)
特性:
1)雪崩效應:數據不同,摘要一定大不同
2)單向:不可反推數據
3)摘要長度固定大小
算法:md5:128、sha1:160、sha224、sha256、sha384、sha512
功能:用來驗證數據的完整性
4、秘鑰交換算法(DH)
1)A和B協商生成公開的整數a,大素數p
2)A:生成隱私數據 :x(x<p),計算得出 a^x%p,發送給B;B:生成隱私數據 :y(y<p),計算得出 a^y%p,發送給A
3)A:計算得出 [(a^y%p)^x] %p = a^xy%p,生成為密鑰;B:計算得出 [(a^x%p)^y] %p = a^xy%p,生成為密鑰
5、在安全通信過程中:
Alice:
1)原數據通過hash算法得出一個摘要;
2)用Alice的私鑰加密摘要;
3)將加密的摘要和原數據一塊使用對稱秘鑰加密;
4)再用BOB的公鑰將對稱秘鑰加密;
5)密文數據發送————>
Bob:
1)<————接受密文數據;
2)使用Bob的私鑰解密對稱秘鑰;
3)使用對稱秘鑰解密原數據和加密后的摘要;
4)使用Alice的公鑰解密摘要;
5)計算原數據的hash摘要並和解密后的摘要進行比較,從而確定原始數據的完整性。
CA和證書
數字證書認證機構(Certificate Authority,縮寫為CA),也稱為電子商務認證中心、電子商務認證授權機構,是負責發放和管理數字證書的權威機構,並作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。
PKI:公開密鑰基礎建設,包括簽證機構(CA)、注冊機構(RA)、證書吊銷列表(CRL)以及證書存取庫。
X.509:定義了證書的結構以及認證協議標准,包括版本號、序列號、簽名算法、頒發者、有效期限、主體名稱、主體公鑰、CRL分發點、擴展信息、發行者簽名等信息
CA證書頒發機構分根CA和子CA,根ca的證書為自簽證書,然后再為子CA頒發證書;用戶只要信任了根CA的證書則就是信任了子CA頒發的證書。
相關配置文件:/etc/pki/tls/openssl.cnf
#################################################################### [ ca ] default_ca = CA_default #默認CA,在一台服務器可以搭建多個CA [ CA_default ] #默認CA的配置 dir = /etc/pki/CA #工作目錄 certs = $dir/certs #存放證書 crl_dir = $dir/crl #存放證書吊銷列表 database = $dir/index.txt #數據庫索引文件,需要手動創建 new_certs_dir = $dir/newcerts #新證書的路徑 certificate = $dir/cacert.pem #CA的證書文件 serial = $dir/serial #下一個要頒發的證書序列號,16進制 crlnumber = $dir/crlnumber #下一個要吊銷的證書序列號 crl = $dir/crl.pem #證書吊銷列表 private_key = $dir/private/cakey.pem#CA的私鑰文件 RANDFILE = $dir/private/.rand #生成私鑰需要用到的隨機數文件
default_days = 365 #默認頒發證書的有效期 default_crl_days= 30 #30天發布一次證書吊銷列表 default_md = sha256 # preserve = no # policy = policy_match #策略匹配,定義客戶端和服務端申請證書時的信息匹配策略 [ policy_match ] countryName = match #必須匹配 stateOrProvinceName = match organizationName = match organizationalUnitName = optional #不要求必須匹配 commonName = supplied #必須提供 emailAddress = optional
示例:搭建一個私有CA
服務端搭建:
1、生成CA的私鑰
# (umask 066; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
2、生成自簽證書
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650 Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijing Organization Name (eg, company) [Default Company Ltd]:test Organizational Unit Name (eg, section) []:it Common Name (eg, your name or your server's hostname) []:ca.test.com Email Address []:
- -new: 生成新證書簽署請求
- -x509: 專用於CA生成自簽證書
- -key: 生成請求時用到的私鑰文件
- -days n:證書的有效期限,單位是day,默認是365天
- -out /PATH/TO/SOMECERTFILE: 證書的保存路徑
3、創建必要的文件
# touch /etc/pki/CA/index.txt # echo 01 >/etc/pki/CA/serial
# openssl x509 -in /etc/pki/CA/cacert.pem -noout -text [-subject | -issuer | -dates] 查看證書信息
客戶端生成注冊申請請求:
1、生成私鑰
# (umask 077; openssl genrsa -out app.key 1024)
2、生成簽署請求
# openssl req -new -key app.key -out app.csr Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:beijing Locality Name (eg, city) [Default City]:beijing Organization Name (eg, company) [Default Company Ltd]:test Organizational Unit Name (eg, section) []:it Common Name (eg, your name or your server's hostname) []:app.test.com Email Address []: A challenge password []: An optional company name []:
3、將簽署請求發送給CA
# scp app.csr 192.168.0.7:/etc/pki/CA/
服務器端簽署:
1、簽署頒發
# openssl ca -in /etc/pki/CA/app.csr -out /etc/pki/CA/certs/app.crt -days 100
2、將簽署后的證書發回客戶端
# scp /etc/pki/CA/certs/app.crt 192.168.0.6:/root
CA吊銷證書的管理
復制代碼 生成吊銷列表 [root@centos7 CA]# echo 01 >/etc/pki/CA/crlnumber [root@centos7 CA]# openssl ca -gencrl -out crl.pem 查看吊銷列表 [root@centos7 CA]# openssl crl -in crl.pem -noout -text 查看證書狀態 [root@centos7 CA]# cat index.txt V(正常證書) 180826054533Z 01 unknown /C=CN/ST=BJ/O=test/OU=it/CN=www.test.com [root@centos7 CA]# openssl ca -status 01 Using configuration from /etc/pki/tls/openssl.cnf 01=Valid (V)(正常證書) 吊銷證書 [root@centos7 CA]# openssl ca -revoke newcerts/01.pem [root@centos7 CA]# cat index.txt R (已被吊銷) 180826054533Z 180518060712Z 01 unknown
/C=CN/ST=BJ/O=test/OU=it/CN=www.test.com
管理工具
gpg:GunPG
- -c file:加密文件
- -o file -d file.gpg:解密文件
- --gen-key:生成非對稱秘鑰
- --list-keys:查看已有公鑰
- -e -r keyname file:使用指定公鑰加密文件
- --import filename.pubkey:導入公鑰
- -a --export -o filename.pubkey:導出公鑰
- --delete-secret-keys keyname:刪除私鑰
- --delete-keys keyname:刪除公鑰
# rngd -r /dev/urandom #提供隨機數來生成秘鑰
openssl:
多用途的工具集
openssl可以實現:秘鑰證書管理、對稱加密和非對稱加密
生成隨機數需要用到的標准命令為 rand