引言:為了保證通訊的安全,可以使用數(shù)字證書來(lái)解決身份識(shí)別問(wèn)題。一般通過(guò)證書管理中心(CA),來(lái)申請(qǐng)和獲得數(shù)字證書。在Windows中創(chuàng)建CA服務(wù)器很常見(jiàn),但是,在Linux中,該如何簡(jiǎn)單有效的建立CA證書中心呢?本文介紹在Linux系統(tǒng)中架設(shè)CA證書中心。
為了保證通訊的安全,可以使用數(shù)字證書來(lái)解決身份識(shí)別問(wèn)題。一般通過(guò)證書管理中心(CA),來(lái)申請(qǐng)和獲得數(shù)字證書。但是,證書的申請(qǐng)和處理是需要收費(fèi)的。并且SSL加密連接機(jī)制在實(shí)際工作中應(yīng)用的很廣泛,但凡涉及到SSL安全技術(shù),在服務(wù)器端都必須提供相應(yīng)的數(shù)字證書,否則SSL機(jī)制就無(wú)法工作。在Windows中創(chuàng)建CA服務(wù)器很常見(jiàn),但是,在Linux中,該如何簡(jiǎn)單有效的建立CA證書中心呢?
其實(shí),在Linux中借助于OpenSSL軟件,可以很輕松的搭建CA證書中心。在RHEL 5中自帶了該軟件,例如將其安裝盤中的“openssl-0.9.8b-8.3-el5.rpm”包復(fù)制進(jìn)來(lái),執(zhí)行“rpm–ivh openssl-0.9.8b-8.3-el5.rpm”命令即可安裝。在命令提示符下執(zhí)行“cd/etc/pki/tls/misc”命令,切換到指定目錄,執(zhí)行“./CA-newca”命令,表示創(chuàng)建企業(yè)CA。按提示執(zhí)行操作。
例如, 在“CAcertfication filename (or enter to create)”欄中輸入證書以及私鑰文件名稱,如果點(diǎn)擊回車表示使用默認(rèn)值。 在“Enter PEM pass phrase”欄中輸入密碼,用來(lái)保護(hù)企業(yè)CA私鑰。在“Country Name”欄中輸入國(guó)家代碼。例如“CN”,等。在“A challenge password”和“AN optional company name”欄直接點(diǎn)擊回車跳過(guò),在“Enter pass phrase for”欄中輸入保護(hù)CA私鑰的密碼。在“Certfication Details”欄中依次顯示CA證書內(nèi)容,完成CA證書中心的創(chuàng)建。在“/erc/pki/CA”目錄下創(chuàng)建名為“cacert.pem”文件就是證書文件,在“/etc/pki/CA/private” 目錄下創(chuàng)建的“cakey.pem”即私鑰文件。這里采用的是默認(rèn)值。
例如,當(dāng)某臺(tái)主機(jī)項(xiàng)部署一個(gè)具有HTTPS安全連接能力的網(wǎng)站,來(lái)證明其合法身份,就需要為網(wǎng)站申請(qǐng)一個(gè)證書。這就需要為其生成證書申請(qǐng)單,然后交給CA服務(wù)器來(lái)處理。在命令提示符下執(zhí)行“cd /etc/pki/tls/misc”命令,切換到指定目錄。執(zhí)行“./CA –newreq”命令,表示創(chuàng)建證書申請(qǐng)單。之后該命令以隨機(jī)方式生成私鑰,之后將其保存成名為“newkey.pem”的私鑰文件。在“Enter PEM pass phrase”欄中輸入密碼,用來(lái)對(duì)私鑰進(jìn)行加密。在“Contry Name”欄中輸入國(guó)家名,以下依次輸入網(wǎng)站的信息,這些信息會(huì)保存在所申請(qǐng)的數(shù)字證書中。其具體操作與上述基本相同。當(dāng)生成證書申請(qǐng)單后,在當(dāng)前路徑下會(huì)得到“newreq.pem”和“newkey.pem”文件,前者是申請(qǐng)單文件,后者是私鑰文件。
之后將證書申請(qǐng)單提交給CA服務(wù)器處理,必須將存放在“/etc/pki/tls/misc”目錄中,其名稱必須為“newreq.pem”。執(zhí)行“cd /etc/pki/tls/misc”命令,切換到指定目錄,執(zhí)行“./CA -sign”命令,使用“-sign”參數(shù)表示執(zhí)行證書簽發(fā)操作。根據(jù)命令的提示,在“Enter pass phrase for”欄中輸入CA私鑰的密碼。在“Certification Details”欄中顯示證書申請(qǐng)單的內(nèi)容,便于管理員核對(duì)。當(dāng)核對(duì)無(wú)誤后,在“Sign the certificate?”欄中輸入“y”,表示執(zhí)行憑證簽發(fā)動(dòng)作。在“1 out of 1certificate request certified,commit?”欄中輸入“y”,再次執(zhí)行確認(rèn)操作,執(zhí)行憑證簽發(fā)作業(yè)。之后執(zhí)行具體的簽發(fā)操作。當(dāng)執(zhí)行完畢后,打開(kāi)“/etc/pki/tls/misc”目錄,可以看到名為“newcet.pem”的證書文件。之后將其發(fā)送給申請(qǐng)者即可。在CA服務(wù)器上將上述證書申請(qǐng)單文件以及創(chuàng)建的證書刪除,因?yàn)镃A不需要保存這些文件。需說(shuō)明的是,實(shí)際使用時(shí),對(duì)于RHEL 5.X或者CentOS 5.X來(lái)說(shuō),如果使用的是安裝光盤中提供的OpenSSL軟件包的話,生成的數(shù)字證書只能在Linux平臺(tái)上使用,在Windows中使用會(huì)存在問(wèn)題。對(duì)于RHEL 4.X/6.X或者CentOS 4.X/6.X系統(tǒng)來(lái)說(shuō)不存在這種問(wèn)題。
如需將證書導(dǎo)入到Windows中,需要進(jìn)行轉(zhuǎn)換操作。因?yàn)閃indows并不支持上述格式。假設(shè)生成的證書為“kehu.pem”,私鑰為“kehu.key”。執(zhí)行“openssl pkcs12 export–in kehu.pem–out kehuduan.p12–inkey kehu.key”命令,按照提示輸入私鑰密碼,同時(shí)需要輸入保護(hù)“kehuduan.p12”證書的密碼,該密碼在Windows導(dǎo)入證書時(shí)需要輸入。在Windows 7中點(diǎn)擊“Windows+R”組合鍵,執(zhí)行“mmc”命令,在控制臺(tái)窗口中點(diǎn)擊“Ctrl+M”組合鍵,在彈出窗口中的“可用的管理單元”列表中選擇“證書”項(xiàng),點(diǎn)擊“添加”按鈕,在證書管理界面中選擇“計(jì)算機(jī)賬戶”項(xiàng),在下一步窗口中選擇“本地計(jì)算機(jī)”項(xiàng),點(diǎn)擊完成按鈕返回控制臺(tái)界面。
在控制臺(tái)界面左側(cè)依次選擇“控制臺(tái)根節(jié)點(diǎn)”、“證書(本地計(jì)算機(jī))”、“個(gè)人”項(xiàng),在其右鍵菜單上點(diǎn)擊“所有任務(wù)”、“導(dǎo)入”項(xiàng),在操作向?qū)Ы缑嬷悬c(diǎn)擊下一步按鈕,在“要導(dǎo)入的文件”窗口中點(diǎn)擊瀏覽按鈕,選擇上述“kehuduan.p12”文件。在下一步窗口中輸入保護(hù)密碼,在點(diǎn)擊下一步按鈕,選擇證書存儲(chǔ)位置,這里選擇“個(gè)人”項(xiàng)。點(diǎn)擊完成按鈕,完成證書導(dǎo)入。接下來(lái)需要導(dǎo)入CA證書,在控制臺(tái)左側(cè)依次選擇“控制臺(tái)根節(jié)點(diǎn)”、“證書”(本地計(jì)算機(jī))、“受信任的跟證書頒發(fā)機(jī)構(gòu)”、“證書”項(xiàng),在其右鍵菜單上點(diǎn)擊“所有任務(wù)”、“導(dǎo)入”項(xiàng),在操作向?qū)Ы缑嬷悬c(diǎn)擊下一步按鈕,點(diǎn)擊瀏覽按鈕,選擇CA證書文件,例如“cacert.crt”。由于Windows并不識(shí)別“cacert.pem”文件,需將其更名為“cacert.crt”。在下一步窗口中選擇證書存儲(chǔ)位置,選擇“受信任的根證書頒發(fā)機(jī)構(gòu)”項(xiàng)。點(diǎn)擊“完成”按鈕完成CA證書導(dǎo)入。
簽發(fā)證書目的是為了證明證書內(nèi)公鑰擁有者的合法身份。使用公鑰可以對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密,這些加密數(shù)據(jù)只有使用證書公鑰對(duì)應(yīng)的私鑰才可以解密。如果將私鑰文件遺失,那么得到密鑰的人就可以解密所有的加密數(shù)據(jù)。為避免出現(xiàn)這種情況,最好及時(shí)注銷數(shù)字證書。在注銷之前,必須生成證書注銷清單。執(zhí)行“echo"01" > /etc/pki/CA/crlnumber”命令,用來(lái)生成真是過(guò)戶注銷編號(hào),編號(hào)從01開(kāi)始,每注銷一個(gè)證書該值累加1。執(zhí)行“cd /etc/pki/CA/crl”命令,切換到指定目錄。執(zhí)行“openssl ca gencrl–out crl.pem”命令,生成證書注銷清單。
要注銷某個(gè)證書,必須先獲得這個(gè)證書。這并不需要使用者提供證書文件。當(dāng)在CA服務(wù)器上簽發(fā)證書時(shí),系統(tǒng)會(huì)自動(dòng)在“/etc/pki/CA/newcerts”目錄下保存一個(gè)副本。執(zhí)行“cd/etc/pki/CA/newcerts”,“openssl ca revoke../newcerts/01.pem”,命令,就可以注銷指定編號(hào)的證書,這里注銷的是“01.pem”證書。然后執(zhí)行“openssl ca–gencrl–out crl.pem”命令,重新生成新的證書來(lái)注銷清單。
當(dāng)訪問(wèn)網(wǎng)絡(luò)上的主機(jī)時(shí),可能需要確認(rèn)服務(wù)器的身份,這就要求通過(guò)服務(wù)器的數(shù)字證書來(lái)驗(yàn)證,數(shù)字證書是一種無(wú)法被篡改的數(shù)字信息。例如從HTTPS連接的原理上說(shuō),當(dāng)客戶端對(duì)Web服務(wù)器提出HTTPS連接請(qǐng)求,Web服務(wù)器會(huì)將其存儲(chǔ)的公鑰發(fā)送給客戶端,客戶端的應(yīng)用程序會(huì)隨機(jī)生成一個(gè)會(huì)話密鑰,并使用公鑰對(duì)會(huì)話密鑰進(jìn)行加密,之后將其發(fā)送給Web服務(wù)器。Web服務(wù)器使用私鑰將加密的會(huì)話密鑰解密,這樣,該會(huì)話密鑰就只有客戶端和Web服務(wù)器才擁有。之后彼此之間的傳輸?shù)臄?shù)據(jù)使用會(huì)話密鑰進(jìn)行對(duì)稱加密。
不過(guò)上述方法存在問(wèn)題,因?yàn)闊o(wú)法確認(rèn)目標(biāo)對(duì)象就是真實(shí)的Web主機(jī)。黑客可以篡改HOSTS文件的方法將客戶端劫持到虛假的網(wǎng)站。即使在公鑰上附加了擁有者的信息也無(wú)法證明所連接網(wǎng)站的真實(shí)身份。為提高公信力,可以將證書提交給CA處理,CA會(huì)將其自身的信息加入到證書申請(qǐng)單中,并添加有效期限信息,最后進(jìn)行簽名處理。簽名就是將證書中的網(wǎng)站信息、公鑰信息、CA信息、有效期等內(nèi)容進(jìn)行哈希計(jì)算,將計(jì)算后得到的指紋使用CA私鑰進(jìn)行加密,最后得到數(shù)字證書。
這樣就可以確保網(wǎng)站的合法身份了。在Web服務(wù)器上將網(wǎng)站的證書和私鑰準(zhǔn)備完畢后,當(dāng)客戶端對(duì)該Web服務(wù)器進(jìn)行HTTPS連接請(qǐng)求時(shí),Web服務(wù)器會(huì)將其證書傳送給客戶端主機(jī),當(dāng)客戶端接收到Web服務(wù)器發(fā)來(lái)的證書后,會(huì)執(zhí)行證書的驗(yàn)證操作。驗(yàn)證的方法是將證書中的網(wǎng)站信息、公鑰信息、CA信息、有效期等內(nèi)容進(jìn)行哈希計(jì)算,得到一個(gè)指紋信息。之后從存儲(chǔ)在系統(tǒng)中的CA證書中讀取公鑰信息,對(duì)從Web網(wǎng)站證書中獲得CA私鑰加密,得到另一個(gè)指紋信息。因?yàn)镃A私鑰保存在證書中,而各大CA證書其實(shí)已經(jīng)內(nèi)置在系統(tǒng)中,如果兩者指紋不一致,客戶端的應(yīng)用程序就會(huì)發(fā)出警告信息。如果一致表明驗(yàn)證通過(guò),客戶端會(huì)使用隨機(jī)數(shù)生成會(huì)話密鑰,并且使用證書中的公鑰來(lái)加密會(huì)話密鑰,之后將其發(fā)送給Web服務(wù)器。當(dāng)Web服務(wù)器收到被加密處理后的會(huì)話密鑰后,使用其私鑰將其解密。然后客戶端和Web服務(wù)器之間傳輸?shù)臄?shù)據(jù)都會(huì)使用會(huì)話密鑰進(jìn)行加密處理。