1. 程式人生 > 實用技巧 >加解密、openssl的基本應用及CA的實現過程

加解密、openssl的基本應用及CA的實現過程

一、加密、解密介紹

人類對資訊加密解密由來已久,據可證實的最早資訊加密解密應用可以追溯到公元前2000年的古代埃及,可以說加密解密技術是隨著人類的進步而發展的。

現在網路資訊的觸角無所不到,資訊的安全關係到每一個人切身利益,因此,對網際網路傳輸資訊的加密解密是保證所傳遞資訊的安全和完整必不可少的手段。

現在應用的加解密技術主要分為三種:對稱加密演算法、非對稱加密演算法以及單向加密演算法。

1、對稱加密演算法(Symmetric Algorithm)

該演算法基於這樣的假設:雙方共享一個金鑰,並且使用相同的加密方法和解密方法。1976年以前幾乎所有的加密演算法都基於此,時至今日,對稱金鑰仍然各個領域廣泛應用,特別是在資料解密和訊息完整性檢測方面。

圖解:


clip_p_w_picpath001[4]


A輸出明文,然後用同一個金鑰的對稱演算法進行加密,加密完成後發給B,B得到後用同一個金鑰解密後得到明文。但對稱演算法容易被C複製或篡改

優點:

1、加密、解密雙方使用同一口令(金鑰);

2、加密速度快,分隔成固定大小的塊,逐個進行加密
缺點:
1、金鑰過多(若一方和多方通訊會需要儲存多個密碼);
2、金鑰傳輸交換(交易雙方都使用同樣鑰匙,安全性得不到保證);

常見的對稱加密演算法有:DES、3DES、AES、Blowfish、RC2、RC4、RC5、Twofish, IDEA, RC6, CAST5, Serpent等。

常見工具有:gpg, openssl enc

使用命令

# openssl enc -des3 -a -salt -in /path/from/somefile -out/path/to/somecipherfile

加密 -a:表示已base64的方式加密(對文字檔案一般都用base64的方式)

# openssl enc -d-des3 -a -salt -in /path/from/somecipherfile -out /path/to/somefile

解密 -d:表示解密

2、單向加密

又被稱為不可逆加密演算法,在加密過程中不需要使用金鑰,資料經加密後生成定長密文,且密文無法解密。一般由於資料完整性驗證。

其特點是:密文不可逆且不可預測;定長輸出;相同明文輸入,生成密文相同;雪崩效應(明文的任何微小的變化,都會對生成的密文產生巨大的影響)。

常見的單向加密演算法有:MD5、HMAC、SHA1、SHA512、CRC32等。

常見的工具有:sha1sum, md5sum, cksum, openssl dgst

使用命令:

# openssl dgst [-md5|-sha1] [-out/path/to/filename] /path/from/somefile

網際網路上的資訊加密應用或許我們可以理解為:在通訊的雙方之間建立一條安全通道,其他對這條通道傳輸的資訊是不可理解或不可見的。

3、非對稱加密演算法(Asymmetric Algorithm):

也被稱為公開金鑰加密,有一對加密金鑰和解密金鑰,這一對金鑰是數學相關,使用加密金鑰加密後得到的資訊,只有解密金鑰才能解密。如果真的一個,並不能計 算出另一個。因此如果公開了一個金鑰,並不會危害到另一個金鑰。公開的金鑰被稱為:公鑰(publickey),不公開的金鑰稱為私鑰 (privatekey)。

圖解:

clip_p_w_picpath005[4]


加密過程

第一步:A用單向加密演算法計算出資料的特徵碼(資料指紋)放在資料後面,

第二步:A用自己的私鑰加密 資料特徵碼,並放資料的後面

第三步:A生成一對祕鑰,採用對稱加密對加密過的特徵碼和資料進行加密

第四步:A用B的公鑰再對整個資料加密,放在資料的後面

第五步: 把經過多重加密的資料傳送給B

解密過程:

第一步: B 接收到A 發來的資料,就用自己的私鑰去解密,成功解密,就證明這個資料的確是發給自己的沒錯,

第二步:B 用A生成的密碼解密資料,得到加密的特徵碼與加密的資料

第三步; B 還要用A的公鑰解密,來驗證是否是A發出的這個資料的,用來驗證資料的來源是否是與自己通訊的使用者

第四步:B 用A單向加密的演算法來解密加密的資料的***

第五步:比較得出的特徵碼是否一致,一致則說明資料時完整的,沒被修改過。

優點:可用於金鑰的交換和數字簽名

缺點:不適合加密資料因速度太慢;此機制無法解決的難題是無法確定得到的公鑰就是對方的

常見的演算法有:RSA、EIGamal、DSA等。(RSA:既能加密也能簽名的一種演算法,

DSA: 資料加密演算法,只能用於簽名用的)

常見工具有:gpg, openssl rsautl

使用命令:

例:#openssl genrsa -out/path/to/keyfile NUMBEROFBITS

二、openssl的基本應用

OpenSSL工具包是Linux上SSL v2/v3和TLS v1協議的實現方式之一,並提供了常用的加密解密功能。

OpenSSL主要由三部分組成:

1libcrypto:加密庫,主要用來實現加密、解密的功能庫

