Keytool使用

lizhunk 贡献于2010-12-08

作者 雨林木风  创建于2010-11-30 11:19:00   修改者雨林木风  修改于2010-12-03 12:44:00字数7641

文档摘要:Keytool是一个Java数据证书的管理工具。Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。
关键词:

一:Tomcat5.5单项认证的配置方法: 第一步:Tomcat5.5使用SSL功能、证书生成(使用JDK1.5自带的keytool.exe工具) 注意必须使用tomcat使用的jdk版本去生成 命令行中C:\Java\jdk1.5.0_09\bin> keytool -genkey -alias tomcat -keyalg RSA -validity 365 注:-alias tomcat 设定别名; -validity 365 证书有效期设为365天; 生成证书过程中,提示设定的密码时,使用和keystore相同的密码。默认回车就可以了 生成的证书默认是放在当前系统用户的主目录下(C:\Documents and Settings\Administrator),复制至Tomcat的主目录以便于下一步中的server.xml的keystoreFile的值设定。 第二步:Tomcat5.0.28的server.xml,打开SSL连接器选项 注:即添加后面那两属性值,keystoreFile的路径,keystorePass的密码。 二:Tomcat5.5的SSL双项认证的配置方法 第一步:为服务器生成证书 使用keytool为Tomcat生成证书,假定目标机器的域名是“localhost”,keystore文件存放在 “D:\tomcat.keystore”,口令为“123456”,使用如下命令生成: C:\Java\jdk1.5.0_09\bin>keytool -genkey -v -alias tomcat -keyalg RSA -keystore D:\tomcat.keystore -dname "CN=localhost,OU=cn,O=cn,L=cn,ST=cn,C=cn" -storepass 123456 -keypass 123456 既如图: 如果Tomcat所在服务器的域名不是“localhost”,应改为对应的域名,如“www.sina.com.cn”,否则浏览器会弹出警告窗口,提示用户证书与所在域不匹配。在本地做开发测试时,应填入“localhost” 第二步:为客户端生成证书 下一步是为浏览器生成证书,以便让服务器来验证它。为了能将证书顺利导入至IE和Firefox,证书格式应该是PKCS12,因此,使用如下命令生成: C:\Java\jdk1.5.0_09\bin>keytool -genkey -v -alias myKey -keyalg RSA -storetype PKCS12 -keystore D:\my.p12 -dname "CN=MyKey,OU=cn,L=cn,ST=cn,C=cn" -storepass 123456 -keypass 123456 既如下图: 对应的证书库存放在“C:\my.p12”,客户端的CN可以是任意值。稍候,我们将把这个“my.p12”证书库导入到IE和Firefox中。 第三步:让服务器信任客户端证书 由于是双向SSL认证,服务器必须要信任客户端证书,因此,必须把客户端证书添加为服务器的信任认证。由于不能直接将PKCS12格式的证书库导入,我们必须先把客户端证书导出为一个单独的CER文件,使用如下命令: C:\Java\jdk1.5.0_09\bin>keytool -export -alias myKey -keystore D:\my.p12 -storetype PKCS12 -storepass 123456 -rfc -file d:\my.cer 既如下图: 通过以上命令,客户端证书就被我们导出到“C:\my.cer”文件了。下一步,是将该文件导入到服务器的证书库,添加为一个信任证书:命令如下: C:\Java\jdk1.5.0_09\bin>keytool -import -v -file D:\my.cer -keystore D:\tomcat.keystore -storepass 123456 既如图形式: 通过list命令查看服务器的证书库,我们可以看到两个输入,一个是服务器证书,一个是受信任的客户端证书:命令如下: C:\Java\jdk1.5.0_09\bin>keytool -list -keystore D:\tomcat.keystore -storepass 123456 既如图形式: 第四步:配置Tomcat服务器 打开Tomcat根目录下的/conf/server.xml,找到如下配置段,修改如下: 其中,clientAuth指定是否需要验证客户端证书,如果该设置为“false”,则为单向SSL验证,SSL配置可到此结束。如果clientAuth设置为“true”,表示强制双向SSL验证,必须验证客户端证书。如果clientAuth设置为“want”,则表示可以验证客户端证书,但如果客户端没有有效证书,也不强制验证。 第五步:导入客户端证书 如果设置了clientAuth="true",则需要强制验证客户端证书。双击“C:\my.p12”即可将证书导入至IE: 导入证书后,即可启动Tomcat,用IE进行访问。如果需要用FireFox访问,则需将证书导入至FireFox: 自此配置结束,用户可以在地址栏输入https://localhost:8443进行验证 Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。 Keytool是一个Java数据证书的管理工具。 keystore Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据: 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 可信任的证书实体(trusted certificate entries)——只包含公钥 Alias(别名) 每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写 keystore的存储位置 在没有制定生成位置的情况下,keystore会存在与用户的系统默认目录, 如:对于window xp系统,会生成在系统的C:\Documents and Settings\UserName\ 文件名为“.keystore” keystore的生成 引用keytool -genkey -alias tomcat -keyalg RSA -keystore d:\mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass -validity 180 参数说明: -genkey表示要创建一个新的密钥 -dname表示密钥的Distinguished Names, CN=commonName OU=organizationUnit O=organizationName L=localityName S=stateName C=country Distinguished Names表明了密钥的发行者身份 -keyalg使用加密的算法,这里是RSA -alias密钥的别名 -keypass私有密钥的密码,这里设置为changeit -keystore 密钥保存在D:盘目录下的mykeystore文件中 -storepass 存取密码,这里设置为changeit,这个密码提供系统从mykeystore文件中将信息取出 -validity该密钥的有效期为 180天 (默认为90天) 1,产生一个密钥对 keytool -genkey -alias mykeypair -keypass mykeypairpwd 过程如下: liqingfeng@liqingfeng:~/WORK_APP/keytooltest$ keytool -genkey -alias mykeypair -keypass mykeypairpwd 输入keystore密码: 123456 您的名字与姓氏是什么? [Unknown]: fingki 您的组织单位名称是什么? [Unknown]: server 您的组织名称是什么? [Unknown]: server 您所在的城市或区域名称是什么? [Unknown]: bj 您所在的州或省份名称是什么? [Unknown]: bj 该单位的两字母国家代码是什么 [Unknown]: CN CN=fingki, OU=server, O=server, L=bj, ST=bj, C=CN 正确吗? [否]: y liqingfeng@liqingfeng:~/WORK_APP/keytooltest$ 这样将产生一个keypair,同时产生一个keystore.默认名是.keystore,存放到user-home目录 假如你想修改密码,可以用:keytool -keypasswd -alias mykeypair -keypass mykeypairpwd -new newpass 2,产生一个密钥对,存放在指定的keystore中(加上-keystore 参数) keytool -genkey -alias mykeypair -keypass mykeypairpwd -keystore mykeystore 过程与上面的相同。 执行完后,在当前目录下产生一个名为mykeystore的keystore,里面有一个别名为mykeypair的keypair。 3,检查一个keystore中的内容 keytool -list -v -alias mykeypair -keystore mykeystore 参数 -v指明要列出详细信息 -alias指明列出指定的别名为mykeypair的keypair信息(不指定则列出所有) -keystore指明要列出名字为mykeystore的keystore中的信息 过程如下: liqingfeng@liqingfeng:~/WORK_APP/keytooltest$ keytool -list -v -keystore mykeystore 输入keystore密码: 123456 Keystore 类型: jks Keystore 提供者: SUN 您的 keystore 包含 1 输入 别名名称: mykeypair 创建日期: 2008-4-16 输入类型:KeyEntry 认证链长度: 1 认证 [1]: Owner: CN=fingki, OU=server, O=server, L=bj, ST=bj, C=CN 发照者: CN=fingki, OU=server, O=server, L=bj, ST=bj, C=CN 序号: 48058c3c 有效期间: Wed Apr 16 13:18:52 GMT+08:00 2008 至: Tue Jul 15 13:18:52 GMT+08:00 2008 认证指纹: MD5: FD:C3:97:DC:84:A0:D8:B2:08:6F:26:7F:31:33:C3:05 SHA1: A3:21:6F:C6:FB:5F:F5:2D:03:DA:71:8C:D3:67:9D:1C:E1:27:A5:11 ******************************************* ******************************************* liqingfeng@liqingfeng:~/WORK_APP/keytooltest$ 4,Keystore的产生: 当使用-genkey 或-import或-identitydb命令添加数据到一个keystore,而当这个keystore不存在时,产生一个keystore.默认名是.keystore,存放到user-home目录. 当用-keystore指定时,将产生指定的keystore. 5,Keystore的实现: Keytool 类位于java.security包下,提供一个非常好的接口去取得和修改一个keystore中的信息. 目前有两个命令行:keytool和jarsinger,一个GUI工具Policy 可以实现keystore.由于keystore是公开的,用户可以用它写一些额外的安全应用程序. Keystore还有一个sun公司提供的內在实现.它把keystore作为一个文件来实现.利用了一个keystore类型(格式)"JKS".它用单独的密码保护每一个私有钥匙.也用可能不同的密码保护整个keystore的完整性. 支持的算法和钥匙大小: keytool允许用户指定钥匙对和注册密码服务供应者所提供的签名算法.缺省的钥匙对产生算法是"DSA".假如私有钥匙是"DSA"类型,缺省签名算法是"SHA1withDSA",假如私有钥匙是"RSA"类型,缺省算法是"MD5withRSA". 当产生一个DSA钥匙对,钥匙必须在512-1024位之间.对任何算法的缺省钥匙大小是1024位. 6,关于证书 一个证书是一个实体的数字签名,还包含这个实体的公共钥匙值. 公共钥匙 :是一个详细的实体的数字关联,并有意让所有想同这个实体发生信任关系的其他实体知道.公共钥匙用来检验签名; 数字签名:是实体信息用实体的私有钥匙签名(加密)后的数据.这条数据可以用这个实体的公共钥匙来检验签名(解密)出实体信息以鉴别实体的身份; 签名:用实体私有钥匙加密某些消息,从而得到加密数据; 私有钥匙:是一些数字,私有和公共钥匙存在所有用公共钥匙加密的系统的钥匙对中.公共钥匙用来加密数据,私有钥匙用来计算签名.公钥加密的消息只能用私钥解密,私钥签名的消息只能用公钥检验签名。 实体:一个实体可以是一个人,一个组织,一个程序,一台计算机,一个商业,一个银行,或其他你想信任的东西. 实际上,我们用[1]中的命令已经生成了一个自签名的证书,没有指定的参数都使用的是默认值。 我们也可以用如下命令生成一个自签名的证书: keytool -genkey -dname "CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN" -alias myCA -keyalg RSA -keysize 1024 -keystore myCALib -keypass 654321 -storepass 123456 -validity 3650 这条命令将生成一个别名为myCA的自签名证书,证书的keypair的密码为654321,证书中实体信息为 "CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN",存储在名为myCALib的keystore中(如果 没有将自动生成一个),这个keystore的密码为123456,密钥对产生的算法指定为RSA,有效期为10年。 7,将证书导出到证书文件 keytool -export -alias myCA -file myCA.cer -keystore myCALib -storepass 123456 -rfc 使用该命令从名为myCALib的keystore中,把别名为myCA的证书导出到证书文件myCA.cer中。(其中-storepass指定keystore的密码,-rfc指定以可查看编码的方式输出,可省略)。 8,通过证书文件查看证书信息 keytool -printcert -file myCA.cer 9,密钥库中证书条目口令的修改 Keytool -keypasswd -alias myCA -keypass 654321 -new newpass -storepass 123456 -keystore myCALib 10,删除密钥库中的证书条目 keytool -delete -alias myCA -keystore myCALib 11,把一个证书文件导入到指定的密钥库 keytool -import -alias myCA -file myCA.cer -keystore truststore (如果没有名为truststore的keystore,将自动创建,将会提示输入keystore的密码) 12,更改密钥库的密码 keytool -storepasswd -new 123456 -storepass 789012 -keystore truststore 其中-storepass指定原密码,-new指定新密码。 将[keystore]导入java信任证书库 keytool -import -trustcacerts -alias tomcat_pso -file [keystore] -keypass changeit -keystore "%JAVA_HOME%/jre/lib/security/cacerts" 注:%JAVA_HOME%/jre/lib/security/cacerts为java自带的证书库,默认密码为changeit keytool -list -v -keystore c:/jdk15/jre/lib/security/cacerts (列出信任库中已经存在的证书) keytool -delete -trustcacerts -alias tomcat -keystore c:/jdk15/jre/lib/security/cacerts -storepass changeit(删除某一个证书)

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享文档获得金币 ] 2 人已下载

下载文档