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

来源:互联网 发布:帝国cms根目录 编辑:程序博客网 时间:2024/06/05 17:59

4 命令

4.1. 创建或添加数据到密钥库中

        -genkeypair {-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname dname] [-keypass keypass] {-validity valDays} {-storetype storetype} {-keystorekeystore} [-storepass storepass] {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}

         生成一个密钥对(一个公钥和与之关联的一个私钥),封装公钥到一个X.509 v3自签名的证书中,这个自签名的证书将作为一个单独的证书链存储,这个证书链和私钥被存储在一个新的密钥库条目中,这个条目使用alias 标识。        

        keyalg 指定生成密钥对所使用的算法,keysize 指定了生成密钥的长度,sigalg 指定这个自签名证书的签名算法,这个算法必须和keyalg 密钥算法对应起来。

        dname 指定X.500 Distinguished Name ,dname 必须和alias 关联在一起, dname 被使用作为自签名证书的issuer subject 字段,如果可分辨名称(distinguished name)没有被指定在命令行中,系统将提示用户输入。

        keypass 指定一个保护私钥的密码,如果私钥密码没有被提供在命令行中,系统将提示用户,如果用户在提示行中直接回车,跳过密码,则系统将私钥密码和密钥库的密码设置成为相同,密码至少是6个字符长度。

        valDays 指定证书的有效期。

        这个命令在以前的版本中被命名为 -genkey ,旧的命名任然被支持在新的版本中。

       -genseckey {-alias alias} {-keyalg keyalg} {-keysize keysize} [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerClassprovider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}

        生成一个密钥并存储在使用alias 标识的新的KeyStore.SecretKeyEntry 中。

        keyalg 指定生成密钥的算法,keysize 指定密钥的长度,keypass 指定密钥的保护密码,如果密码没有在命名行中给出,系统会提示用户,如果用户在提示行中直接回车,跳过密码,则系统将私钥密码和密钥库的密码设置成为相同,密码至少是6个字符长度。

        -importcert {-alias alias} {-file cert_file} [-keypass keypass] {-noprompt} {-trustcacerts} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}

        从cert_file 文件中读取证书或者证书链(证书链由PKCS#7格式的回复提供),存储在一个密钥库条目中,并使用alias 标识,如果没有指定文件,证书或者PKCS#7回复从标准输入流中读取。

        keytool 可以导入 X.509 v1, v2, v3版本的证书,和PKCS#7格式的证书链,导入的数据可以是二进制编码格式,也可以是可打印的编码格式(比如Base64 编码),这些编码必须在Internet RFC 1421 standard 中定义, 可打印的编码必须被包围在"-----BEGIN"字符串和“-----END”字符串之间。

        导入证书有两种原因,

        1、添加该证书到信任证书列表中。

        2、导入一个被 CA签名的证书请求。

        导入的任意一种类型都是由-alias选项的值标识:

        · 如果-alias选项指定的别名值,不指向任何条目,keytool工具假定你正在添加一个受信任的证书条目,在这种情况下,别名值不应该存在于密钥库中,如果别名值已经在密钥库中存在,keytool会输出一个错误信息,

        · If the alias points to a key entry, then keytool assumes you are importing a certificate reply.

        · 如果别名指向一个关键条目,keytool假定你正在导入一个证书应答。

        导入新的信任证书

        添加一个证书到密钥库之前,keytool 尝试构建一个信任的证书链,从这个证书到一个自签名的证书(根证书),正在使用的受信任的证书。

        如果-trustcacerts选项被指定,为构建信任链需要考虑额外的证书,这些证书存储在 "cacerts"文件中,

        如果keytool 建立从这个证书到一个自签名的证书信任链失败,这个证书的信息将被打印出来,并且系统提示用户确认这个证书,

        导入证书应答(向证书认证中提出一个证书请求之后,认证中心将颁发一个证书,或者是证书链作为应答)

        当导入证书应答时,从密钥库中使用受信任的证书验证这个证书应答,

        下面是描述一个确定证书是可信的方法:

        如果应答是一个单独的可信任的 X.509 证书,keytool 尝试建立一个信任链,从这个证书开始到一个自签名的证书(根证书)结束,该认证答复和证书的层次结构用于验证证书应答,如果一个信任链不能被建立,证书应答就不会被导入,在这种情况下,keytool 不会打印出证书信息,不会提示用户验证证书,因为它是非常困难,对用户来说,去确定证书答复的真实性。

        如果应答是一个 PKCS#7 格式的证书链,证书链是有序的(用户的证书是第一个,自签名的根证书是最后一个),keytool尝试去匹配这个应答中的根证书,使用密钥库中的任何一个受信任的证书,如果没有发现相匹配的证书,这个根证书的信息将被打印出来,并且提示用户去验证它。

        如果证书应答中的公钥匹配alias 指定的已经存储的用户的公钥,旧的证书链被替换为应答中的新的证书链,

        这个命令在以前的版本中被命名为-import,旧的命名任然被支持在新的版本中。

        -importkeystore -srckeystore srckeystore -destkeystore destkeystore {-srcstoretype srcstoretype} {-deststoretype deststoretype} [-srcstorepass srcstorepass] [-deststorepass deststorepass] {-srcprotected} {-destprotected} {-srcalias srcalias {-destalias destalias} [-srckeypass srckeypass] [-destkeypass destkeypass] } {-noprompt} {-srcProviderName src_provider_name} {-destProviderName dest_provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}

        导入一个单独的条目或者是所有的条目,从一个原密钥库到目标密钥库。

        当srcalias 选项被指定,这个命令导入一个别名指定的单独的条目到目标密钥库,如果目标密钥库没有使用destalias 选项指定一个别名,srcalias 指定的别名将作为目标密钥库中的别名,如果原条目使用密码保护,导出条目时需要指定srckeypass 选项,如果srckeypass 选项没有在命令行中被提供,keytool 尝试使用srcstorepass(密钥库密码) 导出条目,如果srcstorepass 也没有被提供或者提供是错误的,系统将提示用户输入密码,使用destkeypass 选项保护目标条目,如果destkeypass 没有被提供,系统将使用原条目密码保护目标条目。

        如果srcalias 选项没有被提供,在原密钥库中的所有的条目将被导入到目标密钥库中,每一个目标条目将使用和原条目相同的别名,如果原条目被密码保护,系统使用srcstorepass 导出条目,如果srcstorepass 没有被提供或者是错误的,系统会提示用户输入密码,如果原密钥库中的条目类型在目标密钥库中不被支持,或者是发生错误在存储一个条目到目标密钥库中时,系统将会提示用户是需要跳过当前条目还是继续,或者是退出。系统会使用原条目密码保护目标条目。

        如果指定的目标别名已经存在于目标密钥库中,系统会提示用户是覆盖条目还是创建一个新的条目使用不同的别名。

        注意如果-noprompt选项在命令行中出现,系统不会提示用户输入新的别名,现存的条目将会被目标别名自动覆盖,系统不会导入该条目,该条目被自动跳过,并给出一条警告信息。

4.2. 导出数据

        -certreq {-alias alias} {-sigalg sigalg} {-file certreq_file} [-keypass keypass] {-storetypestoretype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}

        生成一个证书签名请求(CSR),使用PKCS#10格式。

        一个CSR将被发送给证书认证中心(CA)CA会认证这个证书请求(通常是离线认证),认证完成之后会返回一个证书或者是证书链,用于代替密钥库中现存的证书链(这个证书链最初是一个自签名的证书)。

        一个与别名关联的私钥和X.500可分辨名称将用于创建PKCS#10证书请求。为了对私钥提供访问保护,必须提供一个合适的密码,如果keypass 选项没有在命令行中提供,并且保护私钥的密码不同于密钥库的密码,系统会提示用户输入。

        sigalg 指定了对CSR进行签名的算法。

        CSR 被存储在certreq_file 文件中,如果没有指定文件,CSR 将输出到标准输出流。

        使用importcert 命令导入从CA接收到的应答(这个应答通常是一个证书或者是证书链)。

        -exportcert {-alias alias} {-file cert_file} {-storetype storetype} {-keystore keystore} [-storepassstorepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArgprovider_arg}} {-rfc} {-v} {-protected} {-Jjavaoption}

        从密钥库中读取与alias 关联的证书,并且将证书信息存储在 cert_file 文件中。

        如果没有指定文件,证书信息被输出到标准输出流中。

        该证书默认使用二进制编码输出,如果-rfc选项被指定,也可以使用可打印的编码格式输出。

        如果别名是指受信任的证书,这个证书被输出。Otherwise, alias refers to a key entry with an associated certificate chain. In that case, the first certificate in the chain is returned. This certificate authenticates the public key of the entity addressed by alias.

        这个命令在以前的版本中叫做-export,在将来的版本中任然会支持该命名,

