java 證書工具keytool生成自簽名證書和自簽CA證書

jdk自帶的證書管理工具叫keytool游岳,在jdk/bin目錄下声邦,可以用來生成自簽名證書、導(dǎo)入導(dǎo)出證書与学、打印證書信息等。

1. 名詞

自簽名證書:用自己的私鑰簽發(fā)自己的公鑰即主體信息生成的證書嘉抓。
證書簽名:對(duì)證書固定值進(jìn)行hash后用密鑰對(duì)中的私鑰對(duì)hash值加密
keystore:  keytool生成證書的存儲(chǔ)庫索守,用來存儲(chǔ)若干條目,每一條目包含公私鑰抑片,主體信息等卵佛。默認(rèn)為用戶目錄下.keystore,相當(dāng)于一個(gè)有密碼保護(hù)的文件。
truststore: 與keystore格式相同,但是為區(qū)分只用來存放信任的證書截汪,不存密鑰等信息疾牲。

der:證書編碼格式,證書結(jié)構(gòu)體轉(zhuǎn)換為二進(jìn)制格式衙解。
pem:證書編碼格式阳柔,對(duì)der二進(jìn)制編碼的base64字符,包含---begin---,----end----。// 命令中加-rfc可打印和生成此類文件
.csr:證書請(qǐng)求文件格式蚓峦,包含公鑰和主體信息舌剂,發(fā)給ca,ca用私鑰對(duì)內(nèi)容簽名并制作成證書返回暑椰。keytool在生成csr文件時(shí)需要指定證書(即公鑰與主體信息)霍转。
.crt:一般用于linux系統(tǒng)的證書格式,包含公鑰和主體信息一汽。
.cer:一般用于windows的證書文件格式避消,包含公鑰和主體信息。
.p12:證書交換格式召夹,包含公鑰私鑰(私用密碼加密),用于交換傳輸岩喷。

2.具體使用

可以以一個(gè)完整例子來了解keytool命令。在socket或http協(xié)議傳輸數(shù)據(jù)時(shí)戳鹅,如需加密傳輸會(huì)話內(nèi)容,會(huì)在TCP上加上ssl/tls昏兆,http則改為https協(xié)議枫虏。此時(shí)服務(wù)端需要給客戶端提供證書以供客戶端驗(yàn)證并協(xié)商會(huì)話密鑰,如果沒有正規(guī)CA簽發(fā)的證書爬虱,則需自簽名隶债。

客戶端用簽發(fā)證書的根證書驗(yàn)證,如果是自簽名一級(jí)證書跑筝,則客戶端需內(nèi)置此自簽名證書死讹,如果是自簽名二級(jí)證書,則用簽發(fā)它的跟證書驗(yàn)證

  • 生成自簽名證書
keytool -genkeypair -alias golove -keysize 2048 -keyalg RSA -validity 3650 -keystore teststore.jks -storetype JKS
  • genkeypair:生成公私鑰對(duì)條目曲梗,私鑰不可見赞警,公鑰會(huì)以證書格式保存在keystore中。
  • alias: 指定別名虏两,區(qū)分不同條目愧旦,默認(rèn)mykey
  • keysize: 密鑰長度
  • keyalg: 公私鑰算法
  • validity: 證書過期時(shí)間
  • keystore: 指定存儲(chǔ)密鑰庫,若不存在會(huì)創(chuàng)建定罢,若指定則在當(dāng)前文件夾下生成笤虫。默認(rèn)密鑰庫為用戶目錄下.keystore文件
  • storetype: 密鑰庫類型 JKS PKCS等

輸入密鑰庫密碼和本條目密碼都為123456,以及其他主體信息會(huì)生成密鑰對(duì)保存在teststore.jks中。公鑰以證書格式保存琼蚯,帶有主體信息酬凳。此時(shí)證書庫中可以看到公鑰信息(私鑰無法打印)

第一條主體信息:您的姓名與姓氏中填入服務(wù)器域名的完整信息而非name,如:www.golove.com遭庶。

  • 導(dǎo)出自簽名證書
// 如果要生成pem編碼格式的證書直接加上 -rfc參數(shù)即可,證書詳細(xì)信息格式用 -v
keytool -export -alias golove -keystore teststore.jks -file golove.crt

現(xiàn)在可以將此證書分發(fā)給客戶端了宁仔,客戶端做相應(yīng)配置,驗(yàn)證域名或直接跳過驗(yàn)證(因?yàn)槭怯盟陨砉€驗(yàn)證罚拟,不能保證安全性台诗,一般默認(rèn)信任),使用此證書與服務(wù)端交換隨機(jī)數(shù)赐俗。


