漫漫運維路——各種加密方式介紹及基於OpenSSL實現HTTPS

一、爲什麼要加密

在網絡中通信有時通信雙方會發送一些比較敏感的信息,如果直接明文在網上傳輸,就可能被居心叵測的人截獲,從而達到其非法的目的。爲保證通信雙方信息傳輸不被第三方所知曉,使用加密技術把雙方傳輸的數據進行加密,即使數據被第三方所截獲,那麼第三方也不會知曉其數據的真實含義。在此,通信雙方所交換的信息中,未被加密的數據稱爲明文,而加密後的數據稱爲密文,加密採用的方式稱作加密密鑰。

二、常見加密方式以及其用途

對稱加密

對稱加密是指在加密通信過程中,把明文加密爲密文的密鑰和把密文解密爲明文的密鑰是同一個,加密時通常把明文切割爲大小固定的數據塊,逐個進行加密,此種加密方式比較簡單,容易被暴力破解。常見的對稱加密算法詳見下表:

算法

特點

DES

64b定長輸出

3DES

使用54b密鑰對數據進行三次加密

Twofish

使用任何長度爲256比特的單個密鑰

AES

可快速加解密,且需要存儲少

非對稱加密往往需要使用多個密碼進行通信,所以導致密鑰分發消耗資源。

非對稱加密

非對稱加密又叫做公鑰加密,顧名思義,就是通信雙方加密和解密使用不同的密鑰,通常使用非對稱加密都有兩個密鑰,一個被稱爲公鑰,一個被稱爲私鑰,私鑰顧名思義,就是由生產的個體自己保留,不外傳,而公鑰則會公開,用於提供給別人加密使用。另外公鑰是從私鑰中提取出來的,所以要有公鑰得先生產私鑰。非對稱加密用途有如下三樣:

身份認證:由於非對稱加密的密鑰通常會成對出現,如果一方使用其私鑰加密一段數據,而另一方用其公鑰能解密,則可確定其身份。

密鑰交換:當通信雙方需要交換密鑰時,如AB發送密鑰,則可把密鑰用B的私鑰進行加密,然後再發給A,只有A才能對其進行解密,所以這樣就確保了其密鑰不被其他用戶獲取。

數據加密:在通信時通信雙方還可以直接使用非對稱加密進行數據加密,但是加密效率不高。

常見算法

特點

RSA

密鑰較長,被破解可能性小

DSA

分組較短、密鑰也比較短

ELGamal

加密過程較爲繁瑣,但比較安全

單向加密

單向加密時加密方式中的另外一種,此類算法只負責加密,不負責解密,在Linux中也比較常見,那就是/etc/shadow中保存用戶密碼的密碼串,那就是使用單向加密算法加密再存放的。單向加密還有一個特性,就是其具有雪崩效應,數據的微小變化會引起加密結果的巨大改變。

使用單向加密,最常見的是用於數據完整性的校驗,數據提供方先生成數據,然後使用單向加密算法計算出特徵碼,然後通過可信的手段傳遞給數據的接收方,並告訴其使用的加密算法和密鑰,然後接收方接收到後使用數據提供方給的加密算法和密鑰對數據再次提取特徵碼,如果所提取的特徵碼和對方提供的一樣,則認爲數據完整。

常見的單向加密算法如下所示:

 

 

算法

特徵

MD5

壓縮性、容易計算、抗修改等

SHA1

512的數據塊大小,分別處理每一數據塊

SHA256

屬於哈希類算法中的一種,其數據塊大小爲256

 

三、實現安全的WEB服務——HTTPS

HTTPS服務中如何確保數據傳輸過程中的安全性

首先考慮如下幾個問題,如何確保通信雙方身份可信?

WEB服務中要想驗證通信雙方的身份,則只有一個辦法,就是由具有公信力的第三方機構爲WEB服務器做公證,證明當前通信的WEB服務器就是我們期望的服務器,要想對WEB服務器進行身份驗證,可使用認證的機制,由證書頒發機構向服務器頒發證書,然後通信時服務器先把證書發給客戶端,客戶端接收到後確認證書的真實有效性後再接收來自服務器端的數據。

接下來面臨第二個問題,如何加密雙方通信數據?

鏈接建立之後,雖然可以驗證服務器的身份,但是數據要在網絡上傳輸就要面臨一個問題,就是要確保其不被別人監聽,所以在此要對數據進行加密。而加密則要讓客戶端和服務器都能高效解密對方所發數據且第三方無法解密,所以在此就要使用公鑰加密算法。首先在服務器向客戶端發送證書的時候,服務器就會生成一對密鑰,並且把公鑰附加在證書上發給客戶端,客戶端接收到並確認服務器身份後,客戶端自己使用對稱加密算法生成密鑰,使用接收到的公鑰加密自己生成的密鑰後發送給服務器端,服務器接收到後使用自己的私鑰進行解密,從而獲取到雙方通信的密鑰,從此雙方就可以使用客戶端生成的密鑰進行加密了。而就算第三方截取到數據也密鑰密鑰,不能解密。

