日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

數(shù)字證書格式

 posondlq 2013-01-21
常見的數(shù)字證書格式
  
  cer后綴的證書文件有兩種編碼-->DER二進(jìn)制編碼或者BASE64編碼(也就是.pem)
  
  p7b一般是證書鏈,里面包括1到多個(gè)證書
  pfx是指以pkcs#12格式存儲(chǔ)的證書和相應(yīng)私鑰。
  
  在Security編程中,有幾種典型的密碼交換信息文件格式:
  DER-encoded certificate: .cer, .crt
  PEM-encoded message: .pem
  PKCS#12 Personal Information Exchange: .pfx, .p12
  PKCS#10 Certification Request: .p10
  PKCS#7 cert request response: .p7r
  PKCS#7 binary message: .p7b
  
  .cer/.crt是用于存放證書,它是2進(jìn)制形式存放的,不含私鑰。
  .pem跟crt/cer的區(qū)別是它以Ascii來(lái)表示。
  pfx/p12用于存放個(gè)人證書/私鑰,他通常包含保護(hù)密碼,2進(jìn)制方式
  p10是證書請(qǐng)求
  p7r是CA對(duì)證書請(qǐng)求的回復(fù),只用于導(dǎo)入
  p7b以樹狀展示證書鏈(certificate chain),同時(shí)也支持單個(gè)證書,不含私鑰。
  
  其中,我介紹如何從p12/pfx文件中提取密鑰對(duì)及其長(zhǎng)度:
  1,首先,讀取pfx/p12文件(需要提供保護(hù)密碼)
  2,通過(guò)別名(Alias,注意,所有證書中的信息項(xiàng)都是通過(guò)Alias來(lái)提取的)提取你想要分析的證書鏈
  3,再將其轉(zhuǎn)換為一個(gè)以X509證書結(jié)構(gòu)體
  4,提取里面的項(xiàng),如果那你的證書項(xiàng)放在第一位(單一證書),直接讀取 x509Certs[0](見下面的代碼)這個(gè)
  
  X509Certificate對(duì)象
  5,X509Certificate對(duì)象有很多方法,tain198127網(wǎng)友希望讀取RSA密鑰(公私鑰)及其長(zhǎng)度(見
  
  http://www./thread.shtml?topicId=43786&forumId=55&#reply),那真是太Easy了,
   X509Certificate keyPairCert = x509Certs[0];
   int iKeySize = X509CertUtil.getCertificateKeyLength(keyPairCert);
   System.out.println("證書密鑰算法="+keyPairCert.getPublicKey().getAlgorithm());
   System.out.println("證書密鑰長(zhǎng)度="+iKeySize);
  提取了他所需要的信息。
  
  
  
  X.509定義了兩種證書:公鑰證書和屬性證書
   PKCS#7和PKCS#12使用的都是公鑰證書
   PKCS#7的SignedData的一種退化形式可以分發(fā)公鑰證書和CRL
   一個(gè)SignedData可以包含多張公鑰證書
   PKCS#12可以包含公鑰證書及其私鑰,也可包含整個(gè)證書鏈
  
  
  
  簡(jiǎn)介
  Java自帶的keytool工具是個(gè)密鑰和證書管理工具。它使用戶能夠管理自己的公鑰/私鑰對(duì)及相關(guān)證書,用于(通過(guò)
  
  數(shù)字簽名)自我認(rèn)證(用戶向別的用戶/服務(wù)認(rèn)證自己)或數(shù)據(jù)完整性以及認(rèn)證服務(wù)。它還允許用戶儲(chǔ)存他們的通
  
  信對(duì)等者的公鑰(以證書形式)。
  
  keytool 將密鑰和證書儲(chǔ)存在一個(gè)所謂的密鑰倉(cāng)庫(kù)(keystore)中。缺省的密鑰倉(cāng)庫(kù)實(shí)現(xiàn)將密鑰倉(cāng)庫(kù)實(shí)現(xiàn)為一個(gè)文
  
  件。它用口令來(lái)保護(hù)私鑰。
  
  Java KeyStore的類型
  JKS和JCEKS是Java密鑰庫(kù)(KeyStore)的兩種比較常見類型(我所知道的共有5種,JKS, JCEKS, PKCS12, BKS,UBER)
  
  。
  
  JKS的Provider是SUN,在每個(gè)版本的JDK中都有,JCEKS的Provider是SUNJCE,1.4后我們都能夠直接使用它。
  
  JCEKS在安全級(jí)別上要比JKS強(qiáng),使用的Provider是JCEKS(推薦),尤其在保護(hù)KeyStore中的私鑰上(使用TripleDes
  
 ?。?。
  
  PKCS#12是公鑰加密標(biāo)準(zhǔn),它規(guī)定了可包含所有私鑰、公鑰和證書。其以二進(jìn)制格式存儲(chǔ),也稱為 PFX 文件,在
  
  windows中可以直接導(dǎo)入到密鑰區(qū),注意,PKCS#12的密鑰庫(kù)保護(hù)密碼同時(shí)也用于保護(hù)Key。
  
  BKS 來(lái)自BouncyCastle Provider,它使用的也是TripleDES來(lái)保護(hù)密鑰庫(kù)中的Key,它能夠防止證書庫(kù)被不小心修
  
  改(Keystore的keyentry改掉1個(gè) bit都會(huì)產(chǎn)生錯(cuò)誤),BKS能夠跟JKS互操作,讀者可以用Keytool去TryTry。
  
  UBER比較特別,當(dāng)密碼是通過(guò)命令行提供的時(shí)候,它只能跟keytool交互。整個(gè)keystore是通過(guò)PBE/SHA1/Twofish
  
  加密,因此keystore能夠防止被誤改、察看以及校驗(yàn)。以前,Sun JDK(提供者為SUN)允許你在不提供密碼的情況下
  
  直接加載一個(gè)Keystore,類似cacerts,UBER不允許這種情況。
  
  
  
  證書導(dǎo)入
  Der/Cer證書導(dǎo)入:
  
  要從某個(gè)文件中導(dǎo)入某個(gè)證書,使用keytool工具的-import命令:
  
  keytool -import -file mycert.der -keystore mykeystore.jks
  
  如果在 -keystore 選項(xiàng)中指定了一個(gè)并不存在的密鑰倉(cāng)庫(kù),則該密鑰倉(cāng)庫(kù)將被創(chuàng)建。
  
  如果不指定 -keystore 選項(xiàng),則缺省密鑰倉(cāng)庫(kù)將是宿主目錄中名為 .keystore 的文件。如果該文件并不存在,則
  
  它將被創(chuàng)建。
  
  創(chuàng)建密鑰倉(cāng)庫(kù)時(shí)會(huì)要求輸入訪問口令,以后需要使用此口令來(lái)訪問??墒褂?list命令來(lái)查看密鑰倉(cāng)庫(kù)里的內(nèi)容:
  
  keytool -list -rfc -keystore mykeystore.jks
  
  
  
  
  P12格式證書導(dǎo)入:
  
  keytool無(wú)法直接導(dǎo)入PKCS12文件。
  
  第一種方法是使用IE將pfx證書導(dǎo)入,再導(dǎo)出為cert格式文件。使用上面介紹的方法將其導(dǎo)入到密鑰倉(cāng)庫(kù)中。這樣
  
  的話倉(cāng)庫(kù)里面只包含了證書信息,沒有私鑰內(nèi)容。
  
  
  第二種方法是將pfx文件導(dǎo)入到IE瀏覽器中,再導(dǎo)出為pfx文件。
   新生成的pfx不能被導(dǎo)入到keystore中,報(bào)錯(cuò):keytool錯(cuò)誤: java.lang.Exception: 所輸入的不是一個(gè)
  
  X.509 認(rèn)證。新生成的pfx文件可以被當(dāng)作keystore使用。但會(huì)報(bào)個(gè)錯(cuò)誤as unknown attr1.3.6.1.4.1.311.17.1,
  
  查了下資料,說(shuō)IE導(dǎo)出的就會(huì)這樣,使用Netscape就不會(huì)有這個(gè)錯(cuò)誤.
  
  第三種方法是將pfx文件當(dāng)作一個(gè)keystore使用。但是通過(guò)微軟的證書管理控制臺(tái)生成的pfx文件不能直接使用。
  
  keytool不認(rèn)此格式,報(bào)keytool錯(cuò)誤: java.io.IOException: failed to decrypt safe contents entry。需要
  
  通過(guò)OpenSSL轉(zhuǎn)換一下:
  
  1)openssl pkcs12 -in mycerts.pfx -out mycerts.pem
  
  2)openssl pkcs12 -export -in mycerts.pem -out mykeystore.p12
  
  通過(guò)keytool的-list命令可檢查下密鑰倉(cāng)庫(kù)中的內(nèi)容:
  
  keytool -rfc -list -keystore mykeystore.p12 -storetype pkcs12
  
  這里需要指明倉(cāng)庫(kù)類型為pkcs12,因?yàn)槿笔〉念愋蜑閖ks。這樣此密鑰倉(cāng)庫(kù)就即包含證書信息也包含私鑰信息。
  
  P7B格式證書導(dǎo)入:
  
  keytool無(wú)法直接導(dǎo)入p7b文件。
  
  需要將證書鏈RootServer.p7b(包含根證書)導(dǎo)出為根rootca.cer和子rootcaserver.cer 。
  
  將這兩個(gè)證書導(dǎo)入到可信任的密鑰倉(cāng)庫(kù)中。
  
  keytool -import -alias rootca -trustcacerts -file rootca.cer -keystore testkeytrust.jks
  
  遇到是否信任該證書提示時(shí),輸入y
  
  keytool -import -alias rootcaserver -trustcacerts -file rootcaserver.cer -keystore testkeytrust.jks
  
  
  
  
  總結(jié):
  
  1)P12格式的證書是不能使用keytool工具導(dǎo)入到keystore中的
  
  2)The Sun's PKCS12 Keystore對(duì)從IE和其他的windows程序生成的pfx格式的證書支持不太好.
  
  3)P7B證書鏈不能直接導(dǎo)入到keystore,需要將里面的證書導(dǎo)出成cer格式,再分別導(dǎo)入到keystore。
  
  **************************************
  
  
  
  數(shù)字證書文件格式(cer和pfx)的區(qū)別
  
  作為文件形式存在的證書一般有這幾種格式:
  
  1.帶有私鑰的證書
  由Public Key Cryptography Standards #12,PKCS#12標(biāo)準(zhǔn)定義,包含了公鑰和私鑰的二進(jìn)制格式的證書形式,以
  
  pfx作為證書文件后綴名。
  
  2.二進(jìn)制編碼的證書
  證書中沒有私鑰,DER 編碼二進(jìn)制格式的證書文件,以cer作為證書文件后綴名。
  
  3.Base64編碼的證書
  證書中沒有私鑰,BASE64 編碼格式的證書文件,也是以cer作為證書文件后綴名。
  
  由定義可以看出,只有pfx格式的數(shù)字證書是包含有私鑰的,cer格式的數(shù)字證書里面只有公鑰沒有私鑰。
  
  在pfx證書的導(dǎo)入過(guò)程中有一項(xiàng)是“標(biāo)志此密鑰是可導(dǎo)出的。這將您在稍候備份或傳輸密鑰”。一般是不選中的,如
  
  果選中,別人就有機(jī)會(huì)備份你的密鑰了。如果是不選中,其實(shí)密鑰也導(dǎo)入了,只是不能再次被導(dǎo)出。這就保證了密
  
  鑰的安全。
  
  如果導(dǎo)入過(guò)程中沒有選中這一項(xiàng),做證書備份時(shí)“導(dǎo)出私鑰”這一項(xiàng)是灰色的,不能選。只能導(dǎo)出cer格式的公鑰。
  
  如果導(dǎo)入時(shí)選中該項(xiàng),則在導(dǎo)出時(shí)“導(dǎo)出私鑰”這一項(xiàng)就是可選的。
  
  如果要導(dǎo)出私鑰(pfx),是需要輸入密碼的,這個(gè)密碼就是對(duì)私鑰再次加密,這樣就保證了私鑰的安全,別人即使
  
  拿到了你的證書備份(pfx),不知道加密私鑰的密碼,也是無(wú)法導(dǎo)入證書的。相反,如果只是導(dǎo)入導(dǎo)出cer格式的證
  
  書,是不會(huì)提示你輸入密碼的。因?yàn)楣€一般來(lái)說(shuō)是對(duì)外公開的,不用加密
  
  
  *************************
  
  SSL證書類型和轉(zhuǎn)換
  
  PKCS 全稱是 Public-Key Cryptography Standards ,是由 RSA 實(shí)驗(yàn)室與其它安全系統(tǒng)開發(fā)商為促進(jìn)公鑰密碼的
  
  發(fā)展而制訂的一系列標(biāo)準(zhǔn),PKCS 目前共發(fā)布過(guò) 15 個(gè)標(biāo)準(zhǔn)。 常用的有:
  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-T X509 國(guó)際
  
  標(biāo)準(zhǔn)。
  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進(jìn)制形式存放的,不含私鑰。
  .pem跟crt/cer的區(qū)別是它以Ascii來(lái)表示。
  pfx/p12用于存放個(gè)人證書/私鑰,他通常包含保護(hù)密碼,2進(jìn)制方式
  p10是證書請(qǐng)求
  p7r是CA對(duì)證書請(qǐng)求的回復(fù),只用于導(dǎo)入
  p7b以樹狀展示證書鏈(certificate chain),同時(shí)也支持單個(gè)證書,不含私鑰。
  
  
  1. 生成私鑰 Generate the private key
  請(qǐng)使用以下命令來(lái)生成私鑰
  openssl genrsa –des3 –out [url]www.mydomain.com.key[/url] 1024
  
  如上圖所示,此命令將生成1024位的RSA私鑰,私鑰文件名為: [url]www.mydomain.com.key[/url],會(huì)提示您設(shè)
  
  定私鑰密碼,請(qǐng)?jiān)O(shè)置密碼,并牢記!
  
  2. 生成CSR文件 Generate the CSR
  請(qǐng)使用以下命令來(lái)生成CSR
  openssl req –new –key [url]www.mydomain.com.key[/url] –out [url]www.mydomain.com.csr[/url]
  
  此命令將提示您輸入X.509證書所要求的字段信息,包括國(guó)家(中國(guó)添CN)、省份、所在城市、單位名稱、單位部門
  
  名稱(可以不填直接回車)。請(qǐng)注意: 除國(guó)家縮寫必須填CN外,其余都可以是英文或中文。
  請(qǐng)輸入您要申請(qǐng)SSL證書的域名,如果您需要為[url]www.domain.com[/url]申請(qǐng)SSL證書就不能只輸入domain.com
  
  。SSL證書是嚴(yán)格綁定域名的。
  請(qǐng)不要輸入Email、口令(challenge password)和可選的公司名稱,直接打回車即可。
  您現(xiàn)在已經(jīng)成功生成了密鑰對(duì),私鑰文件:[url]www.mydomain.com.key[/url] 保存在您的服務(wù)器中, 請(qǐng)把CSR文
  
  件:[url]www.mydomain.com.csr[/url] 發(fā)給WoTrust/Thawte即可,CSR文件格式如下圖所示。
  
  3. 備份私鑰文件 Backup your private key
  請(qǐng)備份您的私鑰文件并記下私鑰密碼。最好是把私鑰文件備份到軟盤或光盤中。
  
  4. 測(cè)試CSR
  生成CSR后,建議您自己測(cè)試一下生成的CSR文件是否正確,
  
  一 用openssl創(chuàng)建CA證書的RSA密鑰(PEM格式):
  openssl genrsa -des3 -out ca.key 1024
  二用openssl創(chuàng)建CA證書(PEM格式,假如有效期為一年):
  openssl req -new -x509 -days 365 -key ca.key -out ca.crt -config openssl.cnf
  openssl是可以生成DER格式的CA證書的,最好用IE將PEM格式的CA證書轉(zhuǎn)換成DER格式的CA證書。
  三 x509到pfx
  openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
  四 PEM格式的ca.key轉(zhuǎn)換為Microsoft可以識(shí)別的pvk格式。
   pvk -in ca.key -out ca.pvk -nocrypt -topvk
  五 PKCS#12 到 PEM 的轉(zhuǎn)換
  openssl pkcs12 -nocerts -nodes -in cert.p12 -out private.pem
  驗(yàn)證 openssl pkcs12 -clcerts -nokeys -in cert.p12 -out cert.pem
  六 從 PFX 格式文件中提取私鑰格式文件 (.key)
  openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key
  七 轉(zhuǎn)換 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 的轉(zhuǎn)換,
  openssl pkcs12 -export -in Cert.pem -out Cert.p12 -inkey key.pem
  
  cd c:\openssl          set OPENSSL_CONF=openssl.cnf          openssl pkcs12 -
  
  export -out server.pfx -inkey server.key -in server.crt          (server.key和server.crt文
  
  件是Apache的證書文件,生成的server.pfx用于導(dǎo)入IIS)
  
  
  
  
  *********************
  
  公鑰和私鑰的區(qū)別
  
  
  公鑰密碼體制的核心思想是:加密和解密采用不同的密鑰。這是公鑰密碼體制和傳統(tǒng)的對(duì)稱密碼體制最大的區(qū)別。對(duì)于傳統(tǒng)對(duì)稱密碼而言,密文的安全性完全依賴于 密鑰的保密性,一旦密鑰泄漏,將毫無(wú)保密性可言。但是公鑰密碼體制徹底改變了這一狀況。在公鑰密碼體制中,公鑰是公開的,只有私鑰是需要保密的。知道公鑰 和密碼算法要推測(cè)出私鑰在計(jì)算上是不可行的。這樣,只要私鑰是安全的,那么加密就是可信的。
  
  顯然,對(duì)稱密碼和公鑰密碼都需要保證密鑰的安全,不同之處在于密鑰的管理和分發(fā)上面。在對(duì)稱密碼中,必須要有一種可靠的手段將加密密鑰(同時(shí)也是解密密 鑰)告訴給解密方;而在公鑰密碼體制中,這是不需要的。解密方只需要保證自己的私鑰的保密性即可,對(duì)于公鑰,無(wú)論是對(duì)加密方而言還是對(duì)密碼分析者而言都是 公開的,故無(wú)需考慮采用可靠的通道進(jìn)行密碼分發(fā)。這使得密鑰管理和密鑰分發(fā)的難度大大降低了。
  
  
  加密和解密:發(fā)送方利用接收方的公鑰對(duì)要發(fā)送的明文進(jìn)行加密,接受方利用自己的
  私鑰進(jìn)行解密,其中公鑰和私鑰匙相對(duì)的,任何一個(gè)作為公鑰,則另一個(gè)
  就為私鑰.但是因?yàn)榉菍?duì)稱加密技術(shù)的速度比較慢,所以,一般采用對(duì)稱
  加密技術(shù)加密明文,然后用非對(duì)稱加密技術(shù)加密對(duì)稱密鑰,即數(shù)字信封 技術(shù).
  簽名和驗(yàn)證:發(fā)送方用特殊的hash算法,由明文中產(chǎn)生固定長(zhǎng)度的摘要,然后利用
  自己的私鑰對(duì)形成的摘要進(jìn)行加密,這個(gè)過(guò)程就叫簽名。接受方利用
  發(fā)送方的公鑰解密被加密的摘要得到結(jié)果A,然后對(duì)明文也進(jìn)行hash操
  作產(chǎn)生摘要B.最后,把A和B作比較。此方式既可以保證發(fā)送方的身份不
  可抵賴,又可以保證數(shù)據(jù)在傳輸過(guò)程中不會(huì)被篡改。
  
  
  
  
  
   首先要分清它們的概念:
  
  加密和認(rèn)證
  
    首先我們需要區(qū)分加密和認(rèn)證這兩個(gè)基本概念。
  
    加密是將數(shù)據(jù)資料加密,使得非法用戶即使取得加密過(guò)的資料,也無(wú)法獲取正確的資料內(nèi)容, 所以數(shù)據(jù)加密可以保護(hù)數(shù)據(jù),防止監(jiān)聽攻擊。其重點(diǎn)在于數(shù)據(jù)的安全性。身份認(rèn)證是用來(lái)判斷某個(gè)身份的真實(shí)性,確認(rèn)身份后,系統(tǒng)才可以依不同的身份給予不同的 權(quán)限。其重點(diǎn)在于用戶的真實(shí)性。兩者的側(cè)重點(diǎn)是不同的。
  
    公鑰和私鑰
  
    其次我們還要了解公鑰和私鑰的概念和作用。
  
    在現(xiàn)代密碼體制中加密和解密是采用不同的密鑰(公開密鑰),也就是非對(duì)稱密鑰密碼系統(tǒng),每個(gè)通信方均需要兩個(gè)密鑰,即公鑰和私鑰,這兩把密鑰可以互為加解密。公鑰是公開的,不需要保密,而私鑰是由個(gè)人自己持有,并且必須妥善保管和注意保密。
  
    公鑰私鑰的原則:
  
  一個(gè)公鑰對(duì)應(yīng)一個(gè)私鑰。
  密鑰對(duì)中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。
  如果用其中一個(gè)密鑰加密數(shù)據(jù),則只有對(duì)應(yīng)的那個(gè)密鑰才可以解密。
  如果用其中一個(gè)密鑰可以進(jìn)行解密數(shù)據(jù),則該數(shù)據(jù)必然是對(duì)應(yīng)的那個(gè)密鑰進(jìn)行的加密。
    非對(duì)稱密鑰密碼的主要應(yīng)用就是公鑰加密和公鑰認(rèn)證,而公鑰加密的過(guò)程和公鑰認(rèn)證的過(guò)程是不一樣的,下面我就詳細(xì)講解一下兩者的區(qū)別。
  
  事例說(shuō)明下:
  
  例如:比如有兩個(gè)用戶Alice和Bob,Alice想把一段明文通過(guò)雙鑰加密的技術(shù)發(fā)送給Bob,Bob有一對(duì)公鑰和私鑰,那么加密解密的過(guò)程如下:
  
  Bob將他的公開密鑰傳送給Alice。
  Alice用Bob的公開密鑰加密她的消息,然后傳送給Bob。
  Bob用他的私人密鑰解密Alice的消息。
  那么Bob怎么可以辨認(rèn)Alice是不是真人還是冒充的.我們只要和上面的例子方法相反就可以了.
  
  
  Alice用她的私人密鑰對(duì)文件加密,從而對(duì)文件簽名。
  Alice將簽名的文件傳送給Bob。
  Bob用Alice的公鑰解密文件,從而驗(yàn)證簽名。
  通過(guò)例子大家應(yīng)該有所了解吧!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多