Keystore
公開金鑰密鑰的隱藏檔。擁有此認證的一方用此檔案來證明自己。比如伺服器向用戶端證明自己,就是服務端綁定好這個檔案,待用戶端向服務端發起請求時,由服務端由此檔案產生(具體過程不懂,可能有誤)證明檔案發給用戶端,由用戶端進行校正。
keytool -genkey -v -alias tomcat -keyalgRSA -validity 3650 -keystore
c:\tomcat.keystore -dname"CN=localhost,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass password-keypass password
Cer
由Keystore等認證匯出的檔案,只包含認證、不包含公開金鑰。這種檔案一般用來給執行驗證的一方進行匯入,以用來匹配對方發過來的認證。比如cer檔案就可以在windows下面雙擊匯入到瀏覽器中,瀏覽器會使用此檔案來驗證伺服器端發過來的認證。
keytool -export -alias tomcat -keystorec:\tomcat.keystore -file c:\tomcat.cer -storepass password
Crt
與Cer類似。區別(百度之)是Crt檔案可能是二進位的,也可能是文字格式設定的,應該以文字格式設定居多;而Cer一般都是二進位的。此檔案也可以在windows下面雙擊進行匯入。
Truststore
由Cer(或其他功能相同的檔案)通過命令演變而來。執行的功能應該跟Cer檔案等類似。Cer等更多是給IE等瀏覽器使用,而Truststore更多是給寫代碼時需要執行驗證功能的一方使用,比如HttpClient的https功能。注意到下面也是用-keystore來產生truststore,暫不明白。
keytool -import -file ../server/server.cer -keystoreclient.truststore -alias server
P12
功能類似Keystore。在使用https的雙向認證時一般需要使用。客服端驗證服務端則使用Keystore,服務端驗證用戶端時使用P12,因為windows下面可以直接雙擊匯入而Keystore不行(可見雙向認證時用戶端如果是windows環境則要匯入兩個檔案cer和p12,cer用來做校正、p12用來給人校正)。在非windows環境下,在服務端驗證用戶端時、用戶端綁定Keystore應該也是可行的。從下面命令可見,產生Keystore跟產生P12的命令只多了個-storetypePKCS12。
keytool -genkey -v -alias myKey -keyalg RSA
-storetype PKCS12 -validity3650 -keystore C:\my.p12 -dname"CN=MyKey,OU=cn,O=cn,L=cn,ST=cn,c=cn" -storepass password -keypasspassword
Jks
java key store,由此可見一般在JAVA環境下使用。但其功能其實是跟Keystore一模一樣的,只是換了一個尾碼名而已。其實也就是不同格式的Keystore。有時候在讀這些檔案的時候需要指定Keystore的格式,就會指定JKS、或者pkcs12,以便程式能使用正確的api來解讀之。
keytool -keystore tomcat.jks -keypass 222222-storepass 222222 -alias tomcat -genkey -keyalg RSA -dname "CN=servername,OU=servers, O=ABCom"
其他(轉自baidu):
PKCS 全稱是Public-Key Cryptography Standards ,是由 RSA 實驗室與其它安全系統開發商為促進公開金鑰密碼的發展而制訂的一系列標準,PKCS 目前共發布過 15 個標準。 常用的有:
PKCS#7 Cryptographic Message Syntax Standard
PKCS#10 Certification Request Standard
PKCS#12 Personal Information Exchange Syntax Standard
X.509是常見通用的認證格式。所有的認證都符合為Public Key Infrastructure (PKI) 制定的 ITU-TX509 國際標準。
PKCS#7 常用的尾碼是: .P7B.P7C .SPC
PKCS#12 常用的尾碼有: .P12 .PFX
X.509 DER 編碼(ASCII)的尾碼是: .DER.CER .CRT
X.509 PAM 編碼(Base64)的尾碼是: .PEM.CER .CRT
.cer/.crt是用於存放認證,它是2進位形式存放的,不含私密金鑰。
.pem跟crt/cer的區別是它以Ascii來表示。
pfx/p12用於存放個人認證/私密金鑰,他通常包含保護密碼,2進位方式
p10是認證請求
p7r是CA對認證請求的回複,只用於匯入
p7b以樹狀展示憑證鏈結(certificate chain),同時也支援單個認證,不含私密金鑰。
—————-
小美註:
der,cer檔案一般是二進位格式的,只放認證,不含私密金鑰
crt檔案可能是二進位的,也可能是文字格式設定的,應該以文字格式設定居多,功能同der/cer
pem檔案一般是文字格式設定的,可以放認證或者私密金鑰,或者兩者都有
pem如果只含私密金鑰的話,一般用.key副檔名,而且可以有密碼保護
pfx,p12檔案是二進位格式,同時含私密金鑰和認證,通常有保護密碼
怎麼判斷是文字格式設定還是二進位?用記事本開啟,如果是規則的數字字母,如
—–BEGIN CERTIFICATE—–
MIIE9jCCA96gAwIBAgIQVXD9d9wgivhJM//a3VIcDjANBgkqhkiG9w0BAQUFADBy
—–END CERTIFICATE—–
就是文本的,上面的BEGIN CERTIFICATE,說明這是一個認證
如果是—–BEGIN RSA PRIVATE KEY—–,說明這是一個私密金鑰
文字格式設定的私密金鑰,也可能有密碼保護
文字格式設定怎麼變成二進位? 從程式角度來說,去掉前後的—-行,剩下的去掉斷行符號,用base64解碼,就得到二進位了
不過一般都用命令列openssl完成這個工作
—————
一 用openssl建立CA認證的RSA密鑰(PEM格式):
openssl genrsa -des3 -out ca.key 1024
二用openssl建立CA認證(PEM格式,假如有效期間為一年):
openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config openssl.cnf
openssl是可以產生DER格式的CA認證的,最好用IE將PEM格式的CA認證轉換成DER格式的CA認證。
三 x509到pfx
pkcs12 -export –in keys/client1.crt -inkey keys/client1.key -outkeys/client1.pfx
四 PEM格式的ca.key轉換為Microsoft可以識別的pvk格式。
pvk -in ca.key -out ca.pvk -nocrypt -topvk
五 PKCS#12 到 PEM 的轉換
openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem
驗證 openssl pkcs12 -clcerts -nokeys -in cert.p12 -outcert.pem
六 從 PFX 格式檔案中提取私密金鑰格式檔案 (.key)
openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key
七 轉換 pem 到到 spc
openssl crl2pkcs7 -nocrl -certfile venus.pem -outform DER -out venus.spc
用 -outform -inform 指定 DER 還是 PAM 格式。例如:
openssl x509 -in Cert.pem -inform PEM -out cert.der -outform DER
八 PEM 到 PKCS#12 的轉換,
openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem
自己再補充理解:
對於https中的某一方,總共有三個元素需要注意:公開金鑰私密金鑰對、用來驗證別人的認證的認證、給別人驗證的認證。這三個檔案根據不同情境可以有不同的組合,但一般是公開金鑰私密金鑰對+給別人驗證的認證放在一個檔案裡,用來驗證別人的認證的認證在一個檔案裡;還有一種形式就是三個元素都在一個檔案裡(如p12)檔案。但沒看到過三個分在三個檔案裡的。