熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Javascript >> 正文

為測試 Java 應用程序生成證書鏈

2013-11-23 17:57:35  來源: Javascript 

  學習如何創建數字證書鏈以測試您的軟件IBM 軟件工程師 Paul H Abbott 通過展示如何使用可免費獲得的 OpenSSL 工具箱創建任意長度的證書鏈闡明了這個很少有文檔說明的過程他還描述了常見的證書屬性並展示了一些將證書讀取到 Java keystore 中的示例 Java 代碼
  
  如果正在開發用於公鑰基礎設施 (PKI) 實現安全性的 Java 軟件那麼通常需要創建 數字證書鏈 (也稱為 證書路徑) 以進行測試這是比較簡單的任務但是關於它的文檔說明非常少本文描述了如何用開源 OpenSSL 工具箱 (請參閱 參考資料)創建任意長度的證書鏈還介紹了一些常見的證書屬性並分析了一個讀取證書到 Java keystore 中的示例應用程序
  
  數字證書快速回顧
  本文假定您熟悉 PKI 基礎知識因此我只對數字證書的目的和結構給予簡要回顧以幫助說明證書鏈的概念
  
  數字證書的主要用途是驗證簽名數據的來源如電子郵件和 JAR 文件用證書驗證簽名的數據使接收者知道數據的來源以及它在傳輸過程中是否改變過
  
  在高層一個數字證書包含一個 惟一名 (DN) 和一個 公鑰DN 標識一個具有與證書的公鑰匹配的 私鑰 的實體——如一個人通過用私鑰對證書簽名並將簽名放到證書中而將兩者結合到一起
  
  一個由匹配證書公鑰的私鑰簽名的證書稱為 自簽名 證書根證書頒發機構 (Root certification authorityCA) 證書就屬於這一類用戶證書通常是由不同的私鑰簽名的如 CA 的私鑰這構成了兩證書鏈驗證用戶證書為真涉及驗證其證書中的簽名這需要 CA 的公鑰但在在可以使用 CA 的公鑰之前需要對封裝的 CA 證書進行驗證因為 CA 證書是自簽名的所以用 CA 公鑰驗證證書
  
  用戶證書需要用根 CA 的私鑰簽名它可以用一個中介的私鑰簽名這個私鑰的證書是用 CA 的私鑰簽名的這是一個三證書鏈的例子用戶證書中介證書和 CA 證書但是在鏈中可以有多個中介因此證書鏈可以有任意的長度
  
  值得一提的另一點是證書可以包含額外信息稱為 extensionExtension 可以指定證書的用途以及其他內容根據於證書的用途某些 extension 有可能非常重要
  
  用 OpenSSL 創建證書
  有一些創建證書的工具可以使用在 Java SDK 中自帶的一個命令行工具 keytool 創建自簽名的證書但是證書鏈需要更復雜的軟件如 OpenSSL
  
  獲得 OpenSSL
  可以免費下載 OpenSSL (請參閱 參考資料)如果使用 UNIX那麼很可能在操作系統中已經安裝了 OpenSSL或者它是操作系統的安裝選項Linux 用戶應當查看 /usr/share/sslMicrosoft MKS toolkit 也帶有某個版本的 OpenSSL (在我的計算機中它是在 C:\Program Files\MKS Toolkit\etc\openssl) 如果使用 Windows 但是沒有 MKS那麼可以從 SourceForge 得到必要的二進制文件 (請參閱 參考資料)大多數安裝由三個主要文件組成OpenSSL 二進制文件一個 CAsh shell 腳本和一個 f 配置文件(SourceForge 的軟件包缺少 CAsh 文件可以下載源代碼包獲得缺少的文件
  
  安裝後保證 CAsh 和 OpenSSL 可執行文件在路徑中然後就可以開始創建根證書了
  
  創建根證書
  CA shell 腳本使創建根證書成為一項相對容易的工作首先進入要存放 CA 數據的目錄 (我使用 temp\OpenSSL 目錄) 然後鍵入
  
  CA newca
  
  這會產生一個像清單 的對話框它包括我在提示符下輸入的示例信息
  
  清單 創建根證書
  
  $ CAsh newca
  CA certificate filename (or enter to create)
  
  Making CA certificate
  Using configuration from C:/PROGRA~/MKSTOO~/etc/openssl/f
  Loading screen into random state done
  Generating a bit RSA private key
  ++++++
  ++++++
  writing new private key to /demoCA/private//cakeypem
  Enter PEM pass phrase:
  Verifying password Enter PEM pass phrase:
  
  You are about to be asked to enter information that will be incorporated into your certificate request
  What you are about to enter is what is called a Distinguished Name or a DN
  You will see a number of fields but you can leave some blank
  For some fields there will be a default value
  If you enter the field will be left blank
  
  Country Name ( letter code) [AU]:UK
  State or Province Name (full name) [SomeState]:Hampshire
  Locality Name (eg city) []:Winchester
  Organization Name (eg company) [Internet Widgits Pty Ltd]:IBM UK Ltd
  Organizational Unit Name (eg section) []:JTC
  Common Name (eg YOUR name) []:Pauls Root Certificate
  Email Address []:Pa
  $
  
  完成對話框後OpenSSL 創建以下目錄結構
  
  demoCA/
    cacertpem        root certificate
    indextxt        empty
    serial          text file containing
    certs/          empty
    crl/           empty
    newcerts/        empty
    private/cakeypem    private key
  
  下面是在主目錄中文件的簡單說明
  
  cacertpem 是這個 CA 的 PEM 編碼的(請參閱側欄 PEM 文件格式)根證書根證書驗證由根私鑰簽名的證書
  
  indextxt 是包含所有發布的證書列表的文件
  
  serial 包含將指定給由這個 CA 發布的證書的下一個可用序列號換一種說法它是在這個根證書對簽名請求簽名時指定給一個證書的惟一序列號
  
  cakeypem 是根私鑰這個密鑰用於簽名證書請求它也是 PEM 編碼的
  
  您定義目錄名 (在這個例子中是 demoCA) 和根證書的有效周期在 CAsh 中它默認為 如果想要改變這些值必須編輯這個文件
  
  生成用戶證書
  生成用戶證書有兩步生成一個請求和對請求簽名CA shell 腳本可以用 newreq (生成一個新的請求) 和 sign (簽名一個新請求) 操作符完成這兩步
  
  生成一個新請求
  執行 CA newreq 命令會啟動一個類似於生成新根證書時看到的對話框一個主要的不同是這個對話框提示您輸入 PEM 密碼短語OpenSSL 將使用這個短語編碼私鑰然後將它寫入輸出文件
  
  輸出文件名為 newreqpem包含私鑰和簽名請求可以將它想像為未簽名的證書清單 顯示了一個新請求對話框的例子
  
  清單 示例 newreq 對話框
  
  Using configuration from
  C:/PROGRA~/MKSTOO~/etc/openssl/f
  Loading screen into random state done
  Generating a bit RSA private key
  ++++++
  ++++++
  writing new private key to newreqpem
  Enter PEM pass phrase:
  Verifying password Enter PEM pass phrase:
  
  You are about to be asked to enter information that will be incorporated into your certificate request
  What you are about to enter is what is called a Distinguished Name or a DN
  You will see a number of fields but you can leave some blank
  For some fields there will be a default value
  If you enter the field will be left blank
  
  Country Name ( letter code) [AU]:UK
  State or Province Name (full name) [SomeState]:Hampshire
  Locality Name (eg city) []:Winchester
  Organization Name (eg company) [Internet Widgits Pty Ltd]:IBM Uk Ltd
  Organizational Unit Name (eg section) []:JET
  Common Name (eg YOUR name) []:Paul Abbott
  Email Address []:Paul
  
  Please enter the following extra attributes
  to be sent with your certificate request
  A challenge password []:qwerty
  An optional company name []:
  Request (and private key) is in newreqpem
  
  對請求簽名
  執行 CA sign 命令會用包含在 private/cakeypem 中的根 CA 的私鑰簽名請求請求需要在一個名為 newreqpem 的文件中生成的證書寫入到名為 newcertpem 的文件中這兩個文件都在當前目錄中清單 顯示了示例請求簽名對話框
  
  清單 示例 sign 對話框
  
  $ CAsh sign
  Using configuration from C:/PROGRA~/MKSTOO~/etc/openssl/f
  Loading screen into random state done
  Enter PEM pass phrase:
  Check that the request matches the signature
  Signature ok
  The Subjects Distinguished Name is as follows
  countryName      :PRINTABLE:UK
  stateOrProvinceName  :PRINTABLE:Hampshire
  localityName     :PRINTAB
From:http://tw.wingwit.com/Article/program/Java/Javascript/201311/25426.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.