加密解密、openssl、私有CA創建過程

一、加密解密

加密技術是對信息進行編碼和解碼的技術,編碼是將原來可讀信息(又稱明文)譯成代碼形式(又稱密文),其逆過程就是解碼(解密),加密技術的要點是加密算法。

明文:發送人、接受人和任何訪問消息的人都能理解的消息

密文:明文消息經過某種編碼,得到的密文消息

加密:將明文消息變成密文消息

解密:將密文消息變成明文消息

算法:取一個輸入文本,產生一個輸出文本

加密算法:發送方進行加密的算法

解密算法:接收方進行解密的算法


單向加密算法:只能加密,不能解密,其作用是提取數據的特徵碼,來驗證數據的完整性

對稱加密算法:加密和解密使用相同的密鑰,其特點是可以將原始數據分割成固定大小的塊,逐個進行加密,缺點是密鑰過多,密鑰分發困難

非對稱加密算法(公鑰加密):密鑰是成對出現,加密和解密使用不同的密鑰

公鑰:公開給所有人    

私鑰(設置權限):自己留存,必須保證其私密性   

特點:用公鑰加密的數據,只能用與之對應的私鑰解密;反之亦然  

功能:身份認證(數字簽名);密鑰交換(公鑰加密作用);數據加密       

常用算法:

RSA :可用於加密和數字簽名的算法,是最具影響力的公鑰加密算法,能夠抵抗目前已知的密碼***

DSA:數字簽名

 單向加密:只能加密,不能解密;提取數據指紋(數據特徵碼:保證數據的完整性)

特性:定長輸出

散列算法,主要驗證數據的完整性,即保證消息在發送之後和接受之前沒有被篡改對於ssl中使用到的散列算法主要有 

md5:是RSA數據安全公司開發的一種單向散列算法

sha1:輸入報文的最大長度不超過264位,產生的輸出是一個160位的報文摘要,輸入是按512位分組進行處理,是不可逆的,防衝突,並具有良好的雪崩效應

 

二、加密技術:

PGP:Pretty Good Privacy,是一個機遇非對稱加密算法RSA公鑰體系的郵件加密技術,不但可以對電子郵件加密,還可以對電子郵件附加數字簽名,使收信人能明確瞭解發信人的真實身份。 

PKI : Public Key Infrastructure,是一種以非對稱加密技術爲核心,可以爲網絡提供安全服務的公鑰基礎設施,PKI技術起初應用在Internet環境中,爲複雜的互聯網系統提供統一的身份認證、數據加密和完整性保障機制,可以有效解決應用中的機密性、完整性、真實性和存儲控制等安全問題,PKI體系包含認證中心(CA),註冊中心(RA)、策略管理、密鑰與證書管理、密鑰備份與恢復、撤銷系統等功能模塊結合在一起。

wKiom1X-C36wj_nxAAKck48VE3w837.jpg

 三、SSL

      Secure Socket Layer ==安全的套接字層,是介於應用層和傳輸層之間,應用層數據不再直接發送給傳輸層,而是先交給ssl層,ssl層對從應用層收到的數據進行加密,並增加自己的ssl頭信息。

OpenSSL是實現ssl的開源項目,它包括 三個組件:  

openssl:多用途的命令行工具

libcrypto:公共加密庫

libssl:庫,實現了ssl及tls等功能   

 wKiom1X-C9rze8ePAAFbNpDCfWc022.jpg

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建立完成,測試即可!!!






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章