使用keytool.exe 生成數字證書


Java 中的 keytool.exe (位於 JDK\Bin 目錄下)可以用來創建數字證書,所有的數字證書是以一條一條(

采用別名區別)的形式存入證書庫的中,證書庫中的一條證書包含該條證書的私鑰,公鑰和對應的數字證書的

信息。證書庫中的一條證書可以導出數字證書文件,數字證書文件只包括主體信息和對應的公鑰。

Keytool是一個Java數據證書的管理工具。

keystore
Keytool將密鑰(key)和證書(certificates)存在一個稱為keystore的文件中在keystore里,包含兩種數

據:
密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(采用非對稱加密)
可信任的證書實體(trusted certificate entries)——只包含公鑰

Alias(別名)
每個keystore都關聯這一個獨一無二的alias,這個alias通常不區分大小寫

keystore的存儲位置
在沒有制定生成位置的情況下,keystore會存在與用戶的系統默認目錄,
如:對於window xp系統,會生成在系統的C:\Documents and Settings\UserName\
文件名為“.keystore”

keystore的生成

代碼示例: 

keytool -genkey  -keysize 1024  -keyalg RSA  -dname "CN=localhost,OU=Inc,O=dept,L=bj,ST=bj,C=cn"  -alias myKeystore  -keypass changeit  -keystore "C:/my.keystore"  -storepass changeit  -validity 360



參數說明:
-genkey表示要創建一個新的密鑰
-dname表示密鑰的Distinguished Names,
CN=commonName
OU=organizationUnit
O=organizationName
L=localityName
S=stateName
C=country
Distinguished Names表明了密鑰的發行者身份
-keyalg使用加密的算法,這里是RSA
-alias密鑰的別名
-keypass私有密鑰的密碼,這里設置為changeit
-keystore 密鑰保存在D:盤目錄下的mykeystore文件中
-storepass 存取密碼,這里設置為changeit,這個密碼提供系統從mykeystore文件中將信息取出
-validity該密鑰的有效期為 180天 (默認為90天)


1,產生一個密鑰對
        keytool -genkey -alias mykeypair -keypass mykeypairpwd
    過程如下:
        admin@note:~/WORK_APP/keytooltest$ keytool -genkey -alias mykeypair -keypass

mykeypairpwd
        輸入keystore密碼: 123456
        您的名字與姓氏是什么?
        [Unknown]: fingki
        您的組織單位名稱是什么?
        [Unknown]: server
        您的組織名稱是什么?
        [Unknown]: server
        您所在的城市或區域名稱是什么?
        [Unknown]: bj
        您所在的州或省份名稱是什么?
        [Unknown]: bj
        該單位的兩字母國家代碼是什么
        [Unknown]: CN
        CN=fingki, OU=server, O=server, L=bj, ST=bj, C=CN 正確嗎?
        [否]: y

        admin@note:~/WORK_APP/keytooltest$
    這樣將產生一個keypair,同時產生一個keystore.默認名是.keystore,存放到user-home目錄
    假如你想修改密碼,可以用:keytool -keypasswd -alias mykeypair -keypass mykeypairpwd -new

newpass

2,產生一個密鑰對,存放在指定的keystore中(加上-keystore 參數)
    keytool -genkey -alias mykeypair -keypass mykeypairpwd -keystore mykeystore
    過程與上面的相同。
    執行完后,在當前目錄下產生一個名為mykeystore的keystore,里面有一個別名為mykeypair的keypair



3,檢查一個keystore中的內容
        keytool -list -v -alias mykeypair -keystore mykeystore
        參數    -v指明要列出詳細信息
                -alias指明列出指定的別名為mykeypair的keypair信息(不指定則列出所有)
                -keystore指明要列出名字為mykeystore的keystore中的信息
    過程如下:
        admin@note:~/WORK_APP/keytooltest$ keytool -list -v -keystore mykeystore
        輸入keystore密碼: 123456

        Keystore 類型: jks
        Keystore 提供者: SUN

        您的 keystore 包含 1 輸入

        別名名稱: mykeypair
        創建日期: 2008-4-16
        輸入類型:KeyEntry
        認證鏈長度: 1
        認證 [1]:
        Owner: CN=fingki, OU=server, O=server, L=bj, ST=bj, C=CN
        發照者: CN=fingki, OU=server, O=server, L=bj, ST=bj, C=CN
        序號: 48058c3c
        有效期間: Wed Apr 16 13:18:52 GMT+08:00 2008 至: Tue Jul 15 13:18:52 GMT+08:00 2008
        認證指紋:
            MD5: FD:C3:97:DC:84:A0:D8:B2:08:6F:26:7F:31:33:C3:05
            SHA1: A3:21:6F:C6:FB:5F:F5:2D:03:DA:71:8C:D3:67:9D:1C:E1:27:A5:11


        *******************************************
        *******************************************


        admin@note:~/WORK_APP/keytooltest$     
