數(shù)字證書就是網(wǎng)絡(luò)通訊中標(biāo)志通訊各方身份信息的一系列數(shù)據(jù),其作用類似于現(xiàn)實(shí)生活中的身份證档泽。它是由一個(gè)權(quán)威機(jī)構(gòu)發(fā)行的,人們可以在互聯(lián)網(wǎng)上用它來(lái)識(shí)別對(duì)方的身份。
證書的格式遵循ITUTX.509國(guó)際標(biāo)準(zhǔn)
一個(gè)標(biāo)準(zhǔn)的X.509數(shù)字證書包含以下一些內(nèi)容:
證書的版本信息胖秒;
證書的序列號(hào),每個(gè)證書都有一個(gè)唯一的證書序列號(hào)慕的;
證書所使用的簽名算法阎肝;
證書的發(fā)行機(jī)構(gòu)名稱,命名規(guī)則一般采用X.500格式肮街;
證書的有效期风题,現(xiàn)在通用的證書一般采用UTC時(shí)間格式,它的計(jì)時(shí)范圍為1950-2049嫉父;
證書所有人的名稱沛硅,命名規(guī)則一般采用X.500格式;
證書所有人的公開密鑰绕辖;
證書發(fā)行者對(duì)證書的簽名摇肌。
1.密碼學(xué)
在密碼學(xué)中,有一個(gè)五元組:{明文引镊、密文朦蕴、密鑰、加密算法弟头、解密算法}吩抓,對(duì)應(yīng)的加密方案稱為密碼體制(或密碼)。
明文:是作為加密輸入的原始信息赴恨,即消息的原始形式所有可能明文的有限集稱為明文空間疹娶。
密文:是明文經(jīng)加密變換后的結(jié)果,即消息被加密處理后的形式伦连,所有可能密文的有限集稱為密文空間雨饺。
密鑰:是參與密碼變換的參數(shù),一切可能的密鑰構(gòu)成的有限集稱為密鑰空間惑淳。
加密算法:是將明文變換為密文的變換函數(shù)额港,相應(yīng)的變換過(guò)程稱為加密,即編碼的過(guò)程歧焦。
解密算法:是將密文恢復(fù)為明文的變換函數(shù)移斩,相應(yīng)的變換過(guò)程稱為解密,即解碼的過(guò)程。
對(duì)稱算法:
加密和解密使用同一密鑰
主要算法包括:DES向瓷、3DES肠套、RC2、RC4
加/解密速度快猖任,但密鑰分發(fā)問(wèn)題嚴(yán)重
非對(duì)稱算法:
不需要首先共享秘密
兩個(gè)密鑰同時(shí)產(chǎn)生:一把密鑰(公鑰)是公開的你稚,任何人都可以得到。另一把密鑰(私人密鑰)只有密鑰的擁有者知道朱躺。
用其中一把密鑰(公鑰或者是私鑰)加密的信息刁赖,只能用另一把打開。
RSA算法长搀,ECC(橢圓曲線)算法
由已知的公鑰幾乎不可能推導(dǎo)出私鑰
強(qiáng)度依賴于密鑰的長(zhǎng)度
很慢-不適合加密大數(shù)據(jù)
公鑰可以廣泛地乾闰、開放地分發(fā)
用于加密,簽名/校驗(yàn)盈滴,密鑰交換
數(shù)字摘要:
把可變輸入長(zhǎng)度串轉(zhuǎn)換成固定長(zhǎng)度輸出串的一種函數(shù)。稱輸出串為輸入串的指紋轿钠,或者數(shù)字摘要巢钓;
不同明文的摘要相同的概要是非常非常小的;而同樣明文其摘要必定一致疗垛;
明文的長(zhǎng)度不固定症汹,摘要的長(zhǎng)度固定。
沒(méi)有密鑰
不可回溯
典型算法:MD5,SHA-1
用于完整性檢測(cè)贷腕,產(chǎn)生數(shù)字簽名
最好的解決方案:
使用對(duì)稱算法加密大的數(shù)據(jù)
每次加密先產(chǎn)生新的隨機(jī)密鑰
使用非對(duì)稱算法交換隨機(jī)產(chǎn)生的密鑰
用非對(duì)稱算法做數(shù)字簽名(對(duì)散列值即摘要做數(shù)字簽名)
四條基本規(guī)則
先簽名背镇,然后加密
加密之前先壓縮
用你自己的私鑰做簽名
用接收者的公鑰做加密
加密:
解密:
怎樣解決4個(gè)通訊安全需求?
私密性 加密
完整性≡笊选瞒斩?
不可否認(rèn)性 涮总?
身份認(rèn)證? 胸囱?
數(shù)字簽名
數(shù)字簽名采用公鑰體制(PKI),即利用一對(duì)互相匹配的密鑰進(jìn)行加密瀑梗、解密烹笔。每個(gè)用戶自己設(shè)定一把特定的僅為本人所知的私有密鑰(私鑰),用它進(jìn)行解密和簽名抛丽;同時(shí)設(shè)定一把公共密鑰(公鑰)并由本人公開谤职,為一組用戶所共享,用于加密和驗(yàn)證簽名亿鲜。當(dāng)發(fā)送一份保密文件時(shí)允蜈,發(fā)送方使用接收方的公鑰對(duì)數(shù)據(jù)加密,而接收方則使用自己的私鑰解密,這樣信息就可以安全無(wú)誤地到達(dá)目的地了陷寝。通過(guò)這種手段保證加密過(guò)程是一個(gè)不可逆過(guò)程锅很,即只有用私有密鑰才能解密。在公開密鑰密碼體制中凤跑,常用的一種是RSA體制爆安。其數(shù)學(xué)原理是將一個(gè)大數(shù)分解成兩個(gè)質(zhì)數(shù)的乘積,加密和解密用的是兩個(gè)不同的密鑰仔引。即使已知明文扔仓、密文和加密密鑰(公開密鑰),想要推導(dǎo)出解密密鑰(私密密鑰)咖耘,在計(jì)算上是不可能的翘簇。按現(xiàn)在的計(jì)算機(jī)技術(shù)水平,要破解目前采用的1024位RSA密鑰儿倒,需要上千年的計(jì)算時(shí)間版保。公開密鑰技術(shù)解決了密鑰發(fā)布的管理問(wèn)題,商戶可以公開其公開密鑰夫否,而保留其私有密鑰彻犁。購(gòu)物者可以用人人皆知的公開密鑰對(duì)發(fā)送的信息進(jìn)行加密,安全地傳送給商戶凰慈,然后由商戶用自己的私有密鑰進(jìn)行解密汞幢。
用戶也可以采用自己的私鑰對(duì)信息加以處理,由于密鑰僅為本人所有微谓,這樣就產(chǎn)生了別人無(wú)法生成的文件森篷,也就形成了數(shù)字簽名。采用數(shù)字簽名豺型,能夠確認(rèn)以下兩點(diǎn):
(1)保證信息是由簽名者自己簽名發(fā)送的仲智,簽名者不能否認(rèn)或難以否認(rèn);
(2)保證信息自簽發(fā)后到收到為止未曾作過(guò)任何修改姻氨,簽發(fā)的文件是真實(shí)文件坎藐。
數(shù)字簽名具體做法是:
(1)將報(bào)文按雙方約定的HASH算法計(jì)算得到一個(gè)固定位數(shù)的報(bào)文摘要。在數(shù)學(xué)上保證:只要改動(dòng)報(bào)文中任何一位哼绑,重新計(jì)算出的報(bào)文摘要值就會(huì)與原先的值不相符岩馍。這樣就保證了報(bào)文的不可更改性。
(2)將該報(bào)文摘要值用發(fā)送者的私人密鑰加密抖韩,然后連同原報(bào)文一起發(fā)送給接收者蛀恩,而產(chǎn)生的報(bào)文即稱數(shù)字簽名。這樣就保證了簽發(fā)者不可否認(rèn)性茂浮。
(3)接收方收到數(shù)字簽名后双谆,用同樣的HASH算法對(duì)報(bào)文計(jì)算摘要值壳咕,然后與用發(fā)送者的公開密鑰進(jìn)行解密解開的報(bào)文摘要值相比較。如相等則說(shuō)明報(bào)文確實(shí)來(lái)自所稱的發(fā)送者顽馋。
數(shù)字證書是如何生成的谓厘?
數(shù)字證書是數(shù)字證書在一個(gè)身份和該身份的持有者所擁有的公/私鑰對(duì)之間建立了一種聯(lián)系,由認(rèn)證中心(CA)或者認(rèn)證中心的下級(jí)認(rèn)證中心頒發(fā)的寸谜。根證書是認(rèn)證中心與用戶建立信任關(guān)系的基礎(chǔ)竟稳。在用戶使用數(shù)字證書之前必須首先下載和安裝。
認(rèn)證中心是一家能向用戶簽發(fā)數(shù)字證書以確認(rèn)用戶身份的管理機(jī)構(gòu)熊痴。為了防止數(shù)字憑證的偽造他爸,認(rèn)證中心的公共密鑰必須是可靠的,認(rèn)證中心必須公布其公共密鑰或由更高級(jí)別的認(rèn)證中心提供一個(gè)電子憑證來(lái)證明其公共密鑰的有效性果善,后一種方法導(dǎo)致了多級(jí)別認(rèn)證中心的出現(xiàn)诊笤。
數(shù)字證書頒發(fā)過(guò)程如下:用戶產(chǎn)生了自己的密鑰對(duì),并將公共密鑰及部分個(gè)人身份信息(稱作P10請(qǐng)求)傳送給一家認(rèn)證中心巾陕。認(rèn)證中心在核實(shí)身份后讨跟,將執(zhí)行一些必要的步驟,以確信請(qǐng)求確實(shí)由用戶發(fā)送而來(lái)鄙煤,然后许赃,認(rèn)證中心將發(fā)給用戶一個(gè)數(shù)字證書,該證書內(nèi)附了用戶和他的密鑰等信息馆类,同時(shí)還附有對(duì)認(rèn)證中心公共密鑰加以確認(rèn)的數(shù)字證書。當(dāng)用戶想證明其公開密鑰的合法性時(shí)弹谁,就可以提供這一數(shù)字證書乾巧。
證書的產(chǎn)生:認(rèn)證中心把用戶證書的基本信息做哈希算法,然后用自己的私鑰對(duì)哈希值進(jìn)行加密预愤。
五.數(shù)字證書是如何分發(fā)的沟于?
CA將證書分發(fā)給用戶的途徑有多種。第一種途徑是帶外分發(fā)(Out-of-band Distribution)植康,即離線方式旷太。例如,密鑰對(duì)是由軟件運(yùn)營(yíng)商代替客戶生成销睁,證書也是由運(yùn)營(yíng)商代替客戶從CA下載供璧,然后把私鑰和下載的證書一起儲(chǔ)存在軟盤里,再交給用戶的冻记。這樣做的好處是免去了用戶上網(wǎng)下載證書的麻煩睡毒。第二種途徑是帶內(nèi)分發(fā)(In-band distribution),即用戶從網(wǎng)上下載數(shù)字證書到自己的電腦中冗栗。下載時(shí)演顾,用戶要向CA出示“參考號(hào)”和“授權(quán)碼”供搀,以向CA證明自己的身份。這樣做成本較低钠至,但對(duì)使用計(jì)算機(jī)不太熟悉的用戶來(lái)說(shuō)葛虐,可能在下載時(shí)會(huì)碰到一些麻煩。除了以上兩種方式外棉钧,CA還把證書集中放置在公共的數(shù)據(jù)庫(kù)中公布屿脐,用戶可以隨用隨查詢隨調(diào)用。
六.數(shù)字證書是如何存儲(chǔ)的掰盘?
數(shù)字證書和私鑰儲(chǔ)存的介質(zhì)有多種摄悯,大致分為硬證書和軟證書±⒉叮可以存儲(chǔ)在計(jì)算機(jī)硬盤奢驯、軟盤、智能卡或USB key里次绘。
1瘪阁、關(guān)于私鑰的唯一性
嚴(yán)格地講,私鑰既然是世上唯一且只由主體本身持有邮偎,它就必須由主體的計(jì)算機(jī)程序來(lái)生成管跺。因?yàn)槿绻趧e處生成將會(huì)有被拷貝的機(jī)會(huì)。然而在實(shí)際應(yīng)用上并非如此禾进,出于某些特殊需要(例如豁跑,如果只有一份私鑰,單位的加密文件就會(huì)因?yàn)殡x職員工帶走 私鑰而無(wú)法解密泻云。)加密用的公/私鑰對(duì)會(huì)要求在可信的第三方儲(chǔ)存其備份艇拍。這樣,加密用的私鑰可能并不唯一宠纯。然而簽名用的私鑰則必須保持唯一卸夕,否則就無(wú)法保證被簽名信息的不可否認(rèn)性。
在生成用戶的密鑰對(duì)時(shí)婆瓜,用于加密的公/私鑰對(duì)可以由CA快集、RA產(chǎn)生,也可以在用戶終端的機(jī)器上用專用的程序(如瀏覽器程序或認(rèn)證軟件)來(lái)產(chǎn)生廉白。用于數(shù)字簽名的密鑰對(duì)原則上只能由用戶終端的程序自行產(chǎn)生个初,才能保證私鑰信息的私密性以及通信信息的不可否認(rèn)性。
有人可能會(huì)產(chǎn)生疑問(wèn):有的加密和簽名的密鑰對(duì)都是由軟件運(yùn)營(yíng)商代替客戶生成的猴蹂,這是否破壞了上述的私鑰唯一性原則呢勃黍?答案是否定的。這時(shí)候晕讲,私鑰的唯一性要依靠法律合同的保證以及操作過(guò)程中相應(yīng)制度的約束覆获,使得不可否認(rèn)性得到支持马澈。出于這種機(jī)制,我們?nèi)匀豢梢哉J(rèn)為弄息,用戶的簽名私鑰是唯一的痊班。
2、證書摹量,私鑰涤伐,到底保護(hù)哪一個(gè)?
我們常常聽到有人說(shuō):“保管好你的軟盤缨称,保管好你的KEY凝果,不要讓別人盜用你的證書∧谰。”有些教科書上也這樣講器净。應(yīng)該說(shuō),這句話是有毛病的当凡。數(shù)字證書可以在網(wǎng)上公開山害,并不怕別人盜用和篡改。因?yàn)樽C書的盜用者在沒(méi)有掌握相應(yīng)的私鑰的情況下沿量,盜用別人的證書既不能完成加密通信浪慌,又不能實(shí)現(xiàn)數(shù)字簽名,沒(méi)有任何實(shí)際用處朴则。而且权纤,由于有CA對(duì)證書內(nèi)容進(jìn)行了數(shù)字簽名,在網(wǎng)上公開的證書也不怕黑客篡改乌妒。我們說(shuō)汹想,更該得到保護(hù)的是儲(chǔ)存在介質(zhì)中的私鑰。如果黑客同時(shí)盜走了證書和私鑰芥被,危險(xiǎn)就會(huì)降臨。
七.如何驗(yàn)證數(shù)字證書坐榆?
以Alice驗(yàn)證Bob證書為例:
校驗(yàn)Bob的證書的合法性
(1)Alice獲得Bob的證書和簽發(fā)Bob證書的CA的證書
(2)用CA的公鑰解密Bob的證書摘要
(3)計(jì)算Bob的證書的摘要
(4)比較這兩個(gè)摘要
(5)校驗(yàn)Bob的證書證書有效期
(6)校驗(yàn)簽發(fā)者簽名(證書鏈)
(7)檢查證書作廢列表(CRL,OCSP)
八.CRL和OCSP是什么拴魄?
證書的有效性取決于兩個(gè)方面因素:第一個(gè)因素是證書有效期:證書的有效期在證書被頒發(fā)之日就已經(jīng)確定了,例如CFCA(中國(guó)金融認(rèn)證中心)規(guī)定個(gè)人證書的有效期是一年(可擴(kuò)展)席镀,企業(yè)證書的有效期是三年匹中。證書的有效期(Validity Period)作為一項(xiàng)內(nèi)容被寫進(jìn)了數(shù)字證書之中,它用兩個(gè)日期——證書開始生效的日期和證書失效的日期來(lái)表示豪诲。顯然顶捷,已經(jīng)過(guò)了有效期的證書不能通過(guò)驗(yàn)證。
證書有效期的設(shè)定是出于安全的考慮屎篱,當(dāng)一張證書有效期將結(jié)束時(shí)服赎,如果想繼續(xù)使用就需要更新葵蒂,證書更新時(shí)將產(chǎn)生新的公私密鑰對(duì),密鑰定期更新對(duì)于證書的安全性是有好處的重虑。
第二個(gè)因素是證書注銷:雖然證書有效期沒(méi)有過(guò)践付,但是如果發(fā)生了特殊情況,例如用戶發(fā)現(xiàn)證書遺失或私鑰失密缺厉,用戶會(huì)向CA/RA提出注銷證書的申請(qǐng)永高,CA/RA經(jīng)過(guò)審核后將實(shí)施證書注銷。那么提针,被注銷的證書也不能通過(guò)驗(yàn)證命爬。 第一種情況比較簡(jiǎn)單辐脖,證書的有效期就寫在了證書之中饲宛,安全認(rèn)證應(yīng)用軟件只要調(diào)出證書的內(nèi)容,判斷一下就知道這張數(shù)字證書當(dāng)前是否還在有效期內(nèi)揖曾÷湮 第二種情況則比較復(fù)雜,證書一旦發(fā)出炭剪,是不可能收回的练链。怎么辦呢?只能申請(qǐng)注銷奴拦。所謂注銷媒鼓,就是要求當(dāng)初頒發(fā)這張證書的單位(CA)出一張告示,宣布某張證書已經(jīng)被注銷作廢错妖,警告有關(guān)的交易者注意绿鸣,不要再使用與這張證書綁定的公鑰。在PKI安全認(rèn)證體系中暂氯,這種“告示”稱為證書注銷列表(或證書撤銷清單潮模、證書注銷清單、證書廢止列表等)痴施,英文原文是Certificate Revocation List擎厢,縮寫為CRL±背裕 對(duì)于第二種情況动遭,安全認(rèn)證應(yīng)用軟件在驗(yàn)證證書的有效性時(shí)就需要去訪問(wèn)證書注銷列表(CRL)。這個(gè)列表相當(dāng)于“黑名單”神得,一旦發(fā)現(xiàn)通信對(duì)方的證書在這張列表中厘惦,就不能通過(guò)驗(yàn)證×ú荆 證書注銷機(jī)制可以防止證書遺失或發(fā)現(xiàn)私鑰失密后宵蕉,不法分子冒用用戶證書酝静、私鑰實(shí)行欺詐交易所帶來(lái)的損失。這和信用卡注銷国裳、有效證件注銷的機(jī)制十分類似形入。 注銷證書的其他原因還包括:銀行方面認(rèn)為證書用戶信用喪失缝左、用戶身份姓名發(fā)生改變亿遂、用戶從他所屬單位離職、崗位和職權(quán)發(fā)生變更等情況渺杉。
CRL的內(nèi)容
根據(jù)X.509標(biāo)準(zhǔn)蛇数,CRL的內(nèi)容和數(shù)據(jù)結(jié)構(gòu)定義如所示:
版本
簽名算法
簽發(fā)者
更新時(shí)間
下一次更新時(shí)間
廢止的證書列表
用戶證書序列號(hào)
廢止時(shí)間
CRL入口擴(kuò)展
CRL的內(nèi)容包括CRL的版本號(hào)、計(jì)算本CRL的數(shù)字簽名所用的算法的標(biāo)識(shí)符(如加密算法RSA是越、數(shù)字摘要算法MD5等算法的標(biāo)識(shí)符)耳舅、頒發(fā)CRL的CA的可識(shí)別名(DN)、CRL的發(fā)布/更新時(shí)間倚评、被注銷證書的列表(僅列出被注銷證書的唯一序列號(hào))以及擴(kuò)展項(xiàng)浦徊。
擴(kuò)展項(xiàng)中的內(nèi)容有:
(1)理由代碼——指出該證書被注銷的理由天梧,如:密鑰損壞盔性、CA損壞、關(guān)系變動(dòng)呢岗、操作終止等冕香;
(2)證書頒發(fā)者——列出該證書頒發(fā)者的名字;
(3)控制指示代碼——用于證書的臨時(shí)凍結(jié)后豫;
(4)失效日期——列出該證書不再有效的日期悉尾。? ? 為了保證CRL的真實(shí)性和完整性,CRL數(shù)據(jù)的后面附有頒發(fā)CRL的CA對(duì)CRL的數(shù)字簽名挫酿。
九.常見的數(shù)字證書格式
1.在Security編程中构眯,有幾種典型的密碼交換信息文件格式:
DER-encoded certificate: .cer, .crt
PEM-encoded message: .pem
PKCS#12 Personal Information Exchange: .pfx, .p12
PKCS#10 Certification Request: .p10
PKCS#7 cert request response: .p7r
PKCS#7 binary message: .p7b
.cer/.crt是用于存放證書,它是2進(jìn)制形式存放的早龟,不含私鑰惫霸。
.pem跟crt/cer的區(qū)別是它以Ascii來(lái)表示。
pfx/p12用于存放個(gè)人證書/私鑰拄衰,他通常包含保護(hù)密碼它褪,2進(jìn)制方式
p10是證書請(qǐng)求
p7r是CA對(duì)證書請(qǐng)求的回復(fù)饵骨,只用于導(dǎo)入
p7b以樹狀展示證書鏈(certificate chain)翘悉,同時(shí)也支持單個(gè)證書,不含私鑰居触。
2.數(shù)字證書文件格式(cer和pfx)的區(qū)別
作為文件形式存在的證書一般有這幾種格式:
1.帶有私鑰的證書
由Public Key Cryptography Standards #12妖混,PKCS#12標(biāo)準(zhǔn)定義老赤,包含了公鑰和私鑰的二進(jìn)制格式的證書形式,以
pfx作為證書文件后綴名制市。
2.二進(jìn)制編碼的證書
證書中沒(méi)有私鑰抬旺,DER 編碼二進(jìn)制格式的證書文件,以cer作為證書文件后綴名祥楣。
3.Base64編碼的證書
證書中沒(méi)有私鑰开财,BASE64 編碼格式的證書文件,也是以cer作為證書文件后綴名误褪≡瘅ⅲ 由定義可以看出,只有pfx格式的數(shù)字證書是包含有私鑰的兽间,cer格式的數(shù)字證書里面只有公鑰沒(méi)有私鑰历葛。在pfx證書的導(dǎo)入過(guò)程中有一項(xiàng)是“標(biāo)志此密鑰是可導(dǎo)出的。這將您在稍候備份或傳輸密鑰”嘀略。一般是不選中的恤溶,如果選中,別人就有機(jī)會(huì)備份你的密鑰了帜羊。如果是不選中咒程,其實(shí)密鑰也導(dǎo)入了,只是不能再次被導(dǎo)出逮壁。這就保證了密鑰的安全孵坚。
如果導(dǎo)入過(guò)程中沒(méi)有選中這一項(xiàng),做證書備份時(shí)“導(dǎo)出私鑰”這一項(xiàng)是灰色的窥淆,不能選卖宠。只能導(dǎo)出cer格式的公鑰。如果導(dǎo)入時(shí)選中該項(xiàng)忧饭,則在導(dǎo)出時(shí)“導(dǎo)出私鑰”這一項(xiàng)就是可選的扛伍。
如果要導(dǎo)出私鑰(pfx),是需要輸入密碼的,這個(gè)密碼就是對(duì)私鑰再次加密词裤,這樣就保證了私鑰的安全刺洒,別人即使拿到了你的證書備份(pfx),不知道加密私鑰的密碼,也是無(wú)法導(dǎo)入證書的吼砂。相反逆航,如果只是導(dǎo)入導(dǎo)出cer格式的證書,是不會(huì)提示你輸入密碼的渔肩。因?yàn)楣€一般來(lái)說(shuō)是對(duì)外公開的因俐,不用加密
3.X.509定義了兩種證書:公鑰證書和屬性證書
PKCS#7和PKCS#12使用的都是公鑰證書
PKCS#7的SignedData的一種退化形式可以分發(fā)公鑰證書和CRL
一個(gè)SignedData可以包含多張公鑰證書
PKCS#12可以包含公鑰證書及其私鑰,也可包含整個(gè)證書鏈
十.數(shù)字證書命名
C(county)? 國(guó)家
O(organization)頒發(fā)機(jī)構(gòu)名稱
OU(Organizational Unit) 組織單位名稱
CN (common name) 持有者的名稱
例如:CN=zhangsan,OU=beijingICBCbank抹剩,O=ICBCbank
十一.證書工具使用
1.KeyTool工具
Java自帶的keytool工具是個(gè)密鑰和證書管理工具撑帖。它使用戶能夠管理自己的公鑰/私鑰對(duì)及相關(guān)證書,用于(通過(guò)數(shù)字簽名)自我認(rèn)證(用戶向別的用戶/服務(wù)認(rèn)證自己)或數(shù)據(jù)完整性以及認(rèn)證服務(wù)澳眷。它還允許用戶儲(chǔ)存他們的通信對(duì)等者的公鑰(以證書形式)胡嘿。keytool 將密鑰和證書儲(chǔ)存在一個(gè)所謂的密鑰倉(cāng)庫(kù)(keystore)中。缺省的密鑰倉(cāng)庫(kù)實(shí)現(xiàn)將密鑰倉(cāng)庫(kù)實(shí)現(xiàn)為一個(gè)文件钳踊。它用口令來(lái)保護(hù)私鑰衷敌。
Java KeyStore的類型
JKS和JCEKS是Java密鑰庫(kù)(KeyStore)的兩種比較常見類型(我所知道的共有5種,JKS, JCEKS, PKCS12, BKS拓瞪,UBER)逢享。
JKS的Provider是SUN,在每個(gè)版本的JDK中都有吴藻,JCEKS的Provider是SUNJCE瞒爬,1.4后我們都能夠直接使用它。
JCEKS在安全級(jí)別上要比JKS強(qiáng)沟堡,使用的Provider是JCEKS(推薦)侧但,尤其在保護(hù)KeyStore中的私鑰上(使用TripleDes)。
PKCS#12是公鑰加密標(biāo)準(zhǔn)航罗,它規(guī)定了可包含所有私鑰禀横、公鑰和證書。其以二進(jìn)制格式存儲(chǔ)粥血,也稱為 PFX 文件柏锄,在 windows中可以直接導(dǎo)入到密鑰區(qū),注意复亏,PKCS#12的密鑰庫(kù)保護(hù)密碼同時(shí)也用于保護(hù)Key趾娃。
BKS 來(lái)自BouncyCastle Provider,它使用的也是TripleDES來(lái)保護(hù)密鑰庫(kù)中的Key缔御,它能夠防止證書庫(kù)被不小心修改(Keystore的keyentry改掉1個(gè) bit都會(huì)產(chǎn)生錯(cuò)誤)抬闷,BKS能夠跟JKS互操作,讀者可以用Keytool去TryTry耕突。UBER比較特別笤成,當(dāng)密碼是通過(guò)命令行提供的時(shí)候,它只能跟keytool交互眷茁。整個(gè)keystore是通過(guò)PBE/SHA1/Twofish加密炕泳,因此keystore能夠防止被誤改、察看以及校驗(yàn)上祈。以前培遵,Sun JDK(提供者為SUN)允許你在不提供密碼的情況下直接加載一個(gè)Keystore挣磨,類似cacerts,UBER不允許這種情況荤懂。