第三個問題,如何確認數據在傳輸過程中未被其他人所修改,在數據傳輸過程中,雖然有了前面的機制,可確保別人無法監聽,但是一旦被截獲,然後第三方雖然看不到其內容,在數據內添加額外數據後再發給客戶端,客戶也無從得知。所以此時就要用種機制能確保數據的完整性。在此可使用單向加密算法,首先數據的傳輸方先使用單向加密算法提取其特徵碼,然後把特徵碼附加到數據的首部,當接收方接收到數據後使用相同的算法再次對數據提取特徵碼,如果和受到的特徵碼一樣,則未被修改,否則則數據可能已被更改。

SSL介紹

SSL Security Socket Layer的縮寫,是一個實現網絡之間加密通信的協議,早期Netscape爲了確保讓TCP/IP協議傳輸信息的安全性,在TCP/IP四層協議的傳輸層之上應用層之下加了半層,從而把從應用層傳下來的數據進行加密然後再發生出去,確保數據在傳輸時不被監聽和截取,並且把該層命名爲了Security Socket Layer,從此就被用作網絡中安全通信的標準。

SSL當前版本爲3.0,現在也主要用於加強WEB瀏覽器和服務器之間的身份認證和數據加密的傳輸。

OpenSSL介紹

OpenSSL是一個功能強大的安全套接字密碼庫,其中包含了最常見的加密算法、常用的證書和證書管理功能及SSL協議等,可使用OpenSSL管理密鑰生成證書,且還可以使用其模仿實現CA的所有功能。

使用OpenSSL+apache可以構建出HTTPS站點,結合數據的通信方式實現過程大致需要幾個步驟,首先建立CA、然後建立WEB服務器並生成證書、然後WEB服務器把證書發送給CA,由CA簽名後回傳給WEB服務器,最後在WEB服務器上安裝模塊,爲HTTPS提供測試首頁即可。

實現HTTPS

由於HTTPS的實現需要對客戶端實現身份認證,所以整個HTTP的會話鏈接會在TCP三次握手後對服務器的證書進行驗證,所以整個實驗基本流程如下圖所示:

wKioL1U5vm7Dq7U3AAEhLIyLAMk155.jpg


1.生成自簽證書

A.生成私鑰

[root@localhost CA]#  (umask 077; openssl genrsa -out private/cakey.pem 2048)


B.生成自簽證書

[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3600
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) [CN]:
State or Province Name (full name) [SiChuan]:
Locality Name (eg, city) [ChengDu]:
Organization Name (eg, company) [wuxiaotao]:
Organizational Unit Name (eg, section) [EDU]:
Common Name (eg, your name or your server's hostname) []:ca.wuxiaotao.com
Email Address []:[email protected]


C.爲CA提供相關配置文件,

[root@localhost CA]# mkdir certts crl netcerts#:若文件已創建則略過
[root@localhost CA]# echo 01 >serial


2.客戶端生成證書

A.在WEB服務器上的/etc/httpd目錄下新建ssl目錄用於存放證書 

[root@localhost etc]# mkdir /etc/httpd/ssl


B.生成私鑰

[root@bogon ssl]#  (umask 077; openssl genrsa -out httpd.key 2048)
生成證書
[root@localhost ssl]#openssl req -new -key httpd.key -out httpd.csr
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) [CN]:
State or Province Name (full name) [SiChuan]:
Locality Name (eg, city) [CHENGDU]:
Organization Name (eg, company) [njsy]:
Organizational Unit Name (eg, section) [EDU]:
Common Name (eg, your name or your server's hostname) []:www.wuxiaotao.com
Email Address []:[email protected]
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:


3.發往客戶端讓CA簽名

 [root@localhost ssl]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /tmp/httpd.crt -days 3600
[root@localhost ssl]# openssl ca -in /etc/httpd/ssl/httpd.csr -out /etc/httpd/ssl/httpd.crt -days 3600
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Apr 24 03:03:51 2015 GMT
            Not After : Mar  2 03:03:51 2025 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = SiChuan
            organizationName          = wuxiaotao
            organizationalUnitName    = EDU
            commonName                = www.wuxiaotao.com
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                A7:CC:C0:D3:10:B3:FD:4F:8B:51:0C:38:91:B1:68:9D:2E:A4:70:FB
            X509v3 Authority Key Identifier: 
                keyid:6E:05:A1:C8:03:E9:77:2D:17:F1:74:FD:81:8D:9E:8D:DE:42:E2:26
 
Certificate is to be certified until Mar  2 03:03:51 2025 GMT (3600 days)
Sign the certificate? [y/n]:y
 
 
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated


修改/etc/httpd.conf.d/ssl.conf的監聽端口爲本地主機ip如下

<VirtualHost 192.168.2.108:443>

ServerName www.wuxiaotao.com:443#:修改虛擬主機名

DocumentRoot "/var/www/wuxiaotao.com"#:虛擬主機目錄

SSLCertificateFile /etc/httpd/ssl/httpd.crt#:***存放位置

SSLCertificateKeyFile /etc/httpd/ssl/httpd.key#:修改私鑰存放位置

新建虛擬主機目錄:

[root@localhost conf.d]# mkdir /var/www/wuxiaotao.com

爲主機提供主頁

[root@localhost conf.d]# echo "hello" >/var/www/wuxiaotao.com/index.html 

windows下打開C:\Windows\System32\drivers\etc添加IP和域名的對應條目

wKiom1U5ujHBsrH2AAOKYaIHeRE448.jpg

重啓httpd服務並測試

 

wKiom1U5un6ije4GAAJadPt7nJM660.jpg


 

 


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