4.3. 显示数据

        -list {-alias alias} {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v | -rfc} {-protected} {-Jjavaoption}

        将由alias 指定的密钥库中条目的内容打印输出到标准输出流,如果没有指定别名,系统会打印出所有的条目。

        这一条命令默认打印一个证书的MD5指纹信息,如果-v选项被指定,系统使用人类可阅读的格式打印证书信息,附带一些其他的信息,比如证书的拥有者、发布者、序列号和一些扩展项。如果-rfc选项被指定,系统使用可打印的编码格式显示证书内容。

        -v -rfc选项不能同时制定。

        -printcert {-file cert_file} {-v} {-Jjavaoption} 

        从 cert_file 文件中读取证书,并使用人类可以阅读的格式打印证书的内容。

4.4. 管理密钥库

        -storepasswd [-new new_storepass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-Jjavaoption}

        修改密码用于保护密钥库内容的完整性,new_storepass 指定新的密码,密码长度至少6个字符。

        -keypasswd {-alias alias} [-keypass old_keypass] [-new new_keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClassprovider_class_name {-providerArg provider_arg}} {-v} {-Jjavaoption}

        修改私钥的密码,old_keypass 指定旧的密码,new_keypass 指定新的密码,密码长度至少6个字符。

        如果-keypass选项没有在命令行中指定,并且保护私钥的密码不同于密钥库的密码,系统会提示用户输入。

        如果-new 选项没有在命令行中指定,系统会提示用户输入。

        -delete [-alias alias] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClass provider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}

        从密钥库中删除alias标识的的条目,如果alias 选项没有在命令行中指定,系统会提示用户输入。

        -changealias {-alias alias} [-destalias destalias] [-keypass keypass] {-storetype storetype} {-keystore keystore} [-storepass storepass] {-providerName provider_name} {-providerClassprovider_class_name {-providerArg provider_arg}} {-v} {-protected} {-Jjavaoption}

        移动alias 标识的条目到新的条目中,destalias 指定新的条目的别名,如果新的别名没有在命令行中指定,系统会提示用户输入。如果需要移动的条目受密码保护,需要使用-keypass选项指定密码,如果没有使用-keypass选项指定密码,系统尝试使用storepass (密钥库密码)移动条目,如果尝试失败,系统会提示用户输入密码。

4.5. 获取帮助

        -help 列出基本的命令和选项。



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


0 0