Terry.Li-彬

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

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

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

              使用BC Provider在Java中構造一個證書請求格式的對象調用其構造函數即可,這個函數如下:

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

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

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

              利用證書請求結構進行證書簽發的代碼如下,這里假設CSR是一個已經獲取出來的PKCS10CertificationRequest結構:

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

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

          posted on 2008-02-13 22:14 禮物 閱讀(796) 評論(0)  編輯  收藏 所屬分類: CA
          主站蜘蛛池模板: 海南省| 济宁市| 广东省| 蒙阴县| 监利县| 思茅市| 长葛市| 华池县| 婺源县| 梅州市| 翼城县| 宣恩县| 平江县| 龙里县| 翁牛特旗| 肇庆市| 平武县| 承德县| 承德市| 临夏市| 夹江县| 芦溪县| 中方县| 沂水县| 汪清县| 同心县| 黔江区| 江西省| 西宁市| 麻江县| 长泰县| 石河子市| 鄂州市| 双城市| 临邑县| 贡觉县| 东乡| 休宁县| 嘉鱼县| 宜州市| 蓝田县|