天天看點

HTTPS之密鑰知識與密鑰工具Keytool和Keystore-Explorer生成一個密鑰對生成CSR檔案導出一個cert檔案導入一個cert檔案檢視cert清單詳情轉換JKS格式為P12

HTTPS之密鑰知識與密鑰工具Keytool和Keystore-Explorer

1 簡介

之前文章《Springboot整合https原來這麼簡單》講解過一些基礎的密碼學知識和Springboot整合HTTPS。本文将更深入講解密鑰知識和密鑰工具。

2 密鑰知識-非對稱加密

這部分知識非常重要,了解了關鍵的密鑰知識,才能更好地在工作中去使用。需要注意的是,講的主要是非對稱加密的知識,對稱加密比較好了解,就不講述了。

(1)對于非對稱加密,密鑰分為私鑰(private key)和公鑰(public key),它們是成對出現的,缺一不可,少一個都無法正常工作。

(2)如果用公鑰加密,就必須使用對應的私鑰解密,反之亦然。

(3)通常,私鑰是自己才擁有,公鑰是對外公開釋出。是以,在伺服器端一般我們使用的是私鑰,而在用戶端我們使用的則為公鑰。是以我們是在服務端使用私鑰對來自用戶端的用公鑰加密的資料進行解密,哈哈,這句話很繞。

(4)即使把公鑰公開了,隻要密鑰長度合理(一般是1024或2048),目前的技術是無法通過公鑰來計算出私鑰的,是以我們認為它是安全的。

(5)那麼我們通過什麼來加密、什麼來解密呢?從功能上來說,既可以用公鑰加密、私鑰解密,也可以用私鑰加密,公鑰解密。但實際上,通常采用的是公鑰加密、私鑰解密,因為隻想密文隻有我知道,不希望别人也能獲得我的資訊,是以要使用私鑰來加密。試想想,如果把用私鑰加密後的資訊暴露出去,而大家都可以擁有公鑰,也就意味着大家都可以解密,那我的加密還有什麼意義呢?

(6)對于簽名功能,我不希望有人來冒充我來簽名,是以是私鑰簽名,公鑰驗證,這樣才能確定簽名隻屬于一個人呀,如果用公鑰來簽名,那不是大家都可以是南瓜慢說呢?

(7)非對稱加密是運算效率比較低的,為了提高效率,可以采用這樣的方案:使用非對稱加密來交換密鑰Key,然後用密鑰Key來進行對稱加密。不難了解,這個密鑰是由用戶端生成的,如果服務端來生成,那大家都知道了這個密鑰,就失去了意義。

(8)密鑰檔案是用于存放私鑰和公鑰的檔案,我們可以把私鑰和公鑰放一起,也可以分開放。而密鑰檔案有許多格式:jks、p12、pem、cert等,要根據不用的伺服器和用戶端選取。

(9)一個密鑰檔案是可以同時存放多個私鑰和公鑰的,如.jks檔案可以同時存放localhost和www.pkslow.com的私鑰。但要注意别名和CN名是不同的。

(10)生成cert檔案的兩種方式:

第一種:自己生成密鑰和CSR(Certificate Signing Request,證書簽名請求檔案),把CSR給CA機構,機構會生成一個cert檔案給你,然後要把該cert檔案導入到自己的密鑰檔案裡。

第二種:直接在CA生成所有,然後會給回private key和cert檔案,配置到伺服器端使用即可。

(11)如何更新将要過期的cert?

Private Key沒有過期時間,可以通過自己的private key生成新的CSR,然後給CA重新生成cert;或者private key也重新生成,參加上面一條。

(12)更新了cert,用戶端要不要做什麼?

如果是通過CA來驗證的,是不需要的。如果是Self-Signed的,需要把cert給用戶端然後導入到用戶端的密鑰檔案裡。

(13)作為文本格式的時候,密鑰的格式如下:

Private Key檔案:

-----BEGIN ENCRYPTED PRIVATE KEY-----

XXX

-----END ENCRYPTED PRIVATE KEY-----

CSR檔案:

-----BEGIN CERTIFICATE REQUEST-----

-----END CERTIFICATE REQUEST-----

Public key檔案:

-----BEGIN PUBLIC KEY-----

-----END PUBLIC KEY-----

Cert檔案:

-----BEGIN CERTIFICATE-----

-----END CERTIFICATE-----

3 密鑰工具

密鑰工具有許多,常用的有openssl和keytool。

3.1 keytool常用指令

keytool是JDK提供的密鑰指令行工具,功能強大,語義清晰明了。常用的指令有:

生成一個密鑰對

keytool -genkey -alias localhost -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore localhost.jks -dname CN=localhost,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 -storepass changeit -keypass changeit

生成CSR檔案

keytool -certreq -alias localhost -file localhost.csr -keystore localhost.jks -storepass changeit

導出一個cert檔案

keytool -export -alias xxx -file xxx.cer -keystore xxx.jks

導入一個cert檔案

keytool -import -alais xxx -file xxx.cer -keystore xxx.jks

檢視cert清單詳情

keytool -list -v -keystore xxx.p12 -storepass changeit -storetype PKCS12

keytool -list -v -keystore xxx.jks -storepass changeit -storetype JKS

轉換JKS格式為P12

keytool -importkeystore -srckeystore xxx.jks -destkeystore xxx.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass changeit -deststorepassword changeit -srckeypass changeit

-destkeypass changeit -srcalias xxx -destalias xxx -noprompt

更多指令請參考幫助文檔或網上吧。

3.2 可視化工具Keystore Explorer

在Linux終端等隻能通過指令行方式來操作密鑰,但指令和參數這麼多,記住是不太可能的,那總不能每次都要上網查吧,萬一連不上網了呢?

還好有優秀免費的可視化工具Keystore Explorer,官方網址為

https://keystore-explorer.org/index.html

,可以在Windows或Mac開發使用,最後再把檔案上傳到伺服器即可。界面如下:

非常簡單易用又功能強大,大大減少了記憶勞動。不管是生成Key、導入導出、轉換格式、生成CSR等,都很容易。是以,就不一一截圖介紹了。

4 總結

本文主要講解了密鑰知識和密鑰工具。密鑰知識比較重要,暫時就想到這些,以後再慢慢補充,最新文章可以到(www.pkslow.com) 通路。密鑰工具有指令行工具和可視化工具,大家按自己需求選擇。

原文位址

https://www.cnblogs.com/larrydpk/p/12785977.html