4,Keystore的產生:
    當使用-genkey 或-import或-identitydb命令添加數據到一個keystore,而當這個keystore不存在時,產

生一個keystore.默認名是.keystore,存放到user-home目錄.
    當用-keystore指定時,將產生指定的keystore.
5,Keystore的實現:
    Keytool 類位於java.security包下,提供一個非常好的接口去取得和修改一個keystore中的信息. 目前

有兩個命令行:keytool和jarsinger,一個GUI工具Policy 可以實現keystore.由於keystore是公開的,用戶可

以用它寫一些額外的安全應用程序.
    Keystore還有一個sun公司提供的內在實現.它把keystore作為一個文件來實現.利用了一個keystore類型

(格式)"JKS".它用單獨的密碼保護每一個私有鑰匙.也用可能不同的密碼保護整個keystore的完整性.
    支持的算法和鑰匙大小:
    keytool允許用戶指定鑰匙對和注冊密碼服務供應者所提供的簽名算法.缺省的鑰匙對產生算法是"DSA".

假如私有鑰匙是"DSA"類型,缺省簽名算法是"SHA1withDSA",假如私有鑰匙是"RSA"類型,缺省算法

是"MD5withRSA".
    當產生一個DSA鑰匙對,鑰匙必須在512-1024位之間.對任何算法的缺省鑰匙大小是1024位.
6,關於證書
    一個證書是一個實體的數字簽名,還包含這個實體的公共鑰匙值.
        公共鑰匙 :是一個詳細的實體的數字關聯,並有意讓所有想同這個實體發生信任關系的其他實體知道

.公共鑰匙用來檢驗簽名;
        數字簽名:是實體信息用實體的私有鑰匙簽名(加密)后的數據.這條數據可以用這個實體的公共鑰

匙來檢驗簽名(解密)出實體信息以鑒別實體的身份;        
        簽名:用實體私有鑰匙加密某些消息,從而得到加密數據;
        私有鑰匙:是一些數字,私有和公共鑰匙存在所有用公共鑰匙加密的系統的鑰匙對中.公共鑰匙用來加

密數據,私有鑰匙用來計算簽名.公鑰加密的消息只能用私鑰解密,私鑰簽名的消息只能用公鑰檢驗簽名。
        實體:一個實體可以是一個人,一個組織,一個程序,一台計算機,一個商業,一個銀行,或其他你想信任

的東西.
    實際上,我們用[1]中的命令已經生成了一個自簽名的證書,沒有指定的參數都使用的是默認值。
    我們也可以用如下命令生成一個自簽名的證書:
        keytool -genkey -dname "CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN" -alias myCA -

keyalg RSA -keysize 1024 -keystore myCALib -keypass 654321 -storepass 123456 -validity 3650
        這條命令將生成一個別名為myCA的自簽名證書,證書的keypair的密碼為654321,證書中實體信息為

"CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN",存儲在名為myCALib的keystore中(如果 沒有將自動

生成一個),這個keystore的密碼為123456,密鑰對產生的算法指定為RSA,有效期為10年。
7,將證書導出到證書文件
    keytool -export -alias myCA -file myCA.cer -keystore myCALib -storepass 123456 -rfc
    使用該命令從名為myCALib的keystore中,把別名為myCA的證書導出到證書文件myCA.cer中。(其中-

storepass指定keystore的密碼,-rfc指定以可查看編碼的方式輸出,可省略)。

8,通過證書文件查看證書信息
    keytool -printcert -file myCA.cer
9,密鑰庫中證書條目口令的修改
    Keytool -keypasswd -alias myCA -keypass 654321 -new newpass -storepass 123456 -keystore

myCALib
10,刪除密鑰庫中的證書條目
    keytool -delete -alias myCA -keystore myCALib
11,把一個證書文件導入到指定的密鑰庫
    keytool -import -alias myCA -file myCA.cer -keystore truststore
    (如果沒有名為truststore的keystore,將自動創建,將會提示輸入keystore的密碼)
12,更改密鑰庫的密碼
    keytool -storepasswd -new 123456 -storepass 789012 -keystore truststore
    其中-storepass指定原密碼,-new指定新密碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM