1、爲何要加密html
在網絡中通訊有時通訊雙方會發送一些比較敏感的信息,若是直接明文在網上傳輸,就可能被居心叵測的人截獲,從而達到其非法的目的。爲保證通訊雙方信息傳輸不被第三方所知曉,使用加密技術把雙方傳輸的數據進行加密,即便數據被第三方所截獲,那麼第三方也不會知曉其數據的真實含義。在此,通訊雙方所交換的信息中,未被加密的數據稱爲明文,而加密後的數據稱爲密文,加密採用的方式稱做加密密鑰。算法
2、常見加密方式以及其用途apache
對稱加密windows
對稱加密是指在加密通訊過程當中,把明文加密爲密文的密鑰和把密文解密爲明文的密鑰是同一個,加密時一般把明文切割爲大小固定的數據塊,逐個進行加密,此種加密方式比較簡單,容易被暴力破解。常見的對稱加密算法詳見下表:瀏覽器
算法安全 |
特色bash |
DES服務器 |
64b定長輸出網絡 |
3DESide |
使用54b密鑰對數據進行三次加密 |
Twofish |
使用任何長度爲256比特的單個密鑰 |
AES |
可快速加解密,且須要存儲少 |
非對稱加密每每須要使用多個密碼進行通訊,因此致使密鑰分發消耗資源。
非對稱加密
非對稱加密又叫作公鑰加密,顧名思義,就是通訊雙方加密和解密使用不一樣的密鑰,一般使用非對稱加密都有兩個密鑰,一個被稱爲公鑰,一個被稱爲私鑰,私鑰顧名思義,就是由生產的個體本身保留,不外傳,而公鑰則會公開,用於提供給別人加密使用。另外公鑰是從私鑰中提取出來的,因此要有公鑰得先生產私鑰。非對稱加密用途有以下三樣:
身份認證:因爲非對稱加密的密鑰一般會成對出現,若是一方使用其私鑰加密一段數據,而另外一方用其公鑰能解密,則可肯定其身份。
密鑰交換:當通訊雙方須要交換密鑰時,如A向B發送密鑰,則可把密鑰用B的私鑰進行加密,而後再發給A,只有A才能對其進行解密,因此這樣就確保了其密鑰不被其餘用戶獲取。
數據加密:在通訊時通訊雙方還能夠直接使用非對稱加密進行數據加密,可是加密效率不高。
常見算法 |
特色 |
RSA |
密鑰較長,被破解可能性小 |
DSA |
分組較短、密鑰也比較短 |
ELGamal |
加密過程較爲繁瑣,但比較安全 |
單向加密
單向加密時加密方式中的另一種,此類算法只負責加密,不負責解密,在Linux中也比較常見,那就是/etc/shadow中保存用戶密碼的密碼串,那就是使用單向加密算法加密再存放的。單向加密還有一個特性,就是其具備雪崩效應,數據的微小變化會引發加密結果的巨大改變。
使用單向加密,最多見的是用於數據完整性的校驗,數據提供方先生成數據,而後使用單向加密算法計算出特徵碼,而後經過可信的手段傳遞給數據的接收方,並告訴其使用的加密算法和密鑰,而後接收方接收到後使用數據提供方給的加密算法和密鑰對數據再次提取特徵碼,若是所提取的特徵碼和對方提供的同樣,則認爲數據完整。
常見的單向加密算法以下所示:
算法 |
特徵 |
MD5 |
壓縮性、容易計算、抗修改等 |
SHA1 |
512的數據塊大小,分別處理每一數據塊 |
SHA256 |
屬於哈希類算法中的一種,其數據塊大小爲256 |
3、實現安全的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三次握手後對服務器的證書進行驗證,因此整個實驗基本流程以下圖所示:
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 []:admin@wuxiaotao.com
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 []:www@wuxiaotao.com
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 = www@wuxiaotao.com
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和域名的對應條目
重啓httpd服務並測試