PKCS 全稱是 Public-Key Cryptography Standards ,是由 RSA 實驗室與其它安全系統開發商為促進公鑰密碼的發展而制訂的一系列標准。
可以到官網上看看 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的實現扮演了翻譯家的角色,它在卡的內部格式與應用程序支持的數據格式間進行轉換。
X509
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 .CRT
.cer/.crt是用於存放證書,它是2進制形式存放的,不含私鑰。
.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】個人信息交換語法標准
特點 : 1、包含私鑰、公鑰及其證書
2、密鑰庫和私鑰用相同密碼進行保護
格式 : 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】加密信息語法標准
特點 : 1、p7b以樹狀展示證書鏈,不含私鑰
2、p7r為CA對證書請求簽名的回復,只能用於導入
格式 : CMS
擴展名 : .p7c/.p7m/.p7s
描述 : 【Cryptographic Message Syntax】
特點 : 1、p7c只保存證書
2、p7m:signature with enveloped data
3、p7s:時間戳簽名文件
格式 : PEM
擴展名 : .pem
描述 : 【Printable Encoded Message】
特點 : 1、該編碼格式在RFC1421中定義,其實PEM是【Privacy-Enhanced Mail】的簡寫,但他也同樣廣泛運用於密鑰管理
2、ASCII文件
3、一般基於base 64編碼
格式 : PKCS10
擴展名 : .p10/.csr
描述 : 【PKCS #10】公鑰加密標准【Certificate Signing Request】
特點 : 1、證書簽名請求文件
2、ASCII文件
3、CA簽名后以p7r文件回復
格式 : SPC
擴展名 : .pvk/.spc
描述 : 【Software Publishing Certificate】
特點 : 微軟公司特有的雙證書文件格式,經常用於代碼簽名,其中
1、pvk用於保存私鑰
2、spc用於保存公鑰
