當前位置:
首頁 > 最新 > 詳解SSL證書中的keystore

詳解SSL證書中的keystore

什麼是keystore

是java的密鑰庫、用來進行通信加密用的、比如數字簽名。keystore就是用來保存密鑰對的,比如公鑰和私鑰。

在keystore里,包含兩種數據:

密鑰實體(Key entity)——密鑰(secret key)又或者是私鑰和配對公鑰(採用非對稱加密)

可信任的證書實體(trusted certificate entries)——只包含公鑰

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

JDK中keytool常用命令:

-genkey 在用戶主目錄中創建一個默認文件」.keystore」,還會產生一個mykey的別名,mykey中包含用戶的公鑰、私鑰和證書

(在沒有指定生成位置的情況下,keystore會存在用戶系統默認目錄,如:對於window xp系統,會生成在系統的C:Documents and SettingsUserName文件名為「.keystore」)

-alias 產生別名

-keystore 指定密鑰庫的名稱(產生的各類信息將不在.keystore文件中)

-keyalg 指定密鑰的演算法 (如 RSA DSA(如果不指定默認採用DSA))

-validity 指定創建的證書有效期多少天

-keysize 指定密鑰長度

-storepass 指定密鑰庫的密碼(獲取keystore信息所需的密碼)

-keypass 指定別名條目的密碼(私鑰的密碼)

-dname 指定證書擁有者信息 例如: 「CN=名字與姓氏,OU=組織單位名稱,O=組織名稱,L=城市或區域名稱,ST=州或省份名稱,C=單位的兩字母國家代碼」

-list 顯示密鑰庫中的證書信息 keytool -list -v -keystore 指定keystore -storepass 密碼

-v 顯示密鑰庫中的證書詳細信息

-export 將別名指定的證書導出到文件 keytool -export -alias 需要導出的別名 -keystore 指定keystore -file 指定導出的證書位置及證書名稱 -storepass 密碼

-file 參數指定導出到文件的文件名

-delete 刪除密鑰庫中某條目 keytool -delete -alias 指定需刪除的別 -keystore 指定keystore -storepass 密碼

-printcert 查看導出的證書信息 keytool -printcert -file yushan.crt

-keypasswd 修改密鑰庫中指定條目口令 keytool -keypasswd -alias 需修改的別名 -keypass 舊密碼 -new 新密碼 -storepass keystore密碼 -keystore sage

-storepasswd 修改keystore口令 keytool -storepasswd -keystore e:yushan.keystore(需修改口令的keystore) -storepass 123456(原始密碼) -new yushan(新密碼)

-import 將已簽名數字證書導入密鑰庫 keytool -import -alias 指定導入條目的別名 -keystore 指定keystore -file 需導入的證書

生成keyStore

RSA是一個既能用於數據加密也能用於數字簽名的演算法。

DSA(Digital Signature Algorithm,數字簽名演算法,用作數字簽名標準的一部分),它是另一種公開密鑰演算法,它不能用作加密,只用作數字簽名。DSA使用公開密鑰,為接受者驗證數據的完整性和數據發送者的身份。

提取證書:

通過keytool命令我們可以很輕鬆的提取證書.

證書包括主體信息,公鑰.

keytool -export -alias 別名 -keystore 文件名 -file 證書名稱

通過Java的KeyStore類getEntry() 或者getKey()來提取私鑰.

讀取keyStore文件:

char[] password = 「password」.toCharArray();

java.io.FileInputStream fis = new java.io.FileInputStream(「c:/server/server_keystore」);

// 從指定的輸入流中載入此 KeyStore

ks.load(fis, password);

//keystore 中的每一項都用「別名」字元串標識。

//使用指定保護參數獲取指定別名的 keystore Entry。

//KeyStore.PrivateKeyEntry 保存 PrivateKey 和相應證書鏈的 KeyStore 項。

方法1. KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(「keystore別名」, new KeyStore.PasswordProtection(password));

// 返回與給定別名相關聯的密鑰

方法2. PrivateKey key = (PrivateKey) ks.getKey(「ser」, password);

怎麼來驗證提取的私鑰是否正確呢?(因為公鑰私鑰必須成對出現,我們可以通過證書提取去公鑰,然後用公鑰加密,使用剛剛獲得的私鑰解密)

提取證書的方法:

keytool -export -alias 別名 -keystore 文件名 -file 證書名稱

//通過證書,獲取公鑰

CertificateFactory cf = CertificateFactory.getInstance(「X.509」);

FileInputStream in = new FileInputStream(「C:\server\server.cer」);

//生成一個證書對象並使用從輸入流 inStream 中讀取的數據對它進行初始化。

Certificate c = cf.generateCertificate(in);

PublicKey publicKey = c.getPublicKey();

//通過下面這段代碼提取的私鑰是否正確

String before = 「asdf」;

byte[] plainText = before.getBytes(「UTF-8」);

Cipher cipher = Cipher.getInstance(「RSA/ECB/PKCS1Padding」);

cipher.init(Cipher.ENCRYPT_MODE, publicKey);

// 用公鑰進行加密,返回一個位元組流

byte[] cipherText = cipher.doFinal(plainText);

cipher.init(Cipher.DECRYPT_MODE, myPrivateKey);

// 用私鑰進行解密,返回一個位元組流

byte[] newPlainText = cipher.doFinal(cipherText);

SSL證書是HTTP明文協議升級HTTPS加密協議的重要渠道,是網路安全傳輸的加密到通道。關於更多SSL證書的資訊,請關注GDCA(數安時代)。GDCA致力於網路信息安全,已通過WebTrust 的國際認證,是全球可信任的證書籤發機構。GDCA專業技術團隊將根據用戶具體情況為其提供最優的產品選擇建議,並針對不同的應用或伺服器要求提供專業對應的HTTPS解決方案。

文章轉載:https://www.trustauth.cn/wiki/21756.html

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 數安時代GDCA 的精彩文章:

簡述數字簽名證書之數字時間戳
虛擬貨幣:比特幣廣受全球不法分子的青睞
一級域名與二級域名之間的區別
史上最強網路安全大戰,勒索病毒WannaCry席捲全球
SEO新手必備:SEO名詞定義匯總

TAG:數安時代GDCA |