接下來稍微了解下keystore內(nèi)容并生成一個(gè)跟證書來簽發(fā)二級(jí)證書拉队。

  • 查看keystore中證書條目列表
keytool -list -v -keystore teststore.jks
1.png

再看下剛才根據(jù)此條目導(dǎo)出的自簽證書,導(dǎo)出后已經(jīng)包含了公鑰等其他信息形成了完整證書,但注意verifiedby字段還是自己


3.png
  • 生成證書簽名請(qǐng)求(CSR文件)
keytool -certreq -alias golove -keystore teststore.jks -file temp_go_love.csr

用keystore中g(shù)olove條目生成了證書簽名請(qǐng)求文件temp_go_love.csr阻逮,內(nèi)包含golove條目的公鑰和主體信息粱快,將證書簽名請(qǐng)求文件發(fā)給正規(guī)CA,CA用私鑰對(duì)公鑰和信息簽名后制作成證書文件返回就可以使用了。正規(guī)CA的公鑰瀏覽器內(nèi)置叔扼,所以此時(shí)瀏覽器可以驗(yàn)簽名成功事哭。

但我們要自己模擬CA簽發(fā)二級(jí)證書,CA也是要有公私鑰對(duì),所以先生成CA密鑰對(duì)瓜富。

  • 生成一個(gè)自簽名證書作為CA根證書,名字與姓氏選項(xiàng)這里填入root
keytool -genkeypair -alias rootca -keysize 2048 -keyalg RSA -validity 3650 -keystore teststore.jks -storetype JKS

-使用CA證書給golove證書簽名鳍咱,即用CA的私鑰簽名后與golove的公鑰生成一個(gè)證書

keytool -gencert -alias rootca -keystore teststore.jks -infile temp_go_love.csr -outfile golove_new.crt

此時(shí)已經(jīng)生成了一個(gè)golove_new.crt的二級(jí)證書,以文件形式打開golove.crt和golove_new.crt兩個(gè)證書文件對(duì)比下內(nèi)容与柑。
golove.crt:


3.png

golove_new.crt:


4.png

可以看到簽發(fā)者已經(jīng)變成root,公鑰等其他信息不變谤辜,但簽名值變了,說明已經(jīng)用新的私鑰(root私鑰)替換原有(golove)簽名,在證書信任連上序號(hào)為2价捧,此即二級(jí)證書丑念。

  • 將二級(jí)證書導(dǎo)回teststore庫中,并且直接替換原有別名為golove的條目
keytool -import -v -alias golove -file golove_new.crt -keystore teststore.jks

再次打印證書庫中條目列表可以看到別名為golovet的條目證書鏈變?yōu)?结蟋,發(fā)布者變?yōu)閞oot.


5.png

此時(shí)可以將root證書導(dǎo)出給客戶端內(nèi)置脯倚,服務(wù)端綁定二級(jí)證書,這樣客戶端驗(yàn)證時(shí)可以用根證書驗(yàn)證二級(jí)證書嵌屎。其實(shí)大部分程序直接使用一級(jí)的自簽名證書即可推正,但若需要雙向驗(yàn)證,服務(wù)端驗(yàn)證客戶端時(shí)不同客戶端最好使用服務(wù)端的rootca私鑰來簽發(fā)宝惰,這樣服務(wù)端可以直接用一個(gè)rootca的證書驗(yàn)證舔稀。實(shí)現(xiàn)了動(dòng)態(tài)擴(kuò)展且客戶端的證書不同。
-為了區(qū)分teststore掌测,可以新建一個(gè)只放信任證書内贮,不存儲(chǔ)密鑰的倉庫产园。將剛才的rootca證書和golove二級(jí)證書導(dǎo)入一個(gè)新倉庫(如果為了方便,也可以直接用一個(gè)密鑰庫夜郁,不需要此庫)

// 從teststore導(dǎo)出rootca證書
keytool -export -alias rootca -keystore teststore.jks -file rootca.crt
// 導(dǎo)入rootca證書到新庫
keytool -import -v -file rootca.crt -alias rootca -keystore truststore.jks
// 導(dǎo)入golove證書到新庫
keytool -import -v -file golove_new.crt -alias golove -keystore truststore.jks

keytool 常用命令:

