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