PKCS 全稱是 Public-Key Cryptography Standards ,是由 RSA 實驗室與其它安全系統開發商爲促進公鑰密碼的發展而制訂的一系列標準。node
能夠到官網上看看 What is PKCS算法
PKCS 目前共發佈過 15 個標準:
(1)PKCS#1:RSA加密標準。PKCS#1定義了RSA公鑰函數的基本格式標準,特別是數字簽名。它定義了數字簽名如何計算,包括待簽名數據和簽名自己的格式;它也定義了PSA公/私鑰的語法。
(2)PKCS#2:涉及了RSA的消息摘要加密,這已被併入PKCS#1中。
(3)PKCS#3:Diffie-Hellman密鑰協議標準。PKCS#3描述了一種實現Diffie- Hellman密鑰協議的方法。
(4)PKCS#4:最初是規定RSA密鑰語法的,現已經被包含進PKCS#1中。
(5)PKCS#5:基於口令的加密標準。PKCS#5描述了使用由口令生成的密鑰來加密8位位組串併產生一個加密的8位位組串的方法。PKCS#5能夠用於加密私鑰,以便於密鑰的安全傳輸(這在PKCS#8中描述)。
(6)PKCS#6:擴展證書語法標準。PKCS#6定義了提供附加實體信息的X.509證書屬性擴展的語法(當PKCS#6第一次發佈時,X.509還不支持擴展。這些擴展所以被包括在X.509中)。
(7)PKCS#7:密碼消息語法標準。PKCS#7爲使用密碼算法的數據規定了通用語法,好比數字簽名和數字信封。PKCS#7提供了許多格式選項,包括未加密或簽名的格式化消息、已封裝(加密)消息、已簽名消息和既通過簽名又通過加密的消息。
(8)PKCS#8:私鑰信息語法標準。PKCS#8定義了私鑰信息語法和加密私鑰語法,其中私鑰加密使用了PKCS#5標準。
(9)PKCS#9:可選屬性類型。PKCS#9定義了PKCS#6擴展證書、PKCS#7數字簽名消息、PKCS#8私鑰信息和PKCS#10證書籤名請求中要用到的可選屬性類型。已定義的證書屬性包括E-mail地址、無格式姓名、內容類型、消息摘要、簽名時間、簽名副本(counter signature)、質詢口令字和擴展證書屬性。
(10)PKCS#10:證書請求語法標準。PKCS#10定義了證書請求的語法。證書請求包含了一個惟一識別名、公鑰和可選的一組屬性,它們一塊兒被請求證書的實體簽名(證書管理協議中的PKIX證書請求消息就是一個PKCS#10)。
(11)PKCS#11:密碼令牌接口標準。PKCS#11或「Cryptoki」爲擁有密碼信息(如加密密鑰和證書)和執行密碼學函數的單用戶設備定義了一個應用程序接口(API)。智能卡就是實現Cryptoki的典型設備。注意:Cryptoki定義了密碼函數接口,但並未指明設備具體如何實現這些函數。並且Cryptoki只說明瞭密碼接口,並未定義對設備來講可能有用的其餘接口,如訪問設備的文件系統接口。
(12)PKCS#12:我的信息交換語法標準。PKCS#12定義了我的身份信息(包括私鑰、證書、各類祕密和擴展字段)的格式。PKCS#12有助於傳輸證書及對應的私鑰,因而用戶能夠在不一樣設備間移動他們的我的身份信息。
(13)PDCS#13:橢圓曲線密碼標準。PKCS#13標準當前正在完善之中。它包括橢圓曲線參數的生成和驗證、密鑰生成和驗證、數字簽名和公鑰加密,還有密鑰協定,以及參數、密鑰和方案標識的ASN.1語法。
(14)PKCS#14:僞隨機數產生標準。PKCS#14標準當前正在完善之中。爲何隨機數生成也須要創建本身的標準呢?PKI中用到的許多基本的密碼學函數,如密鑰生成和Diffie-Hellman共享密鑰協商,都須要使用隨機數。然而,若是「隨機數」不是隨機的,而是取自一個可預測的取值集合,那麼密碼學函數就再也不是絕對安全了,由於它的取值被限於一個縮小了的值域中。所以,安全僞隨機數的生成對於PKI的安全極爲關鍵。
(15)PKCS#15:密碼令牌信息語法標準。PKCS#15經過定義令牌上存儲的密碼對象的通用格式來增進密碼令牌的互操做性。在實現PKCS#15的設備上存儲的數據對於使用該設備的全部應用程序來講都是同樣的,儘管實際上在內部實現時可能所用的格式不一樣。PKCS#15的實現扮演了翻譯家的角色,它在卡的內部格式與應用程序支持的數據格式間進行轉換。安全
X509ide
X.509是常見通用的證書格式。全部的證書都符合爲Public Key Infrastructure (PKI) 制定的 ITU-T X509 國際標準。X.509是國際電信聯盟-電信(ITU-T)部分標準和國際標準化組織(ISO)的證書格式標準。做爲ITU-ISO目錄服務系列標準的一部分,X.509是定義了公鑰證書結構的基本標準。1988年首次發佈,1993年和1996年兩次修訂。當前使用的版本是X.509 V3,它加入了擴展字段支持,這極大地增進了證書的靈活性。X.509 V3證書包括一組按預約義順序排列的強制字段,還有可選擴展字段,即便在強制字段中,X.509證書也容許很大的靈活性,由於它爲大多數字段提供了多種編碼方案.函數
PKCS#7 經常使用的後綴是: .P7B .P7C .SPC編碼
PKCS#12 經常使用的後綴有: .P12 .PFX加密
X.509 DER 編碼(ASCII)的後綴是: .DER .CER .CRT翻譯
X.509 PAM 編碼(Base64)的後綴是: .PEM .CER .CRTcode
.cer/.crt是用於存放證書,它是2進制形式存放的,不含私鑰。orm
.pem跟crt/cer的區別是它以Ascii來表示。
pfx/p12用於存放我的證書/私鑰,他一般包含保護密碼,2進制方式
p10是證書請求
p7r是CA對證書請求的回覆,只用於導入
p7b以樹狀展現證書鏈(certificate chain),同時也支持單個證書,不含私鑰。
一 用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 -out keys/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 -out cert.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
密鑰庫文件格式【Keystore】
格式 : JKS
擴展名 : .jks/.ks
描述 : 【Java Keystore】密鑰庫的Java實現版本,provider爲SUN
特色 : 密鑰庫和私鑰用不一樣的密碼進行保護
格式 : JCEKS
擴展名 : .jce
描述 : 【JCE Keystore】密鑰庫的JCE實現版本,provider爲SUN JCE
特色 : 相對於JKS安全級別更高,保護Keystore私鑰時採用TripleDES
格式 : PKCS12
擴展名 : .p12/.pfx
描述 : 【PKCS #12】我的信息交換語法標準
特色 : 一、包含私鑰、公鑰及其證書
二、密鑰庫和私鑰用相同密碼進行保護
格式 : BKS
擴展名 : .bks
描述 : Bouncycastle Keystore】密鑰庫的BC實現版本,provider爲BC
特色 : 基於JCE實現
格式 : UBER
擴展名 : .ubr
描述 : 【Bouncycastle UBER Keystore】密鑰庫的BC更安全實現版本,provider爲BC
證書文件格式【Certificate】
格式 : DER
擴展名 : .cer/.crt/.rsa
描述 : 【ASN .1 DER】用於存放證書
特色 : 不含私鑰、二進制
格式 : PKCS7
擴展名 : .p7b/.p7r
描述 : 【PKCS #7】加密信息語法標準
特色 : 一、p7b以樹狀展現證書鏈,不含私鑰
二、p7r爲CA對證書請求籤名的回覆,只能用於導入
格式 : CMS
擴展名 : .p7c/.p7m/.p7s
描述 : 【Cryptographic Message Syntax】
特色 : 一、p7c只保存證書
二、p7m:signature with enveloped data
三、p7s:時間戳簽名文件
格式 : PEM
擴展名 : .pem
描述 : 【Printable Encoded Message】
特色 : 一、該編碼格式在RFC1421中定義,其實PEM是【Privacy-Enhanced Mail】的簡寫,但他也一樣普遍運用於密鑰管理
二、ASCII文件
三、通常基於base 64編碼
格式 : PKCS10
擴展名 : .p10/.csr
描述 : 【PKCS #10】公鑰加密標準【Certificate Signing Request】
特色 : 一、證書籤名請求文件
二、ASCII文件
三、CA簽名後以p7r文件回覆
格式 : SPC 擴展名 : .pvk/.spc 描述 : 【Software Publishing Certificate】 特色 : 微軟公司特有的雙證書文件格式,常常用於代碼簽名,其中 一、pvk用於保存私鑰 二、spc用於保存公鑰