關(guān)于證書
創(chuàng)建本地證書:
keytool -genkey -alias testserver-keyalg RSA -keystore keystore
其中alias自己起一個別名,keystore為證書庫的文件路徑
還可以加上-keysize 1024、2048、4096等來指定公鑰的大小,由此導(dǎo)出的證書查看時可以看到公鑰的大小是與之一致的。keysize越大genkey時耗費時間越長。
會要求鍵入一個密碼,為這個證書庫的訪問密碼
會要求填寫一些信息,姓名、單位、地區(qū)之類
最后要求鍵入一個密碼,為這條證書別名的密碼
導(dǎo)出cert:
keytool -export -alias testserver-file testcert.cer -keystore keystore
這里的別名和文件名同上一步
Client:
直接導(dǎo)入cert:
Truststore文件中存儲的是作為client,信任那些server的證書。所以需要將server提供的證書導(dǎo)入進(jìn)來(當(dāng)然可以導(dǎo)入n個),client才能信任。
keytool -import -alias testserver-file testcert.cer -keystore truststore
導(dǎo)入時需要輸入密碼,該密碼應(yīng)該是truststore文件的訪問密碼,密碼正確才能修改其信息。
提示是否信任該證書信息,確認(rèn)。
查看證書信息:
keytool –list –v –keystore truststore
如果導(dǎo)入過多個,則可以看到多條entry
刪除某一個證書entry,通過指定別名來刪:
keytool -delete -alias testserver-keystore truststore
上述是自簽名的證書,證書鏈的長度只為1
真正商用時,需要找相關(guān)機(jī)構(gòu)(例如verisign)認(rèn)證通過才能成為有效的證書:
生成證書簽名請求:
keytool -certreq -keyalg RSA -alias testserver -file certreq.csr -keystore keystore
之后能夠收到一個證書文件,證書鏈信息包含了該機(jī)構(gòu)的一些信息,然后再導(dǎo)入。
有兩種方法建立HTTPS連接,
一種是,在java中可以設(shè)置相關(guān)的4個系統(tǒng)參數(shù),指向相關(guān)的keystore,truststore,一旦設(shè)置,在運行時就不可改變了。除非一定要使用多個不同的證書庫文件,否則可以把多個不同證書都導(dǎo)入到同一個證書庫里,這樣,設(shè)置系統(tǒng)參數(shù)為唯一的值也夠用,而且也比較簡單一些。
另一種是,自己繼承相關(guān)接口實現(xiàn)自己的證書管理器,這樣可以自定義相關(guān)行為,也可以load不同的證書庫。
如果不設(shè)置password,就認(rèn)為不檢查文件完整性,也能通過。如果設(shè)置了password,但是不正確,則會遇到密碼錯誤的異常;如果server證書沒有導(dǎo)入到client得信任列表里,則會遇到找不到可信證書的異常。
posted on 2009-07-16 17:27 cerulean 閱讀(583) 評論(0) 編輯 收藏 所屬分類: Java