密鑰對,公鑰,證書,私鑰,jks,keystore,truststore,cer,pfx名詞說明

轉載自:網絡地點太多不確定源地址


密鑰:
我理解是公鑰+私鑰的統稱。


密鑰對:
公鑰(證書)和私鑰成對存在。通信雙方各持有自己的私鑰和對方的公鑰。自己的私鑰需密切保護,而公鑰是公開給對方的。在windows下,單獨存在的公鑰一般是後綴爲.cer的文件

A用自己的私鑰對數據簽名,然後把簽名過的數據及原始數據同時發給B,B用A提供的公鑰解籤,解籤後的數據與原始數據如果一致,證明這個數據確實爲A發送來的。如果A想發私密數據給B(該數據不想讓其他人看到),那A應該拿B的公鑰進行加密,將加密數據發送給B,B再拿自己的私鑰解密,解密後的結果即是A想發給B的內容。
私鑰的兩個用途:
1。驗證對方身份:防止其他人假冒對方發送數據給你。
2。解密。
公鑰的兩個用途:
1。表明自己身份:除非第三方有你私鑰,否則無法假冒你發送數據數據給對方。
2。加密。


jks(Java key store):
java用的存儲密鑰的容器。可以同時容納n個公鑰或私鑰,後綴一般是.jks或者.keystore或.truststore等,千奇百怪。不管什麼後綴,它就是一個容器,各個公司或機構叫法不同而已。比如把只包含"受信任的公鑰"的容器存成.truststore文件等。
用jdk\bin目錄下的keytool.exe對其進行查看,導入,導出,刪除,修改密碼等各種操作。可以對jks容器加密碼,輸入正確纔可以操作此容器中密鑰。還有一個密碼的概念與上者不同,是jks中存儲着的私鑰的密碼,通常是絕密的。


pfx:
和jks功能相同但文件格式不同,pfx是瀏覽器用的。
可以用一些工具程序把pfx轉化成jks格式供java程序使用(如銀行只提供了pfx,但是我們想用httpclient模擬瀏覽器自動訪問時)。據說IE導出的pfx格式不標準,轉化jks時往往報錯,可以嘗試用Netscape Navigator導入再導出,然後再轉化。碰到過這樣的情況。

常見的幾種https系統的訪問。經https協議的數據經過加密傳輸,防止第三方監聽,冒充和篡改。
1.不需要用戶做任何操作,比如https://www.verisign.com/
這是因爲此公鑰是合法的(公鑰是可信任的機構頒發,和實際域名吻合,而且沒有到期)。用IE訪問時空白處點右鍵可以查看公鑰信息。
2.https的頁面會彈出公鑰確認提示
公鑰不合法(不是可信任的機構頒發,和實際域名不吻合,已到期),但用戶點“是”即表示忽略危險,繼續訪問。
3.需要往瀏覽器倒入一個文件纔可訪問的
一般是銀行在線交易等特別需要安全的場合,站方(銀行)需要驗證訪客身份(如要確認必須是已註冊的網銀商戶),需要在瀏覽器中導入含有訪客私鑰的pfx文件。


生成jks:
在銀行沒有提供jks文件的情況下對帳,需要自己生成jks
對於1,2類https網站,如果java程序訪問此地址時在jre默認的信任庫中找不到對方證書的頒發機構,則會拋出安全方面的異常。所以要將站方公鑰存進一個jks,並在環境變量中設定,表明信任此庫中的公鑰,纔可以正常訪問。
我是用現成的make_jks的工具類在程序中讀取https://xxxx地址,程序自動抓取出銀行公鑰並存進一個jks文件。
在瀏覽器中查看站方公鑰時,把公鑰導出(一般是cer後綴),然後用keytool.exe手工將此cer導入一個jks或許也可以?沒試過。
以上1,2類https網站,僅僅是用到了公鑰的“驗證對方身份”功能。對於第3種https網站,也可以找到現成的程序把pfx直接轉成jks。既然動用了pfx,一般是把公鑰的兩個用途和私鑰的兩個用途都用起來。

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