keytool - 密钥和证书管理工具(三)

5 例子

        假设你希望创建一个密钥库来管理你的公共/私有密钥对和证书。

5.1. 生成密钥对

        首先需要创建一个密钥库,并生成密钥对,使用下面的命令行:

         keytool -genkeypair -dname "cn=Mark Jones, ou=JavaSoft, o=Sun, c=US"

                 -alias business -keypass kpi135 -keystore C:\working\mykeystore

                -storepass ab987c -validity 180

        (请注意:以上输入必须在同一行命令行中,此处为了易于阅读,使用多行展示)

        这行命令创建密钥库的名称为“mykeystore”存储在“C:\working”目录下(假设这个文件事先不存在),密钥库的密码为“ab987c”,生成了一个公钥/私钥密钥对条目,条目的公共名称是“Mark Jones

,组织单元是“JavaSoft”,组织是“Sun”,代表国家的两个字符“US”,使用默认的DSA密钥算法生成密钥,密钥的长度为1024

        这行命令创建了一个自签名的证书(使用默认的“SHA1withDSA”签名算法),这张证书包含了公钥和可辨别名称等信息,证书的有效期是180天,证书和私钥通过别名“business”关联在一起,保护私钥的密码为“kpi135”

        这条命令可以缩短为如下形式,未指定的选项可以使用默认值,系统会提示你输入所需要的值,

        keytool -genkeypair

        使用这条命令,系统会创建一个别名为“mykey”的密钥库条目,同时生成新的密钥对和证书,证书的有效期为90天,在用户的工作目录下会生成一个密钥库,密钥库的名称为“.keystore”,系统会提示用户输入可辨别名称的信息、密钥库密码和私钥密码。

5.2. 从证书认证中心声请签名证书

        到目前我们已经得到了一个自签名的证书,如果一个被CA签名的证书,将会被更多人信任。要得到这样一个签名,首先生成证书签名请求(CSR),通过以下命令:

         keytool -certreq -file MarkJ.csr

        该命令生成一个CSR (该条目使用默认的别名“mykey”)并将该请求存放在MarkJ.csr文件中,提交给请求给CA,比如:VeriSign等,CA通常将离线验证申请者,验证通过之后,申请者将收到一个由CA签名的证书,(在某些情况下,CA会返回一个证书链, each one authenticating the public key of the signer of the previous certificate in the chain.)

5.3. 导入CA的证书

        你需要使用证书链替换你的自签名证书,在这个证书链中的每一个证书都可以用证书的签名者(证书链中前一个证书)的公钥验证,一直到根CA,三级证书可以使用二级证书的公钥验证,二级证书可以使用根证书公钥验证。

        导入来自CA的证书应答之前,你需要一个或者更多“受信任的证书”,在你的密钥库中,或者在“cacerts”密钥库文件中:

        1、如果证书应答是一个证书链,你只需要证书链中的顶级证书(这个证书是使用CA的公钥验证根CA证书)。

        2、如果证书应答是一个单独的证书,你需要一个发布者的证书(你收到的证书是由这个发布者签名的),如果这个发布者证书不是一个自签名的证书,你需要一个签名者的证书,依此类推,直到一个自签名的CA根证书。

        “cacerts”密钥库文件中附带5VeriSign 根证书,所以你或许不需要导入VeriSign 的证书到你的密钥库中,作为信任的证书。但是如果你从不同的CA声请了一个签名证书,而这个CA的证书没有导入到“cacerts”密钥库中,你需要导入CA的证书,让这个CA的证书成为受信任的证书。

        A certificate from a CA is usually either self-signed, or signed by another CA (in which case you also need a certificate authenticating that CA's public key). Suppose company ABC, Inc., is a CA, and you obtain a file named "ABCCA.cer" that is purportedly a self-signed certificate from ABC, authenticating that CA's public key.

        在导入一个证书作为信任的证书之前,确保该证书是有效的,先查看一下(使用keytool -printcert命令,或者使用keytool -importcert命令,不带有-noprompt选项),确认所显示的证书指纹符合预期的。你可以给发送证书的人打电话,确认证书的指纹。只有指纹相等的情况,才保证证书没有在运输途中换成别人的(例如,一个攻击者的)证书。如果发生这种攻击,在你导入证书之前,你不检查证书,你最终将信任攻击者已经签名的任何东西。

        如果你信任证书的有效性,你可以将它添加到你的密钥库中,通过以下命令:

        keytool -importcert -alias abc -file ABCCA.cer

        这行命令会在你的密钥库中创建一个受信任的证书条目,这个条目包含了ABCCA.cer文件的数据,该条目的别名为“abc”。

5.4. 导入来自CA的证书应答

        一旦你已经导入一个可以使用CA公钥签证签名的CA证书,或者在“cacerts”密钥库有该CA的证书,你就可以导入证书应答,从而取代你的自签名证书,

        例如,假设你发送你的证书签名请求到VeriSign,你可以使用下面的命令来导入证书应答,假设返回的证书文件是VSMarkJ.cer

        keytool -importcert -trustcacerts -file VSMarkJ.cer

5.5. 导出证书,证书中的公钥用于验证签名

        假如你使jarsigner 工具对java归档(JAR)文件进行了签名,客户端使用这个JAR文件之前,需要认证你对这个JAR文件的签名。

        验证签名的一种方式是,导入你公钥证书到客户端的密钥库中,将此公钥证书作为受信任的条目。你可以导出你的证书,并向客户端提供这个证书。例如,你可以使用下面的命令,复制你的证书到一个文件中,将其命名为 MJ.cer ,加入证书条目的别名为“mykey”:

        keytool -exportcert -alias mykey -file MJ.cer

        将这个证书和JAR签名文件发送给客户端,客户端可以使用jarsigner 工具来验证你的签名。

5.6. 导入密钥库

        命令“importkeystore”常常用于将一个密钥库中的所有条目导入到另外一个密钥库,包括密钥和证书。你可以使用这个命令导入不同类型密钥库中的条目,导入目标密钥库中条目,将使用和原来一样的别名和保护密码(保护密码用于保护安全密钥和私钥),当keytool工具从原密钥库读取私钥和安全密钥需要密码时,系统会提示用户输入密码,如果导入到目标密钥库时,遇到别名冲突,系统提示用户输入新的别名,或者直接覆盖现有条目。

        例如,可以使用下面的命令,从普通的JKS 类型密钥库key.jks中导入条目到PKCS #11类型的密钥库:

        keytool -importkeystore

                -srckeystore key.jks -destkeystore NONE

                -srcstoretype JKS -deststoretype PKCS11

                -srcstorepass changeit -deststorepass topsecret

        importkeystore 命令也可以导入单个条目从原密钥库到目标密钥库。这种情况,你需要使用srcalias选项指定将要导出的条目的别名,同时需要使用destalias选项指定导入别名,保护密码也一样,需要使用srckeypassdestkeypass选项,例如:

        keytool -importkeystore

            -srckeystore key.jks -destkeystore NONE

            -srcstoretype JKS -deststoretype PKCS11

            -srcstorepass changeit -deststorepass topsecret

            -srcalias myprivatekey -destalias myoldprivatekey

            -srckeypass oldkeypass -destkeypass mynewkeypass

            -noprompt

 

 

        原文http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值