Java安全架构____java的Keytool工具Oracle官方说明文档

keytool -密钥和证书管理工具

管理密钥的密钥存储库(数据库),X。509证书链,受信任的证书。

剧情简介

keytool[commands ]

keytool命令接口已经改变了在Java SE 6中。看到变化部分详细描述。注意,之前定义的命令仍支持。

描述

keytool是一个密钥和证书管理工具。它允许用户管理自己的公钥/私钥对,相关证书用于self-authentication(用户验证本人其他用户/服务)或数据完整性和身份验证服务,使用数字签名。它还允许用户缓存公钥(以证书的形式)的同行交流。

证书进行数字签名语句从一个实体(人、公司等)、说的公钥(和其他一些信息)的其他实体有一个特定的值。(见证书)。当数据进行数字签名,签名可以验证检查数据的完整性和真实性。正直意味着数据没有被修改或篡改,和真实性意味着数据确实来自谁声称已经创建并签署。

keytool也使用户能够管理密钥用于对称加密/解密(例如DES)。

keytool存储的密钥和证书密钥存储库.

命令和选项的笔记

各种命令和选项列出并描述了下面。注意:

  • 所有命令和选项名称是之前一个减号(-)。
  • 每个命令的选项可能提供的任何顺序。
  • 所有项目不斜体或括号或方括号必须出现。
  • 括号周围通常表明一个选项默认的值将被使用,如果在命令行上没有指定的选项。括号也在使用 -v, -rfc, -J选择,只有有意义如果他们出现在命令行(也就是说,他们没有任何“默认”值以外不存在)。
  • 括号围绕一个选项表示用户输入值(s)如果在命令行上没有指定的选项。( -keypass选项,如果您不指定选��在命令行上,keytool将首先尝试使用keystore密码恢复私营/密钥,如果失败,将会提示您为私营/密钥密码。)
  • 项目斜体(选项值)表示必须提供的实际值。例如,这里的格式 -printcert命令:
    keytool -printcert - file cert_file } { { - v }
    

    当指定一个 -printcert命令,cert_file替换为实际的文件名称,如:

      keytool -printcert -file VScert.cer
    
  • 选项值必须引用如果他们包含一个空白(空间)。
  •  -help命令是默认的。因此,命令行
       keytool
    
    相当于
       keytool -help
    

选择默认值

以下是各种选项的默认值。
 -alias "mykey"

-keyalg
    "DSA" (when using -genkeypair)
    "DES" (when using -genseckey)

-keysize
    1024 (when using -genkeypair)
    56 (when using -genseckey and -keyalg is "DES")
    168 (when using -genseckey和-keyalg“DESede”)

有效期90年

keystore文件命名.keystore在用户的主目录

-storetype密钥存储库的价值”。安全属性文件类型”属性,
返回的是静态的getDefaultType method in java.security.KeyStore

如果写作- file stdin如果阅读、stdout

保护错误

在生成公钥/私钥对,签名算法(—sigalg选项)来自底层的私有密钥的算法:如果底层私钥的类型是“DSA”—sigalg选项默认为“SHA1withDSA”,如果底层私钥的类型是“RSA”—sigalg默认为“SHA256withRSA”。请查阅 Java加密体系结构API规范和参考的完整列表-keyalg—sigalg你可以选择从。

常见的选项

 -v选择除了所有命令都可以出现  -help。如果它出现时,它意味着“冗长”模式;更多信息将被输出。

还有一个-Jjavaoption可能出现的任何命令的选项。如果它出现时,指定的javaoption字符串直接通过Java解释器。这个选项不应该包含任何空格。它是用于调整执行环境或内存使用。可能翻译选项的列表类型 java -h java -X在命令行中。

这些选项可能会出现所有命令操作密钥存储库:

-storetype storetype
这个限定符指定密钥存储库的类型实例化。
keystore keystore
密钥存储库的位置。

如果JKSstoretype使用keystore文件还不存在,那么某些keytool命令可能导致一个新的密钥存储库文件被创建。例如,如果 keytool -genkeypair调用和 -keystore没有指定选项,默认的密钥存储库文件命名 .keystore在创建用户的主目录,如果它不存在。类似地,如果keystore ks_file选择指定但ks_file不存在,那么它将被创建

注意的输入流 -keystore选项传递给 KeyStore.load方法。如果 NONE被指定为URL,然后空流传递到吗 KeyStore.load方法。 NONE如果指定应该吗 KeyStore不是基于文件(例如,如果它驻留在硬件令牌设备)。

对于storepass对于storepass
密码用于保护密钥存储库的完整性。

对于storepass必须至少6个字符长。必须提供给所有命令,访问密钥存储库的内容。对于这样的命令,如果一个 -storepass在命令行选项没有提供,则提示用户。

从密钥库检索信息时,密码是可选的;如果没有密码,不能检查检索信息的完整性并显示一个警告。

-providerName provider_name
用于识别加密服务提供者的名字当安全属性文件中列出。
providerclass provider_class_name
用于指定加密服务提供者的主类文件的名称,当服务提供者不安全属性文件中列出。
-providerArg provider_arg
结合使用  -providerClass。代表一个可选的字符串输入provider_class_name的构造函数的参数。
-protected
要么  true false。这个值应该指定为  true如果一个密码必须通过一个受保护的认证路径等专用销读者。

命令

密钥存储库创建或添加数据

-genkeypair{别名别名} { -keyalg keyalg } { -keysize keysize }生成{—sigalg sigalg }[-dname dname][keypass keypass]{有效性valDays } { -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ providerclass provider_class_name { -providerArg provider_arg } } { - v } {保护} { -Jjavaoption }

生成一个密钥(公钥和私钥)相关联。公共密钥封装到一个X。509 v3自签名证书,这是存储为一个单元素证书链。这个证书链和私钥存储在一个新的密钥存储库条目的别名。

keyalg指定用于生成密钥对的算法,和keysize指定生成生成每个键的大小。sigalg指定应该用于签名算法的自签名证书;该算法必须与keyalg兼容。

dname指定X。500年的专有名称与别名,用作 issuer subject字段的自签名证书。如果没有提供专有名称在命令行中,用户将被提示输入一个。

keypass密码用于保护私钥生成的密钥对。如果没有提供密码,则提示用户。如果你按RETURN键在提示符中,密钥密码设置为用于密钥存储库的密码相同。keypass必须至少6个字符长。

valDays告诉的天数应考虑有效的证书。

这个命令被任命为-genkey在以前的版本。这个老叫仍然支持在此版本中,将会在将来的版本中支持,但对于澄清新名称,-genkeypair,是首选。

-genseckey{别名别名} { -keyalg keyalg } { -keysize keysize }生成[keypass keypass]{ -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ providerclass provider_class_name { -providerArg provider_arg } } { - v } {保护} { -Jjavaoption }

生成密钥,并将其存储在一个新的 KeyStore.SecretKeyEntry确认的别名。

keyalg指定用于生成密钥算法,和keysize指定生成的大小产生的关键。keypass密码用于保护密钥。如果没有提供密码,则提示用户。如果你按RETURN键在提示符中,密钥密码设置为用于密钥存储库的密码相同。keypass必须至少6个字符长。

-importcert{别名别名} { - file cert_file }[keypass keypass]{ -noprompt } { -trustcacerts } { -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ -providerName provider_name } { providerclass provider_class_name { -providerArg provider_arg } } { - v } {保护} { -Jjavaoption }

读取证书或证书链(后者提供的PKCS # 7格式化回复)cert_file的文件,并将其存储在密钥存储库条目的别名。如果没有文件,证书或PKCS # 7回复从stdin读取。

keytool可以导入X。509年v1、v2和v3证书,和PKCS # 7格式化该类型的证书链组成的证书。要导入的数据必须提供在二进制编码格式,或可打印编码格式(也称为Base64编码)定义的互联网RFC 1421标准。在后一种情况下,编码必须由一个字符串有界开始,从“- - - - -开始”开始,最后有界的一个字符串,始于“- - - - -端”。

您导入证书,有两个原因:

  1. 将它添加到受信任的证书列表,或
  2. 进口回复收到一个CA证书提交证书签名请求的结果(参见-certreqCA的命令)。

哪种类型的导入的目的是显示的值 -alias选择:

  1. 如果别名不指向一个关键条目,然后keytool假定您在添加一个受信任的证书条目。在这种情况下,别名不应该已经存在于密钥存储库。如果别名已存在,那么keytool输出一个错误,因为这已经是一个受信任的证书别名,并且不导入证书。
  2. 如果别名指向一个关键条目,然后keytool假定您在导入证书的回复。
导入一个新的受信任的证书

将证书添加到密钥存储库之前,keytool试图验证它试图建立一个信任的证书链到一个自签名证书(属于根CA),使用受信任的证书已经可用的密钥存储库。

如果 -trustcacerts选项已指定,额外的对证书的信任链,即的证书文件命名为“除”.

如果keytool未能建立一个信任路径从证书导入到一个自签名证书(从密钥库或“cacerts文件),证书信息打印出来,并提示用户验证,例如,通过比较显示证书指纹与指纹来自其他一些(信任)的信息来源,可能证书所有者本人。非常小心,以确保证书是有效的之前导入它作为一个“可信的”证书!——请参阅警告关于进口受信任的证书。然后用户选择流产了导入操作。如果 -noprompt选择是,然而,没有与用户的交互。

导入证书的回复

证书导入证书时回复,回复验证使用可信证书的密钥存储库,使用证书中配置和选择“除”密钥存储库文件(如果 -trustcacerts选项指定)。

的方法确定回复是受信任的证书在以下描述:

  • 如果回答是一个X。509证书,keytool试图建立信任链,从证书的答复和最后一个自签名证书(属于根CA)。证书的答复和的等级证书用于验证证书形式回复新证书链的别名。如果无法建立信任链,证书不是进口的回复。在这种情况下,keytool不打印证书并提示用户验证它,因为它是很难(如果不是不可能的话)用户决定回答的真实性证书。
  • 如果回答是PKCS # 7格式的证书链,链是第一个命令(与用户证书姓和自签名根CA证书),keytool之前尝试匹配根CA证书提供的回复与任何信任证书的密钥存储库和密钥存储库文件(如果“除” -trustcacerts选项指定)。如果没有匹配可以找到,根CA证书的信息打印出来,并提示用户验证,例如,通过比较显示证书指纹与指纹来自其他一些(信任)的信息来源,这可能是根CA本身。然后用户选择流产了导入操作。如果 -noprompt选择是,然而,没有与用户的交互。

如果证书中的公钥回复匹配用户的公钥已经存储在别名,旧的证书链被替换为新的证书链的答复。老链只能取代了如果一个有效的keypass,密码用于保护私钥的条目,供应。如果没有提供密码,私钥密码是不同的密钥存储库的密码,则提示用户。

这个命令被任命为进口在以前的版本。这个老叫仍然支持在此版本中,将会在将来的版本中支持,但对于澄清新名称,-importcert,是首选。

-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 } {保护} { -Jjavaoption }

进口一个条目或所有从源到目的地密钥库的条目。

srcalias选项提供时,命令进口单一入口被别名目的地密钥存储库。如果目的地别名不提供destalias,然后srcalias别名作为目的地。如果源项是受密码保护,srckeypass将用于恢复条目。如果不提供srckeypass,keytool将尝试使用srcstorepass恢复条目。如果srcstorepass要么是不提供或不正确,用户将被提示输入密码。使用destkeypass目的地条目将受到保护。如果不提供destkeypass,目的地条目将被保护与源输入密码。

如果不提供srcalias选项,那么源密钥存储库中的所有条目被导入到目的地密钥存储库。每个目的地条目将被存储在别名从源条目。如果源项是受密码保护,srcstorepass将用于恢复条目。如果srcstorepass要么是不提供或不正确,用户将被提示输入密码。如果一个源密钥存储库条目类型不支持在目的地密钥存储库,或如果发生错误而存储一个进入目的地密钥存储库,用户将被提示是否跳过进入和继续,或者放弃。目的地的条目将保护与源输入密码。

如果目的地别名目的地密钥存储库中已经存在,提示用户覆盖条目,或创建一个新的条目下不同的别名。

注意,如果 -noprompt提供,用户将不会提示输入一个新的目的地别名。现有条目与别名目的地将自动覆盖。最后,条目,不能进口自动跳过并输出一个警告。

导出数据

-certreq{别名别名} {—sigalg sigalg } { - file certreq_file }[keypass keypass]{ -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ -providerName provider_name } { providerclass provider_class_name { -providerArg provider_arg } } { - v } {保护} { -Jjavaoption }

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

企业社会责任是为了被发送到一个证书颁发机构(CA)。CA将验证证书请求者(通常是离线)和将返回一个证书或证书链,用于替换现有的证书链(最初由一个自签名证书)的密钥存储库。

私钥和X。500年专有名称与别名用于创建PKCS # 10证书请求。为了访问私钥,必须提供适当的密码,因为私钥密钥存储库的密码保护。如果keypass不是在命令行提供,和不同于密码用于保护密钥存储库的完整性,则提示用户。

sigalg指定的算法应该用于CSR迹象。

CSR certreq_file存储在文件。如果没有文件,CSR输出到标准输出。

使用importcert命令导入CA的反应。

-exportcert- file cert_file {别名别名} { } { -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ -providerName provider_name } { providerclass provider_class_name { -providerArg provider_arg } } { rfc } { - v } {保护} { -Jjavaoption }

从密钥库中读取()与别名关联的证书,并将其存储在文件cert_file。

如果没有文件,证书是输出到标准输出。

证书在默认情况下输出的二进制编码,而是将打印输出的编码格式,定义的互联网RFC 1421标准,如果 -rfc选项指定。

如果别名是指一个受信任的证书,证书是输出。否则,别名是指一个密钥条目有一个关联的证书链。在这种情况下,返回的第一个证书链。此证书的公钥验证实体的别名来解决。

这个命令被任命为出口在以前的版本。这个老叫仍然支持在此版本中,将会在将来的版本中支持,但对于澄清新名称,-exportcert,是首选。

显示数据

-list{别名别名} { -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ -providerName provider_name } { providerclass provider_class_name { -providerArg provider_arg } } { - v | rfc } {保护} { -Jjavaoption }

打印(stdout)密钥存储库条目的内容被别名。如果没有指定别名,整个密钥存储库的内容打印出来。

这个命令默认打印证书的MD5指纹。如果 -v指定选项,证书是人类可读的格式,打印等附加信息所有者,发行人,序列号,任何扩展。如果 -rfc指定选项,证书内容印刷使用打印的编码格式,定义的互联网RFC 1421标准

你不能指定 -v -rfc.

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

从文件中读取证书cert_file,并打印其内容以人类可读的格式。如果没有文件,证书从stdin读取。

证书可以是二进制编码或打印的编码格式,定义的互联网RFC 1421标准.

注意:这个选项可以使用独立的密钥存储库。

管理密钥存储库

-storepasswd(不管是new_storepass]{ -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ -providerName provider_name } { providerclass provider_class_name { -providerArg provider_arg } } { - v } { -Jjavaoption }

更改密码用于保护的完整性密钥存储库的内容。新密码是new_storepass必须至少6个字符长。

-keypasswd{别名别名}[keypass old_keypass][- new_keypass]{ -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ -providerName provider_name } { providerclass provider_class_name { -providerArg provider_arg } } { - v } { -Jjavaoption }

改变私人/密钥的密码保护了别名,old_keypass new_keypass,必须至少6个字符长。

如果 -keypass在命令行选项没有提供,密钥密码是不同的密钥存储库的密码,则提示用户。

如果 -new在命令行选项没有提供,则提示用户。

-delete(别名别名){ -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ -providerName provider_name } { providerclass provider_class_name { -providerArg provider_arg } } { - v } {保护} { -Jjavaoption }

删除密钥库的条目被别名。则提示用户别名,如果没有提供别名命令行。

-changealias{别名别名}[-destalias destalias][keypass keypass]{ -storetype storetype } { keystore keystore }[对于storepass对于storepass]{ -providerName provider_name } { providerclass provider_class_name { -providerArg provider_arg } } { - v } {保护} { -Jjavaoption }

将现有的密钥存储库条目从新的别名指定别名,destalias。如果没有提供目的地别名,命令提示。如果原始条目保护输入密码,密码可以通过“keypass”选项提供。如果没有提供密钥口令,storepass(如果有)将首先尝试。如果尝试失败,用户将被提示输入密码。

得到帮助

-help

列出了基本的命令和选项。

例子

假设您希望创建一个密钥存储库来管理你的公共/私有密钥对和你信任证书的实体。

生成密钥对

你需要做的第一件事是创建一个密钥存储库和生成密钥对。你可以使用一个命令,如以下几点:

    keytool -genkeypair -dname "cn=Mark Jones, ou=JavaSoft, o=Sun, c=US"
      -alias business -keypass kpi135 -keystore /working/mykeystore
      -storepass ab987c -validity 180

(请注意:必须输入一行。多行中使用的例子只是清晰的目的。)

这个命令创建密钥存储库命名为“mykeystore”在“工作”目录中(假设它不存在),并赋予它“ab987c”的密码。它生成的公钥/私钥对实体的“专有名称”有一个共同的名字“马克琼斯”,组织单元的“JavaSoft”,组织“太阳”和“我们”的两个字母的国家代码。它使用默认的“DSA密钥生成算法创建键,两个1024位长。

它创建一个自签名证书(使用默认的“SHA1withDSA”签名算法),包括公钥和专有名称的信息。这个证书的有效期为180天,与私钥的密钥存储库条目引用别名“业务”。私钥密码分配“kpi135”。

命令可以显著缩短选项默认接受。事实上,不需要选择;违约是用于未指定的选项有默认值,并提示您所需的值。因此,您可以有以下:

    keytool -genkeypair
在这种情况下,一个密钥存储库条目创建别名“mykey”,新生成的密钥对和一个证书,有效期为90天。这个条目是放置在密钥存储库命名为“。密钥存储库”在您的主目录。创建密钥存储库(如果不存在)。系统将提示您的专有名称信息、密钥存储库的密码,和私钥密码。

其余的示例假设您的执行 -genkeypair指定的命令没有选项,你回应的提示值等于给定的第一 -genkeypair上面的命令,(私钥密码“kpi135”,等等)。

要求签署证书的证书颁发机构

到目前为止,我们已经有了一个自签名证书。证书更有可能被别人信任如果签署的证书颁发机构(CA)。能得到这样一个签名,首先生成证书签名请求(CSR),通过以下几点:

    keytool -certreq -file MarkJ.csr
这将创建一个CSR(实体被默认的别名“mykey”),并将请求的文件命名为“MarkJ.csr”。CA提交这个文件,如VeriSign Inc . CA会验证你,请求者(通常是脱机),然后将返回一个证书,签署的,验证您的公钥。(在某些情况下,他们会返回一个证书链,每一个验证签名者的公钥的证书���中)。

导入CA的证书

你需要更换你的签名证书和证书链,链中的每个证书验证签名者的公钥的证书链中,“根”CA。

在你回复CA的证书导入之前,你需要一个或多个“可信证书”在你的密钥存储库或 cacerts密钥存储库文件(中描述importcert命令):

  • 如果证书的答复是证书链,你只需要证书链的顶部(也就是说,“根”CA证书CA的公共密钥身份验证)。
  • 如果证书回复一个证书,你需要一个证书的签发的CA(签字),如果这不是自签名证书,你需要一个签名者证书,等等,CA证书签名的“根”。

“除”keystore文件附带五VeriSign根CA证书,所以你可能不会需要导入VeriSign证书作为受信任的证书密钥存储库。但是如果你请求从不同的CA签署的证书,和CA的证书验证公钥尚未添加到“除”,您将需要导入CA的证书作为“可信证书”。

从CA通常是自签名证书,或者另一个CA签署的(在这种情况下,你还需要一个CA的证书验证公钥)。假设公司ABC公司,是一个CA,您获得一个文件名为“ABCCA。cer”据称从ABC自签名证书,该CA认证的公钥。

非常小心,以确保证书是有效的之前导入它作为一个“可信的”证书!把它第一次(使用keytool -printcertkeytool命令,或 -importcert命令不 -noprompt选项),并确保显示证书指纹匹配预期的。你可以叫的人发送证书,并比较指纹(s),你看到那些他们安全的公共密钥存储库(或显示)。只有在指纹相等是保证证书还没有在运输途中换成别人的(例如,一个攻击者的)证书。如果发生这种攻击,你之前没有检查这个证书你进口,你最终将信任任何攻击者已经签署了。

如果你信任证书的有效性,那么您可以将它添加到您的密钥存储库通过以下:

    keytool -importcert -alias abc -file ABCCA.cer
这将创建一个密钥存储库中的“受信任的证书”条目,与数据从文件”ABCCA。cer”,分配别名“abc”的条目。

导入证书的CA的答复

一旦导入CA的证书验证公钥你提交你的证书签名请求(或已经有这样的证书在“cacerts文件),您可以导入证书的回答,从而取代你的签名证书和证书链。这个链是一个返回的CA来响应你的请求(如果CA的答复是链),或一个构造(如果CA回复一个证书)使用证书的答复和受信任的证书已经导入的密钥存储库中可用“除”的回复或密钥存储库文件。

例如,假设你发送VeriSign证书签名请求。然后您可以导入通过以下回复,假定返回的证书被命名为“VSMarkJ.cer”:

    keytool -importcert -trustcacerts -file VSMarkJ.cer

出口证书验证您的公钥

假设您已经使用了 jarsigner工具签署一个Java ARchive(JAR)文件。客户想要使用的文件需要认证你的签名。

他们能做到这一点的一种方法是首先你的公钥证书导入密钥库作为一个“可信的”条目。您可以导出证书和供应给你的客户。作为一个例子,你可以复制你的证书文件命名 MJ.cer通过以下,假设输入的别名是“mykey”:

    keytool -exportcert -alias mykey -file MJ.cer
鉴于证书,签署了JAR文件,客户端可以使用jarsigner工具来验证签名。

导入密钥存储库

命令“importkeystore”用于整个密钥库导入到另一个密钥存储库,这就意味着所有条目从源密钥存储库,包括密钥和证书,所有进口到目的地的密钥存储库在单个命令。您可以使用此命令来导入条目从一个不同类型的密钥存储库。在导入期间,所有新目的地密钥存储库中的条目将有相同的别名和保护密码(密钥和私有密钥)。如果keytool困难恢复私有密钥或密钥从源密钥存储库,它将提示您输入密码。如果它检测到别名重复,它会问你一个新的,你可以指定一个新的别名或简单地允许keytool覆盖现有的一个。

例如,从一个正常的进口条目JKS类型密钥存储键。jks PKCS # 11类型基于硬件密钥存储库,您可以使用命令:

keytool -importkeystore
    -srckeystore key.jks -destkeystore NONE
    -srcstoretype JKS -deststoretype PKCS11
    -srcstorepass changeit -deststorepass topsecret

importkeystore命令也可以用来导入一个条目从源到目的地密钥库。在这种情况下,除了选择你看到在上面的示例中,您需要指定您想要导入的别名。srcalias选项,你也可以在命令行指定desination别名,以及保护密码的秘密/私钥和目的地保护你想要的密码。通过这种方式,您可以发出keytool命令,将���远不会问你一个问题。这使它非常方便包括keytool命令到一个脚本文件,如下:

keytool -importkeystore
    -srckeystore key.jks -destkeystore NONE
    -srcstoretype JKS -deststoretype PKCS11
    -srcstorepass changeit -deststorepass topsecret
    -srcalias myprivatekey -destalias myoldprivatekey
    -srckeypass oldkeypass -destkeypass mynewkeypass
    -noprompt

术语和警告

密钥存储库

密钥存储库是存储设备的加密密钥和证书。
  • 密钥存储库条目
    密钥存储库可能有不同类型的条目。keytool的两个最适用的条目类型包括:
    1. 关键条目——每个持有非常敏感的密钥信息,这是存储在一个受保护的格式,以防止未经授权的访问。一般来说,这种类型的条目的关键存储密钥,或所附带的私钥“链”证书为对应的公钥。keytool可以处理这两种类型od条目,而jarsigner工具只处理后者类型的条目,这是私钥和它们相关的证书链。
    2. 受信任的证书条目,每个包含一个属于另一方的公钥证书。它被称为“受信任的证书”,因为密钥所有者信任该证书的公钥确实属于身份识别的“主题”(所有者)证书。证书的发行人担保,通过签署证书。
  • 密钥存储库的别名

    所有密钥存储库条目(密钥和信任证书条目)访问通过独特的别名。

    别名指定当你添加一个实体使用的密钥存储库-genseckey命令来生成一个密钥,-genkeypair命令来生成一个密钥对(公共和私人密钥)或-importcert命令来添加一个证书或证书链信任证书的列表。随后keytool命令必须使用相同的别名引用实体。

    例如,假设您使用别名杜克生成一个新的公钥/私钥对,将公钥签名证书(见证书链通过下面的命令:

        keytool -genkeypair -alias duke -keypass dukekeypasswd
    
    这指定一个密码所需的“dukekeypasswd”下去,后续的命令来访问私钥assocated别名  duke。如果你以后想要改变公爵的私钥密码,您可以使用一个命令如下:
         keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass
    
    这改变了密码从“dukekeypasswd”到“newpass”。

    请注意:不应该指定一个密码在命令行或脚本,除非它是出于测试目的,或者你在一个安全的系统。如果你不指定需要密码命令行选项,系统将提示您。

  • 密钥存储库的实现
     KeyStore类提供的  java.security包提供定义良好的接口来访问和修改一个密钥存储库中的信息。有可能有多个不同的具体实现,其中每个实现为特定类型的密钥存储库。

    目前,两个命令行工具(keytool和jarsigner)和一个基于gui的工具叫政策工具使用密钥存储库的实现。自 KeyStore是公开的,用户可以编写额外的安全使用它的应用程序。

    有一个内置的默认实现,由Sun Microsystems提供。它实现了密钥存储库文件,利用专有密钥存储库类型(格式)命名“JKS”。它每个私钥保护其个人密码,同时保护整个密钥存储库的完整性(可能不同)的密码。

    密钥存储库实现机构。更具体地说,提供的应用程序接口 KeyStore实现的服务提供程序接口(SPI)。也就是说,有一个相应的抽象 KeystoreSpi类,也 java.security包,它定义了服务提供者接口方法,必须实现“提供者”。(“供应商”是指一个包或一组包,提供一个具体实现的一个子集的服务,可以通过Java安全API访问)。因此,提供一个密钥存储库实现,客户端必须实现一个“提供者”和供应KeystoreSpi子类实现,所述如何实现Java加密体系结构的提供者.

    应用程序可以选择来自不同供应商的不同类型的密钥存储库实现,使用“getInstance”提供的工厂方法 KeyStore类。密钥存储库类型定义了密钥存储库的存储和数据格式信息,和算法用于保护私人/密钥的密钥存储库和密钥存储库本身的完整性。密钥存储库的实现不同类型不兼容。

    keytool适用于任何文件的密钥存储库实现。(它将keytore位置是在命令行传递给它一个文件名,并将其转换为FileInputStream,它加载密钥存储库的信息。)policytool和jarsigner工具,另一方面,可以从任何位置读取密钥存储库,可以使用一个指定的URL。

    keytool和jarsigner,您可以在命令行中指定一个密钥存储库类型,通过-storetype选项。对于政策工具,您可以指定一个密钥存储库类型通过“密钥”菜单。

    如果没有显式地指定一个密钥存储库类型,选择密钥存储库实现的工具仅仅基于的价值 keystore.type财产安全属性文件中指定。安全属性文件叫做java。安全,它驻留在安全属性目录,java.home / lib /安全java。家是运行时环境的目录(jre目录SDK或Java 2的顶级目录运行时环境)。

    每个工具得到了 keystore.type值,然后检查所有当前安装提供者,直到找到一个实现该类型的密钥存储库。然后使用密钥存储库实现的提供者。

     KeyStore类定义了一个静态方法命名 getDefaultType让应用程序和小应用程序检索的值 keystore.type财产。下面的代码创建了一个默认的密钥存储库类型的实例(如中指定 keystore.type属性):

        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    

    默认的密钥存储库类型是“jks”(Sun提供��专有密钥存储库实现的类型)。这是由以下行指定的安全属性文件:

        keystore.type=jks
    

    有工具利用除了默认的密钥存储库实现,你可以改变这条线来指定一个不同的密钥存储库类型。

    例如,如果你有一个提供者包提供一个密钥存储库实现密钥存储库类型称为“pkcs12”,改变线

        keystore.type=pkcs12
    
    注意:密钥存储库类型名称的情况下并不重要。例如,“JKS”将被视为“JKS”一样。

证书

证书(也称为公钥证书)是数字签名的声明,从一个实体(发行人),说的公钥(和其他一些信息)的另一个实体(主题)有一些特定值。
  • 证书的条款
    公共密钥
    这些数字与特定实体相关联,目的是要知道每个人需要信任与实体的交互。公钥用于验证签名。
    数字签名
    如果某些数据进行数字签名已经存储在一个实体的“身份”,和签名证明实体知道数据。呈现不可伪造的数据与实体的私钥签署。
    身份
    一个已知的方法解决一个实体。在一些系统中身份公钥,另一方面可以从Unix UID为X的一个电子邮件地址。509专有名称。
    签名
    签名计算使用私钥对一些数据的实体(签名者,证书也被称为发行人)。
    私钥
    这些数字,每一个都应该是只有特定的实体知道这是谁的私钥(也就是说,它应该是保密)。私钥和公钥成对存在于所有公钥加密系统(也称为“公钥加密系统”)。在一个典型的公钥密码系统,如DSA、私钥对应于一个公共密钥。私钥用于计算签名。
    实体
    一个实体是一个人、组织、程序、电脑、商业、银行、或其他东西在某种程度上你是信任。

    基本上,公钥密码术需要访问用户的公钥。在大规模网络环境下是不可能保证之前已经建立了通信实体之间的关系,或者存在信任存储库使用公钥。证书被发明来解决这一公共密钥分发问题。现在一个证书颁发机构(CA)可以作为可信第三方。中科院是实体(例如,企业)受信任的签署为其他实体(问题)证书。假设ca只会创建有效的和可靠的证书,因为他们是受法律协议。有许多公共认证机构,如VeriSign,Thawte,委托,等等。你也可以经营自己的证书颁发机构使用微软产品,如网景/ CA证书服务器或委托产品为您的组织。

    它可以显示,使用keytool进口和出口证书。也可以生成自签名证书。

    keytool目前处理X。509证书。

  • X。509证书
    X。509标准定义了哪些信息可以进入一个证书,并描述了如何写下来(数据格式)。所有的数据在一个证书是使用��个相关标准称为asn . 1 / DER编码。抽象语法符号1描述了数据。明确的编码规则描述一个单一的方式来存储和传输数据。

    所有的X。509证书有以下数据,除了签名:

    版本
    这个标识版本的X。509标准适用于此证书,影响可以指定哪些信息。到目前为止,定义了三个版本。keytool可以导入和导出v1、v2和v3证书。它生成v3证书。

    X。509版1已经自1988年以来,广泛部署,是最通用的。

    X。509版2介绍了主题和发行人惟一标识符的概念来处理重用主题的可能性和/或发行人的名字。大多数证书profile文档强烈建议名称不被重用,而且证书不应该利用惟一标识符。版本2证书没有被广泛使用。

    X。509版本3是最近(1996)和支持扩展的概念,即任何人都可以定义一个扩展,包括它的证书。今天使用的一些常见的扩展:KeyUsage(限制了使用特定目的的关键,如“中”)和AlternativeNames(允许其他身份也被关联到这个公钥,例如DNS名称、电子邮件地址、IP地址)。扩展可以标记表明,扩展的关键应该检查和执行/使用。例如,如果一个证书KeyUsage扩展标记关键并设置“keyCertSign”如果这个证书提出了SSL通信期间,它应该被拒绝,因为证书扩展表明关联的私钥应该只用于签名证书,而不是使用SSL。

    序列号
    创建证书的实体负责给它分配一个序列号,区别于其他证书的问题。使用这些信息在许多方面,例如当一个证书吊销其序列号是放置在一个证书撤销列表(CRL)。
    签名算法标识符
    这个标识使用的算法CA签署的证书。
    发行人的名字
    X。500年的专有名称实体签署的证书。这通常是一个CA。使用此证书意味着信任的实体签署证书。(请注意,在某些情况下,如根或顶级CA证书,发行人标志自己的证书)。
    有效期
    每个证书都是有效的只有有限的时间。这一时期所描述的是一个开始和结束日期和时间,日期和时间,可以短至几秒钟或几乎只要一个世纪。有效期的选择取决于很多因素,比如私钥的力量用于签名证书或人愿意支付证书。这是预期的时期,实体可以依靠公众价值,如果已经没有其它选择,相关联的私钥。
    主题名称
    实体的公钥证书的名称标识。这个名字使用X。500标准,所以打算在互联网上是独一无二的。这是 X。500年的专有名称(DN)的实体,例如,
         CN=Java Duke, OU=Java Software Division, O=Sun Microsystems Inc, C=US
    
    (这些指的是主体的通用名称,组织单元,组织和国家。
    主题公钥信息
    这是命名实体的公钥,连同一个算法标识符指定公共密钥加密系统密钥属于和任何相关的关键参数。
  • 证书链

    keytool可以创建和管理密钥存储库“关键”条目,每个包含一个私钥和一个关联的证书“链”。第一个证书链中包含对应的公钥私钥。

    当键第一次生成的(请参阅-genkeypair命令),链包含单个元素的开始,一个自签名证书。自签名证书是一个的发行人(签名者)是一样的主题(实体的公钥认证的证书)。每当 -genkeypair命令来生成一个新的公钥/私钥对,还包装了公钥签名证书。

    后,生成证书签名请求(CSR)(请参阅-certreq命令)和发送到证书颁发机构(CA),CA是进口的响应(见-importcert),自签名证书被一连串的证书。底部的链CA颁发的证书(回复)认证的公钥。下一个证书链中CA的公钥进行身份验证。

    在许多情况下,这是一个自签名证书(也就是说,CA的证书验证自己的公钥)链中的最后一个证书。在其他情况下,CA可能返回一个证书链。在这种情况下,证书链中的底部是一样的(CA签署的证书,认证的公钥密钥条目),但第二个证书链中不同的CA签署的证书,验证你的公钥发送CSR。然后,将证书中的下一个证书链验证第二个CA的关键,等等,直到到达一个自签名的“根”证书。链中的每个证书(第一次)后验证签名者的公钥的证书链中。

    许多ca颁发的证书只返回,没有支持链,尤其是当有一个平坦的层次结构(无中间体CAs)。在这种情况下,证书链必须建立从受信任的证书信息已经存储在密钥存储库中。

    不同的回复格式(定义的PKCS # 7标准)还包括支持证书链,除了颁发的证书。回复格式都可以由keytool处理。

    顶层(根)CA证书签名。然而,信任到根的公钥本身并不来自于根证书(任何人都可以生成一个自签名证书专有名称的说,VeriSign根CA !),但是从其他来源喜欢报纸。根CA公钥是广为人知。它存储在一个证书的唯一原因是因为这是一个可以理解的格式大多数工具,所以在这种情况下,证书仅仅是用作“车辆”运输根CA的公钥。添加根CA证书密钥存储库之前,你应该把它(使用 -printcert选项)和比较著名的显示指纹指纹(从报纸,获得根CA的网页,等等)。

  • 除证书文件

    名为“除”的证书文件驻留在安全属性目录,java.home / lib /安全java。家是运行时环境的目录(jre目录SDK或Java 2的顶级目录运行时环境)。

    “除”文件与CA证书代表一个系统范围的密钥存储库。系统管理员可以使用keytool配置和管理文件,指定“jks”作为密钥存储库类型。“除”keystore文件附带几根CA证书的别名和X。500业主专有名称:

    • 别名:thawtepersonalfreemailca
      主人DN:EmailAddress = personal-freemail@thawte.com
      CN = Thawte个人Freemail CA,
      OU =认证服务部门,
      O = Thawte咨询、L =开普敦,圣=西开普省,C =咱
    • 别名:thawtepersonalbasicca
      主人DN:EmailAddress = personal-basic@thawte.com
      CN = Thawte个人基本的CA,
      OU =认证服务部门,
      O = Thawte咨询、L =开普敦,圣=西开普省,C =咱
    • 别名:thawtepersonalpremiumca
      主人DN:EmailAddress = personal-premium@thawte.com
      CN = Thawte个人保费,
      OU =认证服务部门,
      O = Thawte咨询、L =开普敦,圣=西开普省,C =咱
    • 别名:thawteserverca
      主人DN:EmailAddress = server-certs@thawte.com
      CN = Thawte服务器CA,OU =认证服务部门,
      L O = Thawte咨询cc =开普敦,圣=西开普省,C =咱
    • 别名:thawtepremiumserverca
      主人DN:EmailAddress = premium-server@thawte.com
      CN = Thawte高端服务器,
      OU =认证服务部门,
      L O = Thawte咨询cc =开普敦,圣=西开普省,C =咱
    • 别名:verisignclass1ca
      主人DN:OU = 1级公共初级认证中心,
      O = " VeriSign公司。”,C =
    • 别名:verisignclass2ca
      主人DN:OU =二班公共初级认证中心,
      O = " VeriSign公司。”,C =
    • 别名:verisignclass3ca
      主人DN:OU = 3班公共初级认证中心,
      O = " VeriSign公司。”,C =
    • 别名:verisignserverca
      主人DN:OU =安全服务器认证权威,
      O = " RSA数据安全公司。”,C =
    • 别名:verisignclass1g2ca
      主人DN:OU = VeriSign信任网络,
      OU = "(c)1998 VeriSign Inc .——仅供授权使用”,
      OU =类1初级认证行政部门- G2,
      O = " VeriSign公司。”,C =
    • 别名:verisignclass1g3ca
      主人DN:CN = VeriSign类1初级认证行政部门- G3,OU =”(c)1999 VeriSign Inc .——仅供授权使用”,
      OU = VeriSign信任网络,
      O = " VeriSign公司。”,C =
    • 别名:verisignclass2g2ca
      主人DN:OU = VeriSign信任网络,
      OU = "(c)1998 VeriSign Inc .——仅供授权使用”,
      OU =二班公共初级认证中心- G2,
      O = " VeriSign公司。”,C =
    • 别名:verisignclass2g3ca
      主人DN:CN = VeriSign类2初级认证行政部门- G3,
      OU = "(c)1999 VeriSign Inc .——仅供授权使用”,
      OU = VeriSign信任网络,
      O = " VeriSign公司。”,C =
    • 别名:verisignclass3g2ca
      主人DN:OU = VeriSign信任网络,
      OU = "(c)1998 VeriSign Inc .——仅供授权使用”,
      OU = 3班公共初级认证中心- G2,
      O = " VeriSign公司。”,C =
    • 别名:verisignclass3g3ca
      主人DN:CN = VeriSign 3班主要认证行政部门——G3,
      OU = "(c)1999 VeriSign Inc .——仅供授权使用”,
      OU = VeriSign信任网络,
      O = " VeriSign公司。”,C =
    • 别名:baltimorecodesigningca
      主人DN:CN =巴尔的摩CyberTrust代码签名根,
      OU = CyberTrust,O =巴尔的摩,C = IE
    • 别名:gtecybertrustglobalca
      主人DN:CN = GTE CyberTrust全球根,
      OU =“GTE CyberTrust解决方案公司。”,C = O = GTE公司我们
    • 别名:baltimorecybertrustca
      主人DN:CN =巴尔的摩CyberTrust根,
      OU = CyberTrust,O =巴尔的摩,C = IE
    • 别名:gtecybertrust5ca
      主人DN:CN = GTE CyberTrust 5根,
      OU =“GTE CyberTrust解决方案公司。”,C = O = GTE公司我们
    • 别名:entrustclientca
      主人DN:CN = Entrust.net客户端认证中心,
      OU =(c)1999 Entrust.net有限,
      OU =www.entrust.net/Client_CA_Info/CPS incorp。通过引用限制liab。,
      C = O = Entrust.net,我们
    • 别名:entrustglobalclientca
      主人DN:CN = Entrust.net客户端认证中心,
      OU =(c)2000 Entrust.net有限,
      OU =www.entrust.net/GCCA_CPS incorp。ref。(限制liab。)
      O = Entrust.net
    • 别名:entrust2048ca
      主人DN:CN = Entrust.net证书颁发机构(2048),
      OU =(c)1999 Entrust.net有限,
      OU =www.entrust.net/CPS_2048 incorp。ref。(限制liab。)
      O = Entrust.net
    • 别名:entrustsslca
      主人DN:CN = Entrust.net安全服务器认证权威,
      OU =(c)1999 Entrust.net有限,
      OU =www.entrust.net/CPS incorp。ref。(限制liab。)
      C = O = Entrust.net,我们
    • 别名:entrustgsslca
      主人DN:CN = Entrust.net安全服务器认证权威,
      OU =(c)2000 Entrust.net有限,
      OU =www.entrust.net/SSL_CPS incorp。ref。(限制liab。)
      O = Entrust.net
    • 别名:godaddyclass2ca
      主人DN:OU = Go Daddy类2认证中心,
      O = " Go Daddy集团公司。”,C =
    • 别名:starfieldclass2ca
      主人DN:OU =星际二班认证权威,
      O = "星际科技有限公司”,C =
    • 别名:valicertclass2ca
      主人DN:EMAILADDRESS = info@valicert.com,
      CN = http://www.valicert.com/
      OU = ValiCert类2政策权威验证,
      O = " ValiCert公司。”,L = ValiCert验证网络
    • 别名:geotrustglobalca
      主人DN:CN = GeoTrust全球CA,
      C = O = GeoTrust Inc .
    • 别名:equifaxsecureca
      主人DN:OU = Equifax安全认证中心,
      O = Equifax,C =我们
    • 别名:equifaxsecureebusinessca1
      主人DN:CN = Equifax安全电子商务CA-1,
      C = O = Equifax安全Inc .
    • 别名:equifaxsecureebusinessca2
      主人DN:OU = Equifax安全电子商务CA-2,
      O = Equifax安全,C =
    • 别名:equifaxsecureglobalebusinessca1
      主人DN:CN = Equifax安全全球电子商务CA-1,
      C = O = Equifax安全Inc .
    • 别名:soneraclass1ca
      主人DN:CN =索拉纳公司Class1,O =索拉纳公司C = FI
    • 别名:soneraclass2ca
      主人DN:CN =索拉纳公司Class2 CA,O =索拉纳公司C = FI
    • 别名:comodoaaaca
      主人DN:CN = AAA证书服务,
      O =科摩多CA有限,L =索尔福德,圣=大曼彻斯特,C = GB
    • 别名:addtrustclass1ca
      主人DN:CN = AddTrust一班CA根,
      OU = AddTrust TTP网络,O = AddTrust AB,C =
    • 别名:addtrustexternalca
      主人DN:CN = AddTrust外部CA根,
      OU = AddTrust外部TTP网络,O = AddTrust AB,C =
    • 别名:addtrustqualifiedca
      主人DN:CN = AddTrust合格CA根,
      OU = AddTrust TTP网络,O = AddTrust AB,C =
    • 别名:utnuserfirsthardwareca
      主人DN:CN = UTN-USERFirst-Hardware,
      OU = http://www.usertrust.com,O = USERTRUST网络,
      L =盐湖城,圣= UT,C =
    • 别名:utnuserfirstclientauthemailca
      主人DN:CN = UTN-USERFirst-Client认证和电子邮件,
      OU = http://www.usertrust.com,O = USERTRUST网络,
      L =盐湖城,圣= UT,C =
    • 别名:utndatacorpsgcca
      主人DN:CN = UTN - DATACorp国网公司,
      OU = http://www.usertrust.com,O = USERTRUST网络,
      L =盐湖城,圣= UT,C =
    • 别名:utnuserfirstobjectca
      主人DN:CN = UTN-USERFirst-Object,
      OU = http://www.usertrust.com,O = USERTRUST网络,
      L =盐湖城,圣= UT,C =

    “除”初始密码的密钥存储库文件是“changeit”。系统管理员应该改变密码,默认的访问权限的文件在安装SDK。


    重要:验证您的 cacerts文件
    因为你信任的ca  cacerts文件作为实体发布证书签名和其他实体,你必须管理  cacerts文件仔细。的  cacerts文件应该只包含你信任的ca证书。是你的责任来验证可信根CA证书的捆绑  cacerts文件和做出自己的信任决定。删除一个不受信任的CA证书  cacerts的文件,使用delete选项  keytool命令。你可以找到的  cacerts文件在JRE的安装目录中。请联系您的系统管理员如果没有编辑这个文件的权限。

  • 互联网RFC 1421证书编码标准

    证书通常使用打印编码格式存储互联网RFC 1421定义的标准,而不是他们的二进制编码。这个证书格式,也被称为“Base 64编码”,促进出口证书,其他应用程序通过电子邮件或通过其他机制。

    证书的阅读 -importcert -printcert命令可以在这种格式或二进制编码。

     -exportcert默认命令输出二进制编码的证书,而是将输出打印编码格式的证书,如果 -rfc选项指定。

     -list默认命令打印证书的MD5指纹。如果 -v指定选项,证书是印在人类可读的格式,而如果 -rfc指定选项,可打印的证书是输出编码格式。

    可打印的编码格式,编码的证书是有界的开始

    -----BEGIN CERTIFICATE-----
    

    最后

    -----END CERTIFICATE-----
    

X。500年的专有名称

X。500专有名称是用来识别实体,如那些命名的  subject issuer(签名者)领域的X。509证书。keytool支持以下部分:
  • commonName——普通的名字的人,例如,“苏珊·琼斯”
  • organizationUnit——小组织(e。g,部门或部门)的名字,如“购买”
  • organizationName——大型组织的名字,如“ABCSystems公司。”
  • localityName——本地(市)的名字,如“Palo Alto”
  • stateName州或省的名字,如“加州”
  • ——两个字母的国家代码,例如,“CH”

当提供一个专有名称的字符串的值 -dname选项,至于 -genkeypair命令字符串必须是以下格式:

CN = cName,OU = orgUnit,O = org,L =城市,S =状态,C = countryCode

所有斜体项代表实际值和上面的关键词缩写如下:

	CN=commonName
	OU=organizationUnit
	O=organizationName
	L=localityName
	S=stateName
	C=country

一个示例专有名称字符串

CN=Mark Smith, OU=JavaSoft, O=Sun, L=Cupertino, S=California, C=US
使用这样一个字符串和一个示例命令
 keytool -genkeypair -dname "CN=Mark Smith, OU=JavaSoft, O=Sun, L=Cupertino,
S=California, C=US" -alias mark

关键词缩写的案例并不重要。例如,“CN”、“CN”,和“CN”都受到同样的对待。

顺序问题;每个子组件必须出现在指定的顺序。然而,没有必要所有的子组件。你可以用一个子集,例如:

CN=Steve Meier, OU=SunSoft, O=Sun, C=US

如果一个专有名称字符串值包含一个逗号,逗号时,必须“\”字符逃跑了你在命令行指定字符串,如

   cn=peter schuster, o=Sun Microsystems\, Inc., o=sun, c=us

没有必要在命令行指定一个专有名称的字符串。如果需要一个命令,但不是在命令行上提供,则提示用户每个子组件。在这种情况下,一个逗号不需要逃“\”。

警告关于进口受信任的证书

重要:之前一定要仔细检查证书导入它作为受信任的证书!

把它第一次(使用 -printcert命令,或 -importcert命令不 -noprompt选项),并确保显示证书指纹匹配预期的。例如,假设有人发送或电子邮件你证书,你把它放在一个文件命名 /tmp/cert。在你考虑将证书添加到受信任证书列表,您可以执行 -printcert命令来查看其指纹,如

  keytool -printcert -file /tmp/cert
    Owner: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll
    Issuer: CN=ll, OU=ll, O=ll, L=ll, S=ll, C=ll
    Serial Number: 59092b34
    Valid from: Thu Sep 25 18:01:13 PDT 1997 until: Wed Dec 24 17:01:13 PST 1997
    Certificate Fingerprints:
         MD5:  11:81:AD:92:C8:E5:0E:A2:01:2E:D4:7A:D7:5F:07:6F
         SHA1: 20:B6:17:FA:EF:E5:55:8A:D0:71:1F:E8:D6:9D:C0:37:13:0E:5E:FE
然后调用或接触的人发送证书,并比较指纹(s),你看他们的节目。只有在指纹相等是保证证书还没有在运输途中换成别人的(例如,一个攻击者的)证书。如果发生这种攻击,你之前没有检查这个证书你进口,你最终将信任任何攻击者签署了(例如,一个JAR文件里面有恶意的类文件)。

注意:它不是必需的,你执行 -printcert命令之前导入证书,因为之前将证书添加到受信任证书的密钥存储库列表, -importcert命令打印出证书信息并提示您验证它。然后您可以选择流产导入操作。不过请注意,这只是如果你调用 -importcert命令不 -noprompt选择。如果 -noprompt选项,没有与用户的交互。

关于密码的警告

大多数命令操作在一个密钥存储库需要存储密码。一些命令需要一个私人/密钥密码。

密码可以在命令行上指定的 -storepass -keypass选项,分别)。然而,不应该指定一个密码在命令行或脚本,除非它是出于测试目的,或者你在一个安全的系统。

如果你不指定需要密码命令行选项,系统将提示您。

另请参阅

变化

keytool命令界面改变了在Java SE 6中。

keytool不再显示密码输入时输入的用户。由于密码输入可以不再被进入的时候,用户将被提示输入密码密码被设置或改变任何时间(例如,当设置初始密钥存储库的密码,或者当改变一个关键密码)。

一些命令只是被重命名,其他命令被认为过时不再列入本文档。所有先前的命令(包括重命名和过时的)仍然支持在此版本中,将继续支持在将来的版本中。以下总结了所有的更改keytool命令接口:

重命名命令:

命令被认为过时了,不再记录:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值