这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java语言变更,了解Java SE 9及后续版本中更新的语言特性的摘要。
请参阅JDK发布说明,了解有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息。
如果代码签名者尚未拥有适合签署代码的私钥,则首先必须生成该私钥,以及一个相应的公钥,可以由代码接收方的运行时系统用于验证签名。
由于本课程假设您尚未拥有这些密钥,因此您将创建一个名为examplestore
的密钥库,并创建一个包含新生成的公/私钥对的条目(公钥在证书中)。
在命令窗口中键入以下命令以创建名为examplestore
的密钥库并生成密钥:
keytool -genkey -alias signFiles -keystore examplestore
您将被要求输入密钥和密钥库的密码。
让我们看一下keytool
的每个子部分的含义。
storepass
值指定密钥库密码。keypass
值指定即将生成的私钥的密码。您始终需要此密码才能访问包含该密钥的密钥库条目。该条目不必有自己的密码。当您被要求输入密钥密码时,您可以选择让它与密钥库密码相同。注意:出于安全原因,您不应在命令行上设置密钥或密钥库密码,因为它们更容易被拦截。
如果使用上述keystore
命令,您将被要求输入专有名称信息。以下是提示;粗体表示您应该键入的内容。
您的名字和姓氏是什么? [Unknown]: Susan Jones 您的组织单位的名称是什么? [Unknown]: Purchasing 您的组织的名称是什么? [Unknown]: ExampleCompany 您所在城市或地区的名称是什么? [Unknown]: Cupertino 您所在州或省的名称是什么? [Unknown]: CA 该单位的两字母国家代码是什么? [Unknown]: US <CN=Susan Jones, OU=Purchasing, O=ExampleCompany, L=Cupertino, ST=CA, C=US> 是否正确? [no]: y
keytool
命令在执行命令的同一目录中创建名为examplestore
的密钥库(如果不存在)。该命令为具有Susan Jones为常用名称和Purchasing为组织单位的实体生成了一个公/私钥对。
该命令创建一个自签名证书,包括公钥和专有名称信息。(您提供的专有名称将用作证书中的“主题”字段。)该证书将在90天内有效,如果您不指定-validity选项,则默认有效期为90天。该证书与keystore中由别名signFiles
引用的私钥关联。
自签名证书对于开发和测试应用程序非常有用。但是,用户会收到一个警告,说明应用程序是使用不受信任的证书签名的,并被询问是否要运行该应用程序。为了让用户更有信心运行您的应用程序,使用由认可的证书颁发机构颁发的证书。
注意:如果接受选项的默认值或希望提示输入各种值,该命令可以更简短。每当执行keytool
命令时,未指定默认值的选项将使用默认值,并提示输入任何必需的值。对于genkey
命令,具有默认值的选项包括alias(默认为mykey
)、validity(90天)和keystore(您的主目录中名为.keystore
的文件)。必需的值包括dname、storepass和keypass。