學習如何創建數字證書鏈以測試您的軟件
IBM 軟件工程師 Paul H
Abbott 通過展示如何使用可免費獲得的 OpenSSL 工具箱創建任意長度的證書鏈
闡明了這個很少有文檔說明的過程
他還描述了常見的證書屬性
並展示了一些將證書讀取到 Java keystore 中的示例 Java 代碼
如果正在開發用於公鑰基礎設施 (PKI) 實現安全性的 Java 軟件
那麼通常需要創建 數字證書鏈 (也稱為 證書路徑) 以進行測試
這是比較簡單的任務
但是關於它的文檔說明非常少
本文描述了如何用開源 OpenSSL 工具箱 (請參閱 參考資料)創建任意長度的證書鏈
還介紹了一些常見的證書屬性並分析了一個讀取證書到 Java keystore 中的示例應用程序
數字證書快速回顧 本文假定您熟悉 PKI 基礎知識
因此我只對數字證書的目的和結構給予簡要回顧以幫助說明證書鏈的概念
數字證書的主要用途是驗證簽名數據的來源
如電子郵件和 JAR 文件
用證書驗證簽名的數據使接收者知道數據的來源以及它在傳輸過程中是否改變過
在高層
一個數字證書包含一個 惟一名 (DN) 和一個 公鑰
DN 標識一個具有與證書的公鑰匹配的 私鑰 的實體——如一個人
通過用私鑰對證書簽名並將簽名放到證書中而將兩者結合到一起
一個由匹配證書公鑰的私鑰簽名的證書稱為 自簽名 證書
根證書頒發機構 (Root certification authority
CA) 證書就屬於這一類
用戶證書通常是由不同的私鑰簽名的
如 CA 的私鑰
這構成了兩證書鏈
驗證用戶證書為真涉及驗證其證書中的簽名
這需要 CA 的公鑰
但在在可以使用 CA 的公鑰之前
需要對封裝的 CA 證書進行驗證
因為 CA 證書是自簽名的
所以用 CA 公鑰驗證證書
用戶證書需要用根 CA 的私鑰簽名
它可以用一個中介的私鑰簽名
這個私鑰的證書是用 CA 的私鑰簽名的
這是一個三證書鏈的例子
用戶證書
中介證書和 CA 證書
但是在鏈中可以有多個中介
因此證書鏈可以有任意的長度
值得一提的另一點是證書可以包含額外信息
稱為 extension
Extension 可以指定證書的用途以及其他內容
根據於證書的用途
某些 extension 有可能非常重要
用 OpenSSL 創建證書 有一些創建證書的工具
可以使用在 Java SDK 中自帶的一個命令行工具 keytool 創建自簽名的證書
但是證書鏈需要更復雜的軟件
如 OpenSSL
獲得 OpenSSL 可以免費下載 OpenSSL (請參閱 參考資料)
如果使用 UNIX
那麼很可能在操作系統中已經安裝了 OpenSSL
或者它是操作系統的安裝選項
Linux 用戶應當查看
/usr/share/ssl
Microsoft MKS toolkit 也帶有某個版本的 OpenSSL
(在我的計算機中它是在 C:\Program Files\MKS Toolkit\etc\openssl
) 如果使用 Windows 但是沒有 MKS
那麼可以從 SourceForge 得到必要的二進制文件 (請參閱 參考資料)
大多數安裝由三個主要文件組成
OpenSSL 二進制文件
一個 CA
sh shell 腳本和一個 f 配置文件
(SourceForge 的軟件包缺少 CA
sh 文件
可以下載源代碼包獲得缺少的文件
)
安裝後
保證 CA
sh 和 OpenSSL 可執行文件在路徑中
然後就可以開始創建根證書了
創建根證書 CA shell 腳本使創建根證書成為一項相對容易的工作
首先
進入要存放 CA 數據的目錄
(我使用 temp\OpenSSL 目錄
) 然後鍵入
CA
newca
這會產生一個像清單
的對話框
它包括我在提示符下輸入的示例信息
清單
創建根證書
$ CA
sh
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/
/cakey
pem
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) [Some
State]:Hampshire
Locality Name (e
g
city) []:Winchester
Organization Name (e
g
company) [Internet Widgits Pty Ltd]:IBM UK Ltd
Organizational Unit Name (e
g
section) []:JTC
Common Name (e
g
YOUR name) []:Pauls Root Certificate
Email Address []:Pa
$
完成對話框後
OpenSSL 創建以下目錄結構
demoCA/
cacert
pem
root certificate
index
txt
empty
serial
text file containing
certs/
empty
crl/
empty
newcerts/
empty
private/cakey
pem
private key
下面是在主目錄中文件的簡單說明
cacert
pem 是這個 CA 的 PEM 編碼的(請參閱側欄 PEM 文件格式)根證書
根證書驗證由根私鑰簽名的證書
index
txt 是包含所有發布的證書列表的文件
serial 包含將指定給由這個 CA 發布的證書的下一個可用序列號
換一種說法
它是在這個根證書對簽名請求簽名時指定給一個證書的惟一序列號
cakey
pem 是根私鑰
這個密鑰用於簽名證書請求
它也是 PEM 編碼的
您定義目錄名 (在這個例子中是 demoCA) 和根證書的有效周期
在 CA
sh 中它默認為
天
如果想要改變這些值
必須編輯這個文件
生成用戶證書 生成用戶證書有兩步
生成一個請求和對請求簽名
CA shell 腳本可以用
newreq (生成一個新的請求) 和
sign (簽名一個新請求) 操作符完成這兩步
生成一個新請求 執行 CA
newreq 命令會啟動一個類似於生成新根證書時看到的對話框
一個主要的不同是這個對話框提示您輸入 PEM 密碼短語
OpenSSL 將使用這個短語編碼私鑰
然後將它寫入輸出文件
輸出文件名為 newreq
pem
包含私鑰和簽名請求
可以將它想像為未簽名的證書
清單
顯示了一個新請求對話框的例子
清單
示例
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
newreq
pem
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) [Some
State]:Hampshire
Locality Name (e
g
city) []:Winchester
Organization Name (e
g
company) [Internet Widgits Pty Ltd]:IBM Uk Ltd
Organizational Unit Name (e
g
section) []:JET
Common Name (e
g
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 newreq
pem
對請求簽名 執行 CA
sign 命令會用包含在 private/cakey
pem 中的根 CA 的私鑰簽名請求
請求需要在一個名為 newreq
pem 的文件中
生成的證書寫入到名為 newcert
pem 的文件中
這兩個文件都在當前目錄中
清單
顯示了示例請求
簽名對話框
清單
示例
sign 對話框
$ CA
sh
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