一、加密解密
加密技術是對信息進行編碼和解碼的技術,編碼是將原來可讀信息(又稱明文)譯成代碼形式(又稱密文),其逆過程就是解碼(解密),加密技術的要點是加密算法。
明文:發送人、接受人和任何訪問消息的人都能理解的消息
密文:明文消息經過某種編碼,得到的密文消息
加密:將明文消息變成密文消息
解密:將密文消息變成明文消息
算法:取一個輸入文本,產生一個輸出文本
加密算法:發送方進行加密的算法
解密算法:接收方進行解密的算法
單向加密算法:只能加密,不能解密,其作用是提取數據的特徵碼,來驗證數據的完整性
對稱加密算法:加密和解密使用相同的密鑰,其特點是可以將原始數據分割成固定大小的塊,逐個進行加密,缺點是密鑰過多,密鑰分發困難
非對稱加密算法(公鑰加密):密鑰是成對出現,加密和解密使用不同的密鑰
公鑰:公開給所有人
私鑰(設置權限):自己留存,必須保證其私密性
特點:用公鑰加密的數據,只能用與之對應的私鑰解密;反之亦然
功能:身份認證(數字簽名);密鑰交換(公鑰加密作用);數據加密
常用算法:
RSA :可用於加密和數字簽名的算法,是最具影響力的公鑰加密算法,能夠抵抗目前已知的密碼***
DSA:數字簽名
單向加密:只能加密,不能解密;提取數據指紋(數據特徵碼:保證數據的完整性)
特性:定長輸出
散列算法,主要驗證數據的完整性,即保證消息在發送之後和接受之前沒有被篡改對於ssl中使用到的散列算法主要有
md5:是RSA數據安全公司開發的一種單向散列算法
sha1:輸入報文的最大長度不超過264位,產生的輸出是一個160位的報文摘要,輸入是按512位分組進行處理,是不可逆的,防衝突,並具有良好的雪崩效應
二、加密技術:
PGP:Pretty Good Privacy,是一個機遇非對稱加密算法RSA公鑰體系的郵件加密技術,不但可以對電子郵件加密,還可以對電子郵件附加數字簽名,使收信人能明確瞭解發信人的真實身份。
PKI : Public Key Infrastructure,是一種以非對稱加密技術爲核心,可以爲網絡提供安全服務的公鑰基礎設施,PKI技術起初應用在Internet環境中,爲複雜的互聯網系統提供統一的身份認證、數據加密和完整性保障機制,可以有效解決應用中的機密性、完整性、真實性和存儲控制等安全問題,PKI體系包含認證中心(CA),註冊中心(RA)、策略管理、密鑰與證書管理、密鑰備份與恢復、撤銷系統等功能模塊結合在一起。
三、SSL
Secure Socket Layer ==安全的套接字層,是介於應用層和傳輸層之間,應用層數據不再直接發送給傳輸層,而是先交給ssl層,ssl層對從應用層收到的數據進行加密,並增加自己的ssl頭信息。
OpenSSL是實現ssl的開源項目,它包括 三個組件:
openssl:多用途的命令行工具
libcrypto:公共加密庫
libssl:庫,實現了ssl及tls等功能
SSL會話的簡化過程(圖)
(1) 客戶端發送可供選擇的加密方式(需要跟服務器端協商,發送二者都支持的算法),並向服務器請求證書;
(2) 服務器端發送證書以及選定的加密方式給客戶端;
(3) 客戶端取得證書並進行證書驗正:這一步的主要目的是驗證服務器端的公鑰!
如果信任給其發證書的CA:
(a) 驗正證書來源的合法性;用CA的公鑰解密證書上數字簽名;
(b) 驗正證書的內容的合法性:完整性驗正
(c) 檢查證書的有效期限;
(d) 檢查證書是否被吊銷;
(e) 證書中擁有者的名字,與訪問的目標主機要一致;
(4) 客戶端生成臨時會話密鑰(對稱密鑰),並使用服務器端的公鑰加密此數據發送給服務器,完成密鑰交換;
(5) 服務用此密鑰加密用戶請求的資源,響應給客戶端;
四、建立私有CA的過程
CA和申請證書都在同一臺機器上進行的。
1、CA端操作流程
操作步驟:
1、生成私鑰文件;
2、生成自簽署證書;
3、相關輔助文件
touch/etc/pki/CA/index.txt
echo01 > /etc/pki/CA/serial
注:
(1)私鑰用於簽發證書時,向證書添加數字簽名使用;
(2)證書:每個通信方都導入此證書至“受信任的證書頒發機構”;
1)配置文件
/etc/pki/tls/openssl.cnf
####################################################################
[ CA_default ] //定義Openssl做爲CA時自己的相關路徑 dir = /etc/pki/CA //指明CA自己的工作目錄 certs = $dir/certs //已頒發證書的存取位置 crl_dir = $dir/crl //已吊銷證書的吊銷列表表存取位置 database = $dir/index.txt //數據庫的索引文件存放位置 #unique_subject = no // 表示證書的整體信息是不是要唯一 new_certs_dir = $dir/newcerts // 剛簽署的證書存放位置 certificate = $dir/cacert.pem //CA自己的證書(CA給其他人放證之前要先建立自己ID證書文件) serial = $dir/serial //證書的序列號,下一個要發的證書的序列號,每籤一個序列號會自動加1 crlnumber = $dir/crlnumber //吊銷證書列表的編號 crl = $dir/crl.pem //當前正在使用的吊銷鏈 private_key = $dir/private/cakey.pem // CA私鑰存放位置 RANDFILE = $dir/private/.rand //隨機數的獲取位置 x509_extensions = usr_cert //定義了x.509的擴展信息中記錄爲“用戶證書”
2)工作目錄
[root@localhost ~]# ll /etc/pki/CA drwxr-xr-x. 2 root root 4096 Sep 18 04:46 certs //證書文件存放位置 drwxr-xr-x. 2 root root 4096 Oct 15 2014 crl //吊銷列表存放位置 drwxr-xr-x. 2 root root 4096 Sep 18 04:46 newcerts //新證書存放位置 drwx------. 2 root root 4096 Sep 18 03:52 private //CA私鑰存放位置
3)創建CA自己的私鑰
root@localhost CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048) Generating RSA private key, 2048 bit long modulus .....+++ ................+++ e is 65537 (0x10001)
4)生成一個CA的自簽證書
此自簽署證書在/etc/pki/tls/openssl.cnf文件中定義必須放在CA目錄下叫cacert.pem;從私鑰中提取公鑰,並構建成證書籤署請求,然後讓CA給簽署;
格式:openssl req -new -x509-key /etc/pki/CA/private/cakey.pem -out/etc/pki/CA/cacert.pem -days #
-x509:表示自簽署證書,不加表示證書籤署請求;
-key:從那個私鑰中自動提取出公鑰,並創建一個證書籤署請求;
-days:指明給自己簽署證書的有效期
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300 You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- 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]:bengbengtu.com //公司名 Organizational Unit Name (eg, section) []:ops //部門 Common Name (eg, your name or your server's hostname) []:ca.bengbengtu.com //證書主題自己的名字,別人和你通信是就使用此名字來聯繫你,而後你證書中的名字和通信時所使用名字必須要保持一致;否則就認爲證書驗證無法通過; Email Address []:[email protected] //聯繫人郵箱
5)創建輔助文件
[root@localhost CA]# touch index.txt [root@localhost CA]# echo 01 > serial
2、給節點發證書
操作步驟:
1、節點申請證書
在證書申請的主機上進行如下步驟;
(1)生成私鑰
(2)生成證書籤署請求;
(3)把請求發送給CA;
2、CA簽發證書
(1)驗證請求者信息
(2)簽署證書
(3)把簽署好的證書發還給請求者
1)以http目錄爲示例,給http簽署證書:
[root@localhost httpd]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048) [root@localhost httpd]# openssl req -new -key ssl/httpd.key -days 365 -out ssl/httpd.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]:bengbengtu.com Organizational Unit Name (eg, section) []:ops Common Name (eg, your name or your server's hostname) []:www2.bengbengtu.com //此名稱要和證書申請者的FQDN的保持一致 Email Address []:[email protected] Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
#注:以上的國家、省名、城市名要和CA的保持一致
將生成的httpd.csr發送給CA,讓CA給簽證,過程如下
[root@localhost ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/www2.bengbengtu.com.crt -days 365 //簽證
#httpd -M | grep mod_ssl //查看httpd是否裝載mod_ssl,如果沒有請安裝 #yum -y install mod_ssl # vim /etc/httpd/conf.d/ssl.conf <VirtualHost *:443> DocumentRoot "/web/vhosts/www2/" ServerName www2.bengbengtu.com SSLCertificateFile /etc/httpd/ssl/www2.bengbengtu.com.crt SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
至此,CA建立完成,測試即可!!!