2007年12月3日星期一

JavaSecurity_004: keytool 使用指南

1. 创建密钥库
密钥库是存放密钥和数字证书的文件。
使用非交互模式创建密钥库如下:
keytool -genkey -dname "CN=Ma Ping,OU=JavaNeverDie,O=Tsinghua University,L=CY,ST=Beijing,C=CN" -alias pma -keyalg RSA -keysize 1024 -keystore pmakeystore -keypass javaneverdie -storepass javaneverdie -validity 365

-dname 参数说明:
CN:Common Name 姓氏名字。
OU:Organization Unit 组织单位名称。
O:Organization 组织名称。
L:Locality 城区名称。
ST:State 省份名称。
C:Country 国家代码。

以上操作创建了一个公钥和一个私钥,同时创建了一个数字证书,证书中包含该公钥和该公钥对应的主体("CN=Ma Ping,OU=JavaNeverDie,O=Tsinghua University,L=CY,ST=Beijing,C=CN")

2. 查看密钥库
keytool -list -v -keystore pmakeystore -storepass javaneverdie
或查看某一条条目:keytool -list -v -keystore pmakeystore -storepass javaneverdie -alias pma
输出如下:

Keystore 类型: jks
Keystore 提供者: SUN

您的 keystore 包含 1 输入

别名名称: pma
创建日期: 2009-6-19
输入类型:KeyEntry
认证链长度: 1
认证 [1]:
Owner: CN=Ma Ping, OU=JavaNeverDie, O=Tsinghua University, L=CY, ST=Beijing, C=CN
发照者: CN=Ma Ping, OU=JavaNeverDie, O=Tsinghua University, L=CY, ST=Beijing, C=CN
序号: 4a3b3ba7
有效期间: Fri Jun 19 15:17:59 CST 2009 至: Sat Jun 19 15:17:59 CST 2010
认证指纹:
MD5: 68:29:7F:C7:F2:E6:61:0B:DE:27:D7:54:C0:B6:06:6C
SHA1: EA:F3:A8:1E:35:FD:24:25:F7:47:08:49:C6:E1:A1:1A:75:23:C1:59


*******************************************
*******************************************

3. 导出/导入数字证书
3.1 导出
keytool -export -keystore pmakeystore -storepass javaneverdie -alias pma -file pma.cer
由于数字证书中不包含私钥,因此不需要条目的密码。
用上面的命令导出的文件是二进制的,不利于公布证书,可以使用参数-rfc(即BASE64编码),将证书内容编码。
keytool -export -keystore pmakeystore -storepass javaneverdie -alias pma -file pma_rfc.cer -rfc
文件内容如下:
-----BEGIN CERTIFICATE-----
MIICWDCCAcECBEo7O6cwDQYJKoZIhvcNAQEEBQAwczELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB0Jl
aWppbmcxCzAJBgNVBAcTAkNZMRwwGgYDVQQKExNUc2luZ2h1YSBVbml2ZXJzaXR5MRUwEwYDVQQL
EwxKYXZhTmV2ZXJEaWUxEDAOBgNVBAMTB01hIFBpbmcwHhcNMDkwNjE5MDcxNzU5WhcNMTAwNjE5
MDcxNzU5WjBzMQswCQYDVQQGEwJDTjEQMA4GA1UECBMHQmVpamluZzELMAkGA1UEBxMCQ1kxHDAa
BgNVBAoTE1RzaW5naHVhIFVuaXZlcnNpdHkxFTATBgNVBAsTDEphdmFOZXZlckRpZTEQMA4GA1UE
AxMHTWEgUGluZzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAjds1LLWeN0ceBwIgetR1TEGk
O3BF5JpDPLTgvqRFi07bhYIJ2FFpAE/d8bbEeJ4b7f+6p94VqLGLNuFrbgqobPr4Tk79WZ6jp71e
1jEB0dczJqk860+JkWWCze7mtvr9yqOd7CbegL5GD6An5A5A4lrb6XGQo8b6MDhUeLpOtu0CAwEA
ATANBgkqhkiG9w0BAQQFAAOBgQAt7CUMIv26B1yo23b26LqDMmXn6AiIsc+Fy5XHmppXwDPZ7uw+
lwDPRd9PvtT7wXUQYh6WfGFkIegQWK5JU/H+BflCykVvw1n+umAPYizhq8IW/sygqSPazqClnJOJ
a+phvponaKE8y1jiWdwzq6Muu+tMF0/m0+GZD5Sd1H5dmQ==
-----END CERTIFICATE-----

3.2 导入
首先要把 CA证书导入到密钥库中,然后再把该CA签发的证书导入到同一个密钥库中,构成完整的证书链。
keytool -import -keystore pmakeystore -storepass javaneverdie -alias ca -file ca.cer
keytool -import -keystore pmakeystore -storepass javaneverdie -alias pma -file pma_signed.cer
查看keystore时,会发现条目ca是trustedCertEntry,因为CA证书不包含私钥。
观察CA签发的证书,依然是条目pma(因为公钥前后没有发生改变),但签发者已经变成该CA,而不是原先的自签名。

4. 查看数字证书
keytool -printcert -file pma.cer

5. 删除指定条目/修改指定条目的口令
keytool -delete -keystore pmakeystore -storepass javaneverdie -alias pma
keytool -keypasswd -keystore pmakeystore -storepass javaneverdie -alias pma

问题1:如何向CA申请证书签名
(1)创建自签名的证书
创建过程参考 1. 创建密钥库。
(2)创建Certificate Signing Request(CSR)证书签发请求文件
keytool -certreq -keystore pmakeystore -storepass javaneverdie -alias pma -file pma.csr
由于任何人都可以创建数字证书,要想检查某个数字证书是否真实可靠,需要由权威机构来验证:即权威机构用自己的私钥对证书进行数字签名。
这样的权威机构称为CA(Certification Authorities),如Verisign、Thawte。
(3)访问CA站点,输入申请者信息
http://www.verisign.com,详细步骤略。
最终应该获得该CA的根证书getcacert和该CA签发的证书(从email中拷贝,保存为.cer文件)。
(4)导入该CA的根证书getcacert和该CA签发的证书
导入过程参考 3. 导出/导入数字证书。

没有评论: