為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴
發(fā)表日期:2018-12 文章編輯:小燈 瀏覽次數(shù):2543
引言
使用HTTP(超文本傳輸)協(xié)議訪問互聯(lián)網(wǎng)上的數(shù)據(jù)是沒有經(jīng)過加密的。也就是說,任何人都可以通過適當(dāng)?shù)墓ぞ邤r截或者監(jiān)聽到在網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)流。但是有時(shí)候,我們需要在網(wǎng)絡(luò)上傳輸一些安全性或者私秘性的數(shù)據(jù),譬如:包含信用卡及商品信息的電子訂單。這個(gè)時(shí)候,如果仍然使用HTTP協(xié)議,勢(shì)必會(huì)面臨非常大的風(fēng)險(xiǎn)!相信沒有人能接受自己的信用卡號(hào)在互聯(lián)網(wǎng)上裸奔。
HTTPS(超文本傳輸安全)協(xié)議無(wú)疑可以有效的解決這一問題。所謂HTTPS,其實(shí)就是HTTP和SSL/TLS的組合,用以提供加密通訊及對(duì)網(wǎng)絡(luò)服務(wù)器的身份鑒定。HTTPS的主要思想是在不安全的網(wǎng)絡(luò)上創(chuàng)建一安全信道,防止黑客的竊聽和攻擊。
SSL(安全套接層)可以用來對(duì)Web服務(wù)器和客戶端之間的數(shù)據(jù)流進(jìn)行加密。
SSL利用非對(duì)稱密碼技術(shù)進(jìn)行數(shù)據(jù)加密。加密過程中使用到兩個(gè)秘鑰:一個(gè)公鑰和一個(gè)與之對(duì)應(yīng)的私鑰。使用公鑰加密的數(shù)據(jù),只能用與之對(duì)應(yīng)的私鑰解密;而使用私鑰加密的數(shù)據(jù),也只能用與之對(duì)應(yīng)的公鑰解密。因此,如果在網(wǎng)絡(luò)上傳輸?shù)南⒒驍?shù)據(jù)流是被服務(wù)器的私鑰加密的,則只能使用與其對(duì)應(yīng)的公鑰解密,從而可以保證客戶端與與服務(wù)器之間的數(shù)據(jù)安全。
數(shù)字證書(Certificate)
在HTTPS的傳輸過程中,有一個(gè)非常關(guān)鍵的角色——數(shù)字證書,那什么是數(shù)字證書?又有什么作用呢?
所謂數(shù)字證書,是一種用于電腦的身份識(shí)別機(jī)制。由數(shù)字證書頒發(fā)機(jī)構(gòu)(CA)對(duì)使用私鑰創(chuàng)建的簽名請(qǐng)求文件做的簽名(蓋章),表示CA結(jié)構(gòu)對(duì)證書持有者的認(rèn)可。數(shù)字證書擁有以下幾個(gè)優(yōu)點(diǎn):
使用數(shù)字證書能夠提高用戶的可信度
數(shù)字證書中的公鑰,能夠與服務(wù)端的私鑰配對(duì)使用,實(shí)現(xiàn)數(shù)據(jù)傳輸過程中的加密和解密
在證認(rèn)使用者身份期間,使用者的敏感個(gè)人數(shù)據(jù)并不會(huì)被傳輸至證書持有者的網(wǎng)絡(luò)系統(tǒng)上
X.509證書包含三個(gè)文件:key,csr,crt。
key是服務(wù)器上的私鑰文件,用于對(duì)發(fā)送給客戶端數(shù)據(jù)的加密,以及對(duì)從客戶端接收到數(shù)據(jù)的解密
csr是證書簽名請(qǐng)求文件,用于提交給證書頒發(fā)機(jī)構(gòu)(CA)對(duì)證書簽名
crt是由證書頒發(fā)機(jī)構(gòu)(CA)簽名后的證書,或者是開發(fā)者自簽名的證書,包含證書持有人的信息,持有人的公鑰,以及簽署者的簽名等信息
備注:在密碼學(xué)中,X.509是一個(gè)標(biāo)準(zhǔn),規(guī)范了公開秘鑰認(rèn)證、證書吊銷列表、授權(quán)憑證、憑證路徑驗(yàn)證算法等。
創(chuàng)建自簽名證書的步驟
注意:以下步驟僅用于配置內(nèi)部使用或測(cè)試需要的SSL證書。
第1步:生成私鑰
使用openssl工具生成一個(gè)RSA私鑰
1$?openssl?genrsa?-des3?-out?server.key?2048
說明:生成rsa私鑰,des3算法,2048位強(qiáng)度,server.key是秘鑰文件名。
注意:生成私鑰,需要提供一個(gè)至少4位的密碼。
第2步:生成CSR(證書簽名請(qǐng)求)
生成私鑰之后,便可以創(chuàng)建csr文件了。
此時(shí)可以有兩種選擇。理想情況下,可以將證書發(fā)送給證書頒發(fā)機(jī)構(gòu)(CA),CA驗(yàn)證過請(qǐng)求者的身份之后,會(huì)出具簽名證書(很貴)。另外,如果只是內(nèi)部或者測(cè)試需求,也可以使用OpenSSL實(shí)現(xiàn)自簽名,具體操作如下:
1$?openssl?req?-new?-key?server.key?-out?server.csr
說明:需要依次輸入國(guó)家,地區(qū),城市,組織,組織單位,Common Name和Email。其中Common Name,可以寫自己的名字或者域名,如果要支持https,Common Name應(yīng)該與域名保持一致,否則會(huì)引起瀏覽器警告。
1
2
3
4
5
6
7
Country?Name?(2?letter?code)?[AU]:CN
State?or?Province?Name?(full?name)?[Some-State]:Beijing
Locality?Name?(eg,?city)?[]:Beijing
Organization?Name?(eg,?company)?[Internet?Widgits?Pty?Ltd]:joyios
Organizational?Unit?Name?(eg,?section)?[]:info?technology
Common?Name?(e.g.?server?FQDN?or?YOUR?name)?[]:demo.joyios.com
Email?Address?[]:liufan@joyios.com
第3步:刪除私鑰中的密碼
在第1步創(chuàng)建私鑰的過程中,由于必須要指定一個(gè)密碼。而這個(gè)密碼會(huì)帶來一個(gè)副作用,那就是在每次Apache啟動(dòng)Web服務(wù)器時(shí),都會(huì)要求輸入密碼,這顯然非常不方便。要?jiǎng)h除私鑰中的密碼,操作如下:
1
2
cp?server.key?server.key.org
openssl?rsa?-in?server.key.org?-out?server.key
第4步:生成自簽名證書
如果你不想花錢讓CA簽名,或者只是測(cè)試SSL的具體實(shí)現(xiàn)。那么,現(xiàn)在便可以著手生成一個(gè)自簽名的證書了。
需要注意的是,在使用自簽名的臨時(shí)證書時(shí),瀏覽器會(huì)提示證書的頒發(fā)機(jī)構(gòu)是未知的。
1$?openssl?x509?-req?-days?365?-in?server.csr?-signkey?server.key?-out?server.crt
說明:crt上有證書持有人的信息,持有人的公鑰,以及簽署者的簽名等信息。當(dāng)用戶安裝了證書之后,便意味著信任了這份證書,同時(shí)擁有了其中的公鑰。證書上會(huì)說明用途,例如服務(wù)器認(rèn)證,客戶端認(rèn)證,或者簽署其他證書。當(dāng)系統(tǒng)收到一份新的證書的時(shí)候,證書會(huì)說明,是由誰(shuí)簽署的。如果這個(gè)簽署者確實(shí)可以簽署其他證書,并且收到證書上的簽名和簽署者的公鑰可以對(duì)上的時(shí)候,系統(tǒng)就自動(dòng)信任新的證書。
第5步:安裝私鑰和證書
將私鑰和證書文件復(fù)制到Apache的配置目錄下即可,在Mac 10.10系統(tǒng)中,復(fù)制到/etc/apache2/目錄中即可。