隨着計算機技術的不斷髮展,新的存儲方式、新的網絡結構將層出不窮,相應的商務應用環節也會發生翻天覆地的變化,緊隨其後的安全問題也會“窮追不捨”。雖然我們可以通過各種技術相應提高企業應用的安全性,但這些技術統統基於密碼學理論。同樣,密碼學並不是固若金湯般的堅不可摧,密碼學的破解每一天都有發生。我們應當合理使用各種安全技術,使其有機結合、優勢互補,確保企業應用具有更高的安全性。
本博文主要介紹數據加密解密過程與搭建私有CA流程。
專業術語:
明文(Cleartext,Plaintext):最初要發送的原始信息,可以是文本文件、圖片文件、二進制數據等。
密文(Ciphertext):被加密信息轉換後得到的信息。
加密(Encryption):將明文轉換爲密文的過程。基於數學方法的程序和保密的密鑰對信息進行編碼,把計算機數據變成一堆難以理解的字符串。
解密(Decryption):加密的逆過程,將密文轉換爲明文的過程。
算法(Algorithm):加密或解密時所採用的一組規則。
密鑰(Key):在加密(或解密)過程中使用的可變參數稱爲密鑰。
加密算法(Encryption Algorithm):指將明文轉換爲密文的算法。
加密密鑰(Encryption Key):指通過加密算法進行加密操作用的密鑰。
解密算法(Decryption Algorithm):指將密文轉換爲明文的算法。
解密密鑰(Decryption Key):指通過解密算法進行解密操作用的密鑰。
密碼算法和協議:
對稱加密、 公鑰加密、 單向加密、 認證協議:
對稱加密算法:
對稱加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密算法
簡介:
數據發信方將明文(原始數據)和加密密鑰一起經過特殊加密算法處理後,使其變成複雜的加密密文發送出去。
收信方收到密文後,若想解讀原文,則需要使用加密用過的密鑰及相同算法的逆算法對密文進行解密,才能使其恢復成可讀明文。
在對稱加密算法中,使用的密鑰只有一個,發收信雙方都使用這個密鑰對數據進行加密和解密,這就要求解密方事先必須知道加密密鑰。
加密過程:
A和B通信,雙方會先協商共用哪一密鑰,之後A用某一算法和協商好的密鑰去加密數據發給B;
B收到數據後也用同一算法和協商的密鑰便可將數據還原成明文。在這個過程中最大的難題就是如何將密碼安全的告知另一方即密鑰交換的問題。
用於此機制的算法:DES(56)、3DES、AES (128,192,256,384,512)、Blowfish、Twofish、RC6、IDEA、CAST5
特性:
1、加密、解密雙方使用同一口令(密鑰);
2、加密速度快,分隔成固定大小的塊,逐個進行加密
缺陷:
1、密鑰過多(若一方和多方通信會需要存儲多個密碼);
2、密鑰傳輸交換(交易雙方都使用同樣鑰匙,安全性得不到保證);
密鑰交換、身份驗正、數據完整性
公鑰加密:
也叫非對稱(密鑰)加密(public key encryption)
公鑰加密就是密碼的生成是成對的,即公鑰加密的數據只能用與之匹對的私鑰才能解密;而私鑰加密的數據也只能用與之匹對的公鑰才能解密。
而且要清楚的是公鑰是可以公開的但私鑰是不成公開的只有生成密鑰對的人才有否則安全性蕩然無存。
密鑰:public key, secret key
p/s
公鑰:其密鑰長度
身份認證:
密鑰交換
常用於此機制加密算法:
RSA、 DSA、EIGamal
優點:可用於密鑰的交換和數字簽名
缺點:不適合加密數據因速度太慢;此機制無法解決的難題是無法確定得到的公鑰就是對方的
實現密鑰交換同時又可加密的過程:
A先生成一個對稱密鑰然後用此密鑰加密要發給B的數據,在再已加過密的數據的後面附上用B的公鑰加密的密鑰然後發給B;
B收到數據後先用自己的私鑰解密出密鑰再用密鑰將數據還原成明文; 之後B也採用此方式與A通信。
這樣就很好的避免了密碼交換的問題但是又出現的問題是無法保證得到的公鑰就是要通信方的公鑰 用對方的公鑰加密對稱密鑰這樣只有對方的私鑰可以解密這樣就很好的實現了密碼交換
而用自己的私鑰加密某數據的特徵碼便很好的實現了數字簽名
單向加密:
是不可解密的加密方法,我們稱之爲單向加密算法。我們通常只把他們作爲加密的基礎。
單身加密一般用於數據庫中用戶信息的加密。當用戶創建一個新的賬號或者密碼時,他的信息不是直接保存到數據庫中,而是經過一次加密以後再保存,這樣即使這些信息被泄露,也不能立即得知這些信息的真正含義。
特點:
定長輸出:不管加密的數據多長都會定長輸出
雪崩效應:數據微小的變化就會導致結果的巨大變化
不可逆轉:無法將得到的數據在逆着解密;
算法:MD5、SHA1、SHA256、SHA384、SHA512
數據加密與解密過程
加密過程:
1、使用單向加密算法加密明文數據,生成一個特徵碼。保證了數據的完整性。
2、Bob用自己的私鑰加密特徵碼,附在明文數據後面(使之成爲一個新數據),保證了身份認證。
3、Bob利用對稱加密算法對所有的數據加密。
4、Bob再用Alice的公鑰(通過可靠的手段獲取,第三方認證機構CA)對生成的密鑰進行加密。
解密過程:
1、使用Alice的私鑰先解密獲取密鑰。
2、用得到的密鑰去解密加密了的數據和特徵碼。
3、使用Bob的公鑰去解密特徵碼,得到在Bob發送數據的特徵碼。
4、Alice用同樣的加密算法去計算數據的特殊碼
5、再比較3,4步中的特徵碼是否一致。
三種算法結合,以實現可靠的通信(保證數據的完整性,私密性,用戶認證)
在上面的介紹中,雖然用到了衆多加密算法,但公鑰是在網絡中傳輸,雙方無法驗證其可信度,則需要第三方權威認證機構(CA)才能保障
使用Openssl搭建私有CA流程
常見文件後綴名的命名:
.key格式:私有的密鑰
.crt格式:證書文件,certificate的縮寫
.csr格式:證書籤名請求(證書請求文件),含有公鑰信息,certificate signing request的縮寫
.crl格式:證書吊銷列表,Certificate Revocation List的縮寫
.pem格式:用於導出,導入證書時候的證書的格式,有證書開頭,結尾的格式
openssl建立私有CA:
1、生成密鑰
2、自簽署證書
節點:
1、生成密鑰對兒
2、生成證書籤署請求
3、把請求發送給CA
CA:
1、驗正請求者信息;
2、簽署證書;
3、把簽好的證書發送給請求者;
一、建立CA服務器:
1、生成密鑰
# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
1 # (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048) 2 Generating RSA private key, 2048 bit long modulus 3 ......+++ 4 .........................................+++ 5 e is 65537 (0x10001)
2、自簽證書
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655
req: 生成證書籤署請求
-news: 新請求
-key /path/to/keyfile: 指定私鑰文件
-out /path/to/somefile:
-x509: 生成自簽署證書
-days n: 有效天數
1 # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/ 2 CA/cacert.pem -days 3650 3 You are about to be asked to enter information that will be incorporated 4 into your certificate request. 5 What you are about to enter is what is called a Distinguished Name or a DN. 6 There are quite a few fields but you can leave some blank 7 For some fields there will be a default value, 8 If you enter '.', the field will be left blank. 9 ----- 10 Country Name (2 letter code) [XX]:cn #國家 11 State or Province Name (full name) []:hn #省份 12 Locality Name (eg, city) [Default City]:zz #市區 13 Organization Name (eg, company) [Default Company Ltd]:luo #組織名稱 14 Organizational Unit Name (eg, section) []:tech #部門 15 Common Name (eg, your name or your server's hostname) []:stu19.magedu.com #服務器名稱 16 Email Address []:[email protected] #郵件地址
3、初始化工作環境
# touch /etc/pki/CA/{index.txt,serial}
# echo 01 > /etc/pki/CA/serial
1 # touch /etc/pki/CA/{index.txt,serial} 2 # echo 01 > /etc/pki/CA/serial
二、節點申請證書:
(一) 節點生成請求
1、生成密鑰對兒
# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)
本文中,CA和節點在同一臺主機
1 mkdir /etc/httpd/ssl 2 cd /etc/httpd/ssl 3 # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) 4 Generating RSA private key, 2048 bit long modulus 5 ...............+++ 6 ......................................................+++ 7 e is 65537 (0x10001)
2、生成證書籤署請求
# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr
1 # openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr 2 You are about to be asked to enter information that will be incorporated 3 into your certificate request. 4 What you are about to enter is what is called a Distinguished Name or a DN. 5 There are quite a few fields but you can leave some blank 6 For some fields there will be a default value, 7 If you enter '.', the field will be left blank. 8 ----- 9 Country Name (2 letter code) [XX]:cn 10 State or Province Name (full name) []:hn 11 Locality Name (eg, city) [Default City]:zz 12 Organization Name (eg, company) [Default Company Ltd]:luo 13 Organizational Unit Name (eg, section) []:tech 14 Common Name (eg, your name or your server's hostname) []:test19.magedu.com 15 Email Address []: 16 17 Please enter the following 'extra' attributes 18 to be sent with your certificate request 19 A challenge password []: 20 An optional company name []:
3、把簽署請求文件發送給CA服務
# scp httpd.csr UserName@IP:/path
(二) CA簽署證書
1、驗正證書中的信息;
2、簽署證書
# openssl ca -in /path/to/somefile.csr -out /path/to/somefile.crt -days N
1 # openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 300 2 Using configuration from /etc/pki/tls/openssl.cnf 3 Check that the request matches the signature 4 Signature ok 5 Certificate Details: 6 Serial Number: 1 (0x1) 7 Validity 8 Not Before: Aug 1 07:51:51 2014 GMT 9 Not After : May 28 07:51:51 2015 GMT 10 Subject: 11 countryName = cn 12 stateOrProvinceName = hn 13 organizationName = luo 14 organizationalUnitName = tech 15 commonName = test19.magedu.com 16 X509v3 extensions: 17 X509v3 Basic Constraints: 18 CA:FALSE 19 Netscape Comment: 20 OpenSSL Generated Certificate 21 X509v3 Subject Key Identifier: 22 CC:E6:26:6D:B1:EB:23:F6:7D:2E:47:82:3D:3D:C4:02:76:6C:31:DE 23 X509v3 Authority Key Identifier: 24 keyid:26:E7:D9:94:88:D4:2F:88:D2:AF:2C:C1:9A:B9:26:5E:D9:F1:E2:62 25 26 Certificate is to be certified until May 28 07:51:51 2015 GMT (300 days) 27 Sign the certificate? [y/n]:y 28 29 30 1 out of 1 certificate requests certified, commit? [y/n]y 31 Write out database with 1 new entries 32 Data Base Updated
3、發送給請求者;
1 [root@stu19 pki]# ls /etc/httpd/ssl/httpd. 2 httpd.crt httpd.csr httpd.key