2libssl:實現SSL伺服器端功能會話庫

3openssl多功能命令列工具:/usr/bin/openssl(生成金鑰、建立數字證書、手動加密解密資料)

建立CA的前提條件:

使用openssl就可以模擬出來一個自建的CA,在此之前,我們先來看一下openssl工具的的配置檔案/etc/pki/tls/openssl.cnf:

clip_p_w_picpath007

所以接下來我們使用openssl工具建立私有CA時,所涉及到的路徑和檔名需要和配置檔案中預設的保持一致,否則我們就需要同時修改此配置檔案

1、建立私有CA步驟:

1.cd /etc/pki/CA/

為CA自己生成一個私鑰

#(umask 077; openssl genrsa -out private/cakey.pem 2048)

因為私鑰檔案需設定許可權為除屬主外,其他人都不可以讀,即設為600。可使用此命令即可以一步到位地生成私鑰檔案的同時,設定好了許可權。(加括號,意為umask 077命令只對子shell有效,對當前shell無效)

如果想檢視公鑰:

# openssl rsa -in private/cakey.pem -pubout -text -noout

2. CA自簽證書

#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365


引數解釋:

-new 表示新的請求

-x509 表示生成自簽署證書

-key 表示後跟的檔案路徑為私鑰的檔案路徑(從私鑰提取公鑰)

-out 表示存放自簽署證書的位置

-days 表示該證書的有效期天數,(就像***上的有效期一樣)

自建CA的自簽證書的Common Name前面所有的國家、組織等資訊,和證書籤署請求中填寫的必須保持一致。否則自建CA無法簽署。因為這是我們自建的私有CA只能在內部自己使用。

現在自建CA的私鑰檔案cakey.pem和自簽證書cacert.pem都已具備,各種工作目錄certs、crl、newcerts也都已存在,現在就缺少了一個序列號檔案serial和一個數據庫檔案index.txt

下面來建立這幾個檔案(Centos6.5後這些檔案可能不需要手動建立)

#touch index.txt

#echo 01 > serial

此時即建立了自建CA,可以開始給別人簽證了

簽署證書

我們自己建立好的CA所在的主機,接收到別人發來的證書籤署請求後,執行如下命令,即可簽署證書,生成證書檔案。

#openssl ca -in /path/to/certreq.csr -out/path/to/certfile.crt -days 365

CA給別人簽署證書之後,index.txt檔案中即檢視到證書資訊,serial檔案編號也改變。

我們已經有了私有CA了,接下來我們的伺服器則可以向這個CA申請證書了。

2、客戶端申請證書的步驟:

1、自己生成一個私鑰;

#(umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

2、製作一個證書籤署請求;(此過程會自動從私鑰中提取公鑰,並附加上個人資訊)

#openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr

clip_p_w_picpath009

3、把簽署請求檔案傳送給CA服務

利用SCP命令

scp /etc/httpd/ssl/httpd.csr CA伺服器(IP地址)

3、CA簽署證書

1、CA先驗證申請者的資訊,再簽署證書

openssl ca -in /etc/httpd/ssl/httpd.csr –out /etc/httpd/ssl/httpd.crt -days 365

2、傳送給請求者

利用SCP命令

scp /etc/httpd/ssl/httpd.crt 客戶端(IP地址)

4、吊銷證書(當節點出現自己私鑰丟失的情況時需要吊銷證書)

1、 由節點請求吊銷

1)獲取證書serial(序列號)

#openssl x509 –in /etc/httpd/ssl/httpd.crt –noout–serial-subject

2)吊銷證書

# openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

3)生成吊銷證書的編號(如果是第一次吊銷需要生成編號)

#echo 00 > /etc/pki/CA/crlnumber

4)更新證書吊銷列表

# cd /etc/pki/CA/crl

#openssl ca –gencrl crl/thisca.crl

如果需要檢視吊銷列表,使用命令openssl crl –in /path/to/crlfile.crl –noout -text

openssl補充材料:

openssl中有如下字尾名的檔案

.key格式:私有的金鑰

.crt格式:證書檔案,certificate的縮寫

.csr格式:證書籤名請求(證書請求檔案),含有公鑰資訊,certificate signing request的縮寫

.crl格式:證書吊銷列表,Certificate Revocation List的縮寫

.pem格式:用於匯出,匯入證書時候的證書的格式,有證書開頭,結尾的格式

常用證書協議

x509v3: IETF的證書標準

x.500:目錄的標準

SCEP: 簡單證書申請協議,用http來進行申請,資料有PKCS#7封裝,資料其實格式也是PKCS#10的

PKCS#7: 是封裝資料的標準,可以放置證書和一些請求資訊

PKCS#10: 用於離線證書申請的證書申請的資料格式,注意資料包是使用PKCS#7封裝這個資料

PKCS#12: 用於一個單一檔案中交換公共和私有物件,就是公鑰,私鑰和證書,這些資訊進行打包,加密放在儲存目錄中,CISCO放在NVRAM中,使用者可以匯出,以防證書伺服器掛掉可以進行相應恢復。思科是.p12,微軟是.pfx




不足之處還請賜教

轉載於:https://blog.51cto.com/icesnowfq/1551864