// 以rfc模式打印什燕,即base64可見字符,與pem編碼格式一樣竞端。 -v為詳細(xì)輸出
keytool -printcert -rfc -file rootca.ctr  
// 查看證書庫中證書條目列表 詳細(xì)信息
keytool -list -v -keystore teststore.jks
// 將證書庫中的條目導(dǎo)出為證書文件,如要生成可見字符編碼格式的證書文件 加上 -rfc 參數(shù)即可屎即。
keytool -export -alias rootca -keystore teststore.jks -file rootca.ctr
// 刪除密鑰庫中的條目 
keytool -delete -alias rootca -keystore teststore.keystore
// 修改證書庫密碼,輸入舊密碼或加參數(shù) -storepass 111111
keytool -storepasswd -new 123456 -keystore truststore 
// 修改某條目密碼
keytool -keypasswd -alias myCA -keypass 654321 -new newpass -storepass 123456 -keystore myCALib

還有一個(gè)問題,keytool不能打印出密鑰對(duì)中的私鑰事富,用-list查看密鑰庫列表也沒有完整的私鑰信息技俐。要獲取私鑰,可以在java程序中加載密鑰庫统台,用jdk KeyStore類的相關(guān)方法獲取到公私鑰信息雕擂,然后做加解密的驗(yàn)證等。

有不對(duì)的地方請(qǐng)指出...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贱勃,一起剝皮案震驚了整個(gè)濱河市井赌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贵扰,老刑警劉巖仇穗,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異戚绕,居然都是意外死亡纹坐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門舞丛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耘子,“玉大人,你說我怎么就攤上這事瓷马∷┗梗” “怎么了跨晴?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵欧聘,是天一觀的道長。 經(jīng)常有香客問我端盆,道長怀骤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任焕妙,我火速辦了婚禮蒋伦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焚鹊。我一直安慰自己痕届,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著研叫,像睡著了一般锤窑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嚷炉,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天渊啰,我揣著相機(jī)與錄音,去河邊找鬼申屹。 笑死绘证,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哗讥。 我是一名探鬼主播嚷那,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼忌栅!你這毒婦竟也來了车酣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤索绪,失蹤者是張志新(化名)和其女友劉穎湖员,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑞驱,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡娘摔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了唤反。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凳寺。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖彤侍,靈堂內(nèi)的尸體忽然破棺而出肠缨,到底是詐尸還是另有隱情,我是刑警寧澤盏阶,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布晒奕,位于F島的核電站,受9級(jí)特大地震影響名斟,放射性物質(zhì)發(fā)生泄漏脑慧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一砰盐、第九天 我趴在偏房一處隱蔽的房頂上張望闷袒。 院中可真熱鬧,春花似錦岩梳、人聲如沸囊骤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽也物。三九已至藕各,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焦除,已是汗流浹背激况。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膘魄,地道東北人乌逐。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像创葡,于是被迫代替她去往敵國和親浙踢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 本文轉(zhuǎn)載灿渴,出處如下:數(shù)字證書原理 文中首先解釋了加密解密的一些基礎(chǔ)知識(shí)和概念洛波,然后通過一個(gè)加密通信過程的例子說明了...
    隨安居士閱讀 1,674評(píng)論 1 8
  • 數(shù)字證書就是網(wǎng)絡(luò)通訊中標(biāo)志通訊各方身份信息的一系列數(shù)據(jù),其作用類似于現(xiàn)實(shí)生活中的身份證骚露。它是由一個(gè)權(quán)威機(jī)構(gòu)發(fā)行的蹬挤,...
    拉肚閱讀 21,114評(píng)論 1 17
  • 87年未婚,太原人棘幸,身高175焰扳,活潑開朗,熱愛運(yùn)動(dòng)误续,車房全吨悍,從事金融行業(yè),素食主義者蹋嵌,覓善良育瓜,賢惠,通情達(dá)理栽烂,有愛...
    太原家老馮閱讀 965評(píng)論 0 0
  • 第一章 哈勃望遠(yuǎn)鏡事故 主要內(nèi)容: 1躏仇、哈勃望遠(yuǎn)鏡,引以為傲的0.007秒角穩(wěn)定度系統(tǒng)(17億美元) 2愕鼓、事故的社...
    Jennie夏閱讀 244評(píng)論 2 0
  • 01 大喊“國民黨”的爺爺 上周五騎車路過一處紅燈菇晃,看到交警在查逆行以及電動(dòng)車帶人。有些人沒來得及“跑掉”蚓挤,被交警...
    不悔將來閱讀 375評(píng)論 2 5