这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发行说明。
在签署包含contract
文件的Contract.jar
JAR文件之前,如果您还没有合适的密钥可用,您需要生成密钥。您需要使用私钥对您的JAR文件进行签名,而您的接收者需要您相应的公钥来验证您的签名。
本课程假设您还没有密钥对。您将创建一个名为examplestanstore
的密钥库,并创建一个带有新生成的公钥/私钥对(其中公钥在证书中)的条目。
现在假设您是Stan Smith,并且您在Example2公司的法律部门工作。在命令窗口中键入以下内容,以创建一个名为examplestanstore
的密钥库并为Stan Smith生成密钥:
keytool -genkey -alias signLegal -keystore examplestanstore
密钥库工具会提示您输入密钥库密码、您的可分辨名称信息和密钥密码。以下是提示信息;加粗部分表示您应输入的内容。
Enter keystore password: <password> What is your first and last name? [Unknown]: Stan Smith What is the name of your organizational unit? [Unknown]: Legal What is the name of your organization? [Unknown]: Example2 What is the name of your City or Locality? [Unknown]: New York What is the name of your State or Province? [Unknown]: NY What is the two-letter country code for this unit? [Unknown]: US Is <CN=Stan Smith, OU=Legal, O=Example2, L=New York, ST=NY, C=US> correct? [no]: y Enter key password for <signLegal> (RETURN if same as keystore password):
上述的keytool
命令在执行该命令的同一目录中(假设指定的密钥库尚不存在)创建名为examplestanstore
的密钥库,并分配了所输入的密码。该命令为具有姓名为Stan Smith和法律部门的组织单位的实体生成了一个公钥/私钥对。
您刚刚创建的自签名证书包括公钥和可分辨名称信息。(自签名证书是由与证书中的公钥相对应的私钥签名的证书。)此证书的有效期为90天。如果您没有指定-validity选项,则这是默认的有效期。该证书与通过别名signLegal
引用的密钥库条目中的私钥关联。私钥被分配了输入的密码。
自签名证书对于开发和测试应用程序很有用。然而,用户会收到警告,该应用程序是使用不受信任的证书进行签名的,并询问他们是否要运行该应用程序。为了使用户更有信心地运行您的应用程序,请使用由公认的证书颁发机构颁发的证书。