Terry.Li-彬

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

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

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

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

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

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

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

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

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

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

          posted on 2008-02-13 22:14 禮物 閱讀(792) 評論(0)  編輯  收藏 所屬分類: CA
          主站蜘蛛池模板: 类乌齐县| 安图县| 眉山市| 泰宁县| 府谷县| 津南区| 安图县| 荃湾区| 团风县| 抚松县| 泾源县| 辽中县| 南阳市| 顺平县| 汝南县| 汉川市| 兴仁县| 绥德县| 安顺市| 苍溪县| 砚山县| 馆陶县| 扬中市| 长子县| 平陆县| 师宗县| 四会市| 海伦市| 元谋县| 永吉县| 盈江县| 永安市| 青河县| 吉安县| 洛浦县| 明星| 玉山县| 永仁县| 商洛市| 高邑县| 乐安县|