日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

密码学系列之:PEM和PKCS7,PKCS8,PKCS12

發(fā)布時間:2023/12/31 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 密码学系列之:PEM和PKCS7,PKCS8,PKCS12 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 簡介
  • PEM
  • PKCS7
  • PKCS8
  • PKCS12
  • 總結(jié)

簡介

PEM是一種常見的保存key或者證書的格式,PEM格式的文件一般來說后綴是以.pem結(jié)尾的。那么PEM到底是什么呢?它和常用的證書格式PKCS7和PKCS12有什么關(guān)系呢?一起來看看吧。

PEM

PEM雖然使用來存儲證書或者密鑰的,但是PEM原本是和email相關(guān)聯(lián)的,因?yàn)镻EM的全稱是Privacy-Enhanced Mail,最初是為郵件的隱私增強(qiáng)而創(chuàng)建的,是在1993年由IETF制定的標(biāo)準(zhǔn)。雖然最終的協(xié)議標(biāo)準(zhǔn)并沒有被廣泛采用,但是其中定義的文本編碼卻被廣泛的使用,最終由IETF在RFC 7468中正式化。

之前我們介紹過一種協(xié)議描述語言ASN.1,ASN.1通常被用來定義協(xié)議中的數(shù)據(jù)結(jié)構(gòu),然后通過使用DER編碼來對這些數(shù)據(jù)進(jìn)行序列化,但是DER編碼是二進(jìn)制的格式,二進(jìn)制文件在某些情況下不方便進(jìn)行傳輸或者展示,不然說某些只支持ASCII編碼的情況,所以需要一種可以講DER格式轉(zhuǎn)換成為文本格式的方式。

這種方式就叫做PEM。PEM使用的方法也很簡單,就是對DER編碼過后的二進(jìn)制數(shù)據(jù)使用base64編碼,將其轉(zhuǎn)換成為文本文件。

在PEM中有固定的文件頭和文件結(jié)尾符。文件頭是以’-----BEGIN’+label+‘-----‘開始,文件結(jié)尾是以’-----END’+label+'-----'結(jié)束。

其中l(wèi)abel表示的是編碼的消息類型,通常可以取這些值:CERTIFICATE, CERTIFICATE REQUEST, PRIVATE KEY 和 X509 CRL。

下面是一個PEM的例子,表示其內(nèi)容是一個證書:

-----BEGIN CERTIFICATE KEY----------END CERTIFICATE KEY-----

雖然PEM格式的文件通常以.pem結(jié)束,但是也可以使用 “.cer” 或者 “.crt” 表示一個證書,使用".key"表示是一個密鑰。

另外, 一個PEM文件中可以包含多個內(nèi)容,比如對于證書來說,通常來說可能需要一些額外的信息比如證書鏈,這樣一個證書鏈可以存儲在一個PEM文件中。

PKCS7

PKCS7是Public-Key Cryptography Standards系列的一員,主要用來存儲簽名或者加密后的數(shù)據(jù),比如證書或者CRL。PKCS7可以用原始的DER格式進(jìn)行存儲,也可以使用PEM格式進(jìn)行存儲。

如果以PEM格式進(jìn)行存儲,那么文件的開頭和結(jié)尾分別是:

?????BEGIN PKCS7??????????END PKCS7?????

在windows中PKCS7通常以.p7b結(jié)尾。

PKCS7的操作可以通過openssl命令來進(jìn)行。

比如將一個PKCS7的文件從PEM格式轉(zhuǎn)換成為DER格式:

openssl pkcs7 -in file.pem -outform DER -out file.der

從一個文件中提取出所有的證書到另外一個文件:

openssl pkcs7 -in file.pem -print_certs -out certs.pem

PKCS8

PKCS8也是Public-Key Cryptography Standards系列的一員,它主要用來存儲私鑰。

私鑰首先會使用PKCS #5的標(biāo)準(zhǔn)進(jìn)行加密,然后將其進(jìn)行base64編碼,轉(zhuǎn)換成為PEM格式進(jìn)行存儲。

所以說PKCS8的格式就是PEM,但是里面存儲的內(nèi)容是經(jīng)過加密過后的私鑰。

PKCS12

PKCS12也是Public-Key Cryptography Standards系列的一員,PKCS12可以看做是PKCS7的擴(kuò)展,在PKCS12中可以存儲證書,私鑰或者CRL。和PKCS7相比,PKCS12可以額外存儲私鑰。

PKCS12的文件是以.p12 或者 .pfx結(jié)尾的。在JDK9中,PKCS12是默認(rèn)的密鑰存儲格式。

PKCS12的格式和PEM相比會復(fù)雜的多,在需要的時候,我們可以使用OPENSSL將PKCS12格式轉(zhuǎn)換成為PEM格式:

openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem

當(dāng)然也可以從PEM到PKCS12:

openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem

總結(jié)

以上就是PEM和PKCS系列中幾個非常常用的編碼格式。希望大家能夠掌握和正確使用。

更多內(nèi)容請參考 http://www.flydean.com/48-pem-pkcs7812/

最通俗的解讀,最深刻的干貨,最簡潔的教程,眾多你不知道的小技巧等你來發(fā)現(xiàn)!

歡迎關(guān)注我的公眾號:「程序那些事」,懂技術(shù),更懂你!

總結(jié)

以上是生活随笔為你收集整理的密码学系列之:PEM和PKCS7,PKCS8,PKCS12的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。