Generate Keys

如果代码签名者还没有合适的用于对代码签名的私钥,则必须首先生成密钥,以及代码接收者的运行时系统可以用来验证签名的相应公钥。

由于本课假定您还没有这样的密钥,因此您将创建一个名为examplestore的密钥库,并使用新生成的公共/私有密钥对(证书中包含公共密钥)创建一个条目。

在命令窗口中键入以下命令以创建名为examplestore的密钥库并生成密钥:

keytool -genkey -alias signFiles -keystore examplestore

系统将提示您 Importing 密钥和密钥库的密码。

keytool 命令的子部分

让我们看看每个keytool子部分的含义。

  • 生成密钥的命令是-genkey。

  • -alias signFiles 子部分指示将来将用于引用包含将要生成的密钥的密钥库条 Object 别名。

  • -keystore examplestore 子部分指示您正在创建或已经使用的密钥库的名称(以及可选的路径)。

  • 提示您 Importing 的 storepass 值指定密钥库密码。

  • 提示您 Importing 的密钥密码值指定将要生成的私钥的密码。您将始终需要此密码才能访问包含该密钥的密钥库条目。该条目不必具有自己的密码。当提示您 Importing 密钥密码时,可以选择与密钥库密码相同。

注意: 出于安全原因,您不应在命令行上设置密钥或密钥库密码,因为这样可以更容易地截获它们。

Distinguished-Name Information

如果使用前面的keystore命令,系统将提示您 Importing 专有名称信息。以下是提示:粗体字表示您应 Importing 的内容。

What is your first and last name?
  [Unknown]:  Susan Jones 
What is the name of your organizational unit?
  [Unknown]:  Purchasing 
What is the name of your organization?
  [Unknown]:  ExampleCompany 
What is the name of your City or Locality?
  [Unknown]:  Cupertino 
What is the name of your State or Province?
  [Unknown]:  CA 
What is the two-letter country code for this unit?
  [Unknown]:  US 
Is <CN=Susan Jones, OU=Purchasing, O=ExampleCompany,
    L=Cupertino, ST=CA, C=US> correct?
  [no]:  y

Command Results

keytool命令在执行命令的同一目录中创建名为examplestore的密钥库(如果尚不存在)。该命令为实体的专有名称为 Susan Jones 和采购组织单位的实体生成公用/专用密钥对。

该命令将创建一个包含公共密钥和专有名称信息的自签名证书。 (您提供的专有名称将用作证书中的“主题”字段.)此证书有效期为 90 天,如果未指定-validity 选项,则为默认有效期。该证书与别名signFiles所引用的密钥库条目中的私钥相关联。

自签名证书对于开发和测试应用程序很有用。但是,会警告用户使用不可信证书对应用程序进行签名,并询问他们是否要运行该应用程序。为了使用户更有信心运行您的应用程序,请使用由公认的证书颁发机构颁发的证书。

注意: 如果接受选项默认值,或者希望提示您 Importing 各种值,则该命令可能会更短。每当执行keytool命令时,默认值都会用于具有默认值的未指定选项,并且会提示您 Importing 任何必需的值。对于genkey命令,具有默认值的选项包括别名(其默认值为mykey),有效期(90 天)和密钥库(主目录中名为.keystore的文件)。必需的值包括 dname,storepass 和 keypass。