詳細講KeyTool

★ 實例說明 
本實例使用J2SDK提供的keytool工具用默認的密鑰庫和算法創建幾個數字證書。


★運行程序
keytool程序運行時加上命令行參數–genkey即可。
在命令行中輸入“keytool  –genkey”將自動使用默認的算法生成公鑰和私鑰,並以交互方式獲得公鑰持有者的信息。其交互過程如下,其中帶下劃線的字符爲用戶鍵盤輸入的內容,其他爲系統提示的內容


C:\>keytool -genkey
輸入keystore密碼:  123456
您的名字與姓氏是什麼?
[Unknown]: Liao Weimin1
您的組織單位名稱是什麼?
[Unknown]: Network Center
您的組織名稱是什麼?
[Unknown]:  Guangzhou University
您所在的城市或區域名稱是什麼?
[Unknown]:  ZB
您所在的州或省份名稱是什麼?
[Unknown]: Guangzhou
該單位的兩字母國家代碼是什麼
[Unknown]:  CN
CN=Liao Weimin1, OU=Network Center, O=Guangzhou University, L=ZB, ST=Guangzhou, C=CN 正確嗎?
[否]:  是
輸入的主密碼
(如果和 keystore 密碼相同,按回車):  abcdefg
C:\>

以上操作將生成一個公鑰和一個私鑰,這裏並未指定使用何算法,將使用默認的DSA算法。

同時上述操作將創建一個數字證書,證書中包含了新生成的公鑰和一個名字爲“CN=Liao Weimin1, OU=Network Center, O=Guangzhou University, L=ZB, ST=Guangzhou, C=CN”的主體(人或機構)的對應關係。其中“CN=Liao Weimin1, OU=Network Center, O=Guangzhou University, L=ZB, ST=Guangzhou, C=CN”是X.500格式的全名,包含了主體的國家、州、城市、機構、單位和名字。這樣,這個證書將證明相應的公鑰是這個人或機構所擁有的。

以上生成的公鑰、私鑰和證書都保存在用戶的主目錄中創建一個默認的文件“.keystore”中。如果是Windows 2000系統,用戶主目錄是c:\ Documents and Setting\用戶名。

由於“.keystore”中包含了私鑰,所以是一個需要保密的文件,因此上述操作提示爲該文件設置一個密碼:“輸入keystore密碼”,這裏因爲是第一次使用該密鑰庫,因此輸入的密碼“123456”將成爲該默認的密鑰庫的密碼(實際使用時應該設置複雜的口令)。以後再使用這個密鑰庫時必須提供這個口令纔可以使用。

以上操作最後還提示“輸入的主密碼”,這裏“mykey”是默認的別名,使用該名字可以在密鑰庫“.keystore”中找到對應的公鑰、私鑰和證書。此處輸入的密碼是對應於該別名的私鑰的密碼,密鑰庫中每個別名可以使用不同的密碼加以保護。

1.1.2 使用別名
    密鑰庫中可以存放多個條目(公鑰/私鑰對和證書),它們在密鑰庫中以別名(alias)區分。1.1.1小節在使用keytool工具時沒有指定別名,因此係統使用了默認的別名mykey。如果再次運行“keytool –genkey”,則系統將提示“keytool錯誤: java.lang.Exception: 沒有創建鍵值對,別名 已經存在”,因此當密鑰庫中有多個公鑰/私鑰對和證書時,應該使用別名。

★ 實例說明
本實例使用J2SDK提供的keytool工具用在默認的密鑰庫中利用別名增加多個證書。

★運行程序
keytool程序運行時加上命令行參數–alias即可。

在命令行中輸入“keytool  –genkey  –alias  liaoweimin2”將自動使用默認的算法生成別名爲liaoweimin2的公鑰和私鑰,並以交互方式獲得公鑰持有者的信息。其交互過程如下:


C:\>keytool genkey alias liaoweimin2
輸入keystore密碼:  123456
您的名字與姓氏是什麼?
[Unknown]:  Liao Weimin2
您的組織單位名稱是什麼?
[Unknown]:  Network Center
您的組織名稱是什麼?
[Unknown]:  SHU
您所在的城市或區域名稱是什麼?
[Unknown]:  ZB
您所在的州或省份名稱是什麼?
[Unknown]:  SH
該單位的兩字母國家代碼是什麼
[Unknown]:  CN
CN=Liao Weimin2, OU=Network Center, O=SHU, L=ZB, ST=SH, C=CN 正確嗎?
[否]:  是
輸入的主密碼
(如果和 keystore 密碼相同,按回車):

 

 

        其中“輸入keystore密碼:”後面輸入的內容必須和1.1.1小節相同的密碼,否則將無法訪問密鑰庫,並提示如下錯誤:“keytool錯誤: java.io.IOException: Keystore was tampered with, or password was incorrect”,這是因爲1.1.1小節已經爲默認的密鑰庫設置了該密碼,以後使用該密鑰庫都必須提供該密碼。

        在“輸入 的主密碼”的提示後這裏不妨直接按“回車鍵”,這樣該私鑰將使用和密鑰庫相同的密碼“123456”來保護。

        以上操作將在用戶主目錄的“.keystore”文件中增加一對公鑰和私鑰(DSA算法),同時增加一個數字證書,證書中包含了新生成的公鑰和一個名字爲“CN=Liao Weimin2, OU=Network Center, O=Guangzhou University, L=ZB, ST=Guangzhou, C=CN”的主體(人或機構)的對應關係。

1.1.3 使用指定的算法和密鑰庫和有效期
1.1.1和1.1.2小節中使用的是默認的算法和密鑰庫,本節介紹如何自己指定算法和密鑰庫。
★ 實例說明
本實例使用J2SDK提供的keytool工具用RSA算法和在指定的密鑰庫mykeystore中創建公鑰/私鑰對和證書。

★運行程序
keytool的keyalg參數可以指定密鑰的算法,如果需要指定密鑰的長度,可以再加上keysize參數。密鑰長度默認爲1024位,使用DSA算法時,密鑰長度必須在512到1024之間,並且是64的整數倍。

Keytool的-keystore參數可以指定密鑰庫的名稱。密鑰庫其實是存放密鑰和證書的文件,密鑰庫對應的文件如果不存在自動創建。

-validity參數可以指定所創建的證書有效期是多少天。

如在命令行中輸入“keytool genkey alias mytest keyalg RSA keysize 1024 keystore mykeystore validity 4000”將使用RSA算法生成1024位的公鑰/私鑰對及整數,密鑰長度爲1024位,證書有效期爲4000天。使用的密鑰庫爲mykeystore文件。


C:\java\ch5>keytool genkey alias mytest keyalg RSA keysize 1024 keystore mykeystore validity 4000

輸入keystore密碼:  wshr.ut

您的名字與姓氏是什麼?

    [Unknown]:  Liao Weimin

您的組織單位名稱是什麼?

    [Unknown]:  Network Center

您的組織名稱是什麼?

    [Unknown]:  Guangzhou University

您所在的城市或區域名稱是什麼?

    [Unknown]:  ZB

您所在的州或省份名稱是什麼?

    [Unknown]:  Guangzhou

該單位的兩字母國家代碼是什麼

    [Unknown]:  CN

CN=Liao Weimin, OU=Network Center, O=Guangzhou University, L=ZB, ST=Guangzhou, C=CN 正確嗎?

    [否]:  是

輸入的主密碼
(如果和 keystore 密碼相同,按回車):

C:\java\ch5>


由於當前目錄下沒有mykeystore文件,因此以上操作將在當前目錄建立文件名爲mykeystore的文件,並提示輸入一個密碼加以保護:“輸入keystore密碼:”。因爲這裏使用的密鑰庫和1.1.1小節及1.1.2小節不是同一個文件,因此這裏輸入的密碼和1.1.1小節及1.1.2小節沒有必要一致,這裏不妨設置爲“wshr.ut”。這樣,以後再使用這個密鑰庫文件時必須提供該密碼。
        對其中的“輸入的主密碼”,這裏不妨直接按回車鍵,這樣mykeysotre文件中的mytest條目將使用和密鑰庫相同的密碼:“wshr.ut”。
1.2.1 使用Keytool將數字證書導出到文件

★ 實例說明
本實例使用J2SDK提供的keytool工具將指定的證書從密鑰庫導出爲編碼過和沒編碼過兩種格式的文件。
★運行程序
使用keytool的export參數可以將別名指定的證書導出到文件,文件名通過file參數指定。如輸入如下命令:

C:\java\ch5>keytool export alias liaoweimin2 -file liaoweimin2.cer

輸入keystore密碼:  123456


保存在文件中的認證

則將默認密鑰庫中的liaoweimin2條目對應的證書導出到文件liaoweimin2.cer中。由於命令行中沒有用storepass給出密碼,因此屏幕提示輸入keystore密碼。由於證書中不包含私鑰,因此不需要條目的主密碼。

該操作完成後將在當前目錄中創建liaoweimin2.cer文件,該文件即是默認密鑰庫中的liaoweimin2條目對應的證書,它包含了公鑰和主體的對應關係,內容也可以公開。
輸入如下命令則可以指定密鑰庫:


C:\java\ch5>keytool export alias lf file lf.cer keystore lfkeystore –storepass wshr.ut

保存在文件中的認證 
該操作完成後將在當前目錄中創建lf.cer文件。

        如果用文本編輯器打開liaoweimin2.cer或lf.cer,將會發現它是二進制文件,有些內容無法顯示,這不利於公佈證書。在導出證書時加上-rfc參數則可以使用一種可打印的編碼格式來保存證書。如:

C:\java\ch5> keytool export alias mytest file mytest.cer  keystore mykeystore  -storepass wshr.ut -rfc

保存在文件中的認證 
則當前目錄下將增加一個文件mytest.cer,其內容是編碼過的,可以在屏幕上顯示、拷貝或打印。如圖5-2所示。(打印內容不同)

1.2.2 使用Keytool從文件中顯示證書

★ 實例說明
本實例使用J2SDK提供的keytool工具將1.2.3小節導出的證書文件顯示出來。
★運行程序
使用keytool的printcert參數可以將1.2.3小節導出到證書文件詳細內容顯示出來,文件名稱通過file參數指定。如:

C:\java\ch5>keytool printcert file  lf.cer
(見自己的屏幕)
對編碼過的證書可以同樣顯示,如:

C:\java\ch5>keytool printcert file  mytest.cer
(見自己的屏幕)

1.2.3 在Windows中從文件顯示證書
★ 實例說明
本實例在Windows中直接顯示1.2.1小節導出的證書文件。
★運行程序
1.2.3小節導出的證書文件中,只要文件名以.cer爲後綴,Windows操作系統就可以直接識別。如在Windows中雙擊lf.cer圖標,將出現窗口。其中包含了證書的所有者、頒發者、有效期等信息,這些信息和使用keytool顯示出的信息一致。
由於該證書是用自己的私鑰對該證書進行數字簽名的,即自己給自己簽發的證書,因此窗口中顯示警告信息:“該證書發行機構根證書沒受信任”。


本文來自CSDN博客,轉載請標明出處http://blog.csdn.net/Mr_Von/archive/2008/10/17/3089839.aspx


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章