Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          前面幾篇文章已經(jīng)把如何用Java實現(xiàn)一個CA基本上講完了.但是他們都有一個特點,就是用戶的信息都是在現(xiàn)場獲取的,不能做申請和簽發(fā)相分離.今天我們要講述的是PKCS#10證書請求文件.它的作用就是可以使申請和簽發(fā)相分離.

              PKCS#10證書請求結(jié)構(gòu)中的主要信息包含了被簽發(fā)者(證書申請者)的主體名稱(DN)和他的公鑰.因此一個CA在獲取到一個PKCS#10證書請求后,就可以從中獲取到任何和簽發(fā)證書有關的信息,然后用它自己的私鑰簽發(fā)證書.

              使用BC Provider在Java中構(gòu)造一個證書請求格式的對象調(diào)用其構(gòu)造函數(shù)即可,這個函數(shù)如下:

              PKCS10CertificationRequest(java.lang.String signatureAlgorithm, X509Name subject, java.security.PublicKey key, ASN1Set attributes, java.security.PrivateKey signingKey)

              它的參數(shù)是自簽名算法,證書申請者的DN,證書申請者的公鑰,額外的屬性集(就是要申請的證書的擴展信息),申請證書者的私鑰.申請證書者的私鑰僅僅是用來進行一下自簽名,并不出現(xiàn)在證書請求中,需要自簽名的目的是保證該公鑰確實為申請者所有.

              調(diào)用該對象的getEncoded()方法可以將其進行DER編碼,然后儲存起來,該對象還有另一個構(gòu)造函數(shù):
              PKCS10CertificationRequest(byte[] bytes)
              這個構(gòu)造函數(shù)的作用就是直接從儲存的DER編碼中把這個對象還原出來.

              利用證書請求結(jié)構(gòu)進行證書簽發(fā)的代碼如下,這里假設CSR是一個已經(jīng)獲取出來的PKCS10CertificationRequest結(jié)構(gòu):

              PublicKey SubjectPublicKey = CSR.getPublicKey();
              CertificationRequestInfo CSRInfo = CSR.getCertificationRequestInfo();
              X509Name SubjectDN = CSRInfo.getSubject();
              ASN1Set Attributes = CSRInfo.getAttributes();

              這樣,申請者的主體DN,申請者的公鑰,申請者希望在證書擴展信息中填寫的屬性都得到了,剩下的事情就和用戶在現(xiàn)場輸入時一樣了,其它的信息一般是申請者 不能決定的.另外證書請求格式中有一樣信息沒有明確給出來,那就是證書的有效期,這個應該單獨詢問用戶,或者用其它的方法保存起來.

          posted on 2008-02-13 22:14 禮物 閱讀(792) 評論(0)  編輯  收藏 所屬分類: CA
          主站蜘蛛池模板: 灌南县| 沅陵县| 澄迈县| 鸡西市| 灌南县| 万安县| 陇西县| 长顺县| 泰来县| 剑河县| 云南省| 澳门| 文昌市| 娄底市| 府谷县| 屏东县| 巴彦县| 淮北市| 新野县| 吉安市| 金乡县| 万盛区| 岳池县| 仲巴县| 筠连县| 龙海市| 泰顺县| 张家口市| 新巴尔虎右旗| 犍为县| 凭祥市| 浙江省| 云龙县| 丹阳市| 大理市| 岐山县| 任丘市| 新密市| 韶关市| 通海县| 南宫市|