如何对 J2ME Midlet 进行数字签名





0/5 (0投票)
本教程将从头到尾用简单的语言解释如何为 Java Mobile Midlet 进行数字签名。
引言
我们最近被要求为 Java Mobile Midlet 进行数字签名,结果发现官方的详细文档非常缺乏。本教程将从头到尾用简单的语言解释如何实现这一点。
入门须知
您可能已经尝试过来自Sun Microsystems的官方教程,但发现它根本无效。如果您想知道,签名 Java 应用程序和签名 J2ME 应用程序是不同的过程。您需要在 JAD 文件上做一些额外的工作,然后才能在手机上使用该应用程序。
必备组件
分步说明
- 以管理员身份打开命令提示符
- 导航到 keytool
- 创建密钥库
- 创建证书签名请求 (CSR)
- 将 CSR 提交给证书颁发机构 (CA)
- 将证书导入信任库
- 将证书添加到 JAD
- <keystorename> - 请记住,密钥库实际上位于不同的工作目录中,因此您需要指定其完整路径:“C:\Program Files (x86)\Java\jdk1.6.0_18\bin\truststore2.jks”(Windows 搜索在这里很有用)。
- <aliasname> - 您之前指定的别名(testapp)。
- <password> - 您的信任库密码。
- <input_jadfile> - JAD 的位置(“C:\Users\Jon\Desktop\MyApp.jad”)。
- <output_jadfile> - 告诉工具新 JAD 文件的输出位置,并给它一个与您当前使用的名称略有不同的名称(“C:\Users\Jon\Desktop\MyApp 0.jad”)。
- 为 JAD 添加签名
- 验证 JAD 是否已签名
- 测试和分发
在 Windows Vista 中执行此操作,请转到“开始”菜单,键入cmd,第一个结果应该是“cmd.exe”。右键单击它,然后单击“以管理员身份运行”。
您需要将工作文件夹切换到 JDK bin 文件夹,keytool 就位于该文件夹中。为此,首先确定 keytool 的位置。它可能在这里:“C:\Program Files\Java\jdk1.6.0_18\bin”,但具体位置可能因您的安装位置和处理器架构而异。
切换文件夹
cd "C:\Program Files (x86)\Java\jdk1.6.0_18\bin"
您必须创建一个包含贵公司交易信息的密钥库。您的证书颁发机构(如VeriSign或Thawte)将使用这些信息来验证您的公司。输入以下命令
keytool -genkey -keyalg rsa -keystore <keystore_filename> -alias <alias_name>
将<keystore_filename>替换为“truststore2.jks”(不含引号),将<alias_name>替换为您的应用程序名称。请务必排除空格和大写字符。例如,“Hello World”应变为“helloworld”。输入密钥库的密码。如果这是您首次使用此密钥库,系统将要求您重新输入密码。请记下此密码,因为您需要定期使用它。
系统会要求您输入一些关于您公司的信息。尽可能准确地填写信息,在每个字段后按 Enter。完成所有字段后,您必须确认信息。完成后,键入“yes”然后按 Enter。为别名输入密码,然后再次输入。请务必将此密码记在某个地方,因为您将定期使用它。此密码可以与您的密钥库密码相同。
CSR 本质上是您刚才输入的所有数据的一种加密版本,采用数字签名形式。您必须将签名发送给您的证书颁发机构 (CA) 进行处理。要创建 CSR
keytool -certreq -file "C:\Users\Jon\Desktop\certreq.csr"
-keystore <keystore_filename> -alias <alias_name>
将文件路径(“C:\Users\Jon\Desktop\”)替换为您桌面的路径,出于方便考虑建议使用此路径。将<keystore_filename>替换为您之前指定的(truststore2.jks)文件名,并将<alias_name>
替换为您之前指定的名称(testapp)。
输入密钥库的密码。您会注意到 CSR 已输出到您的桌面,文件名为您之前指定的名称。
现在您已经创建了 CSR,需要将其发送给您的 CA。如果您还没有开始与 CA(如VeriSign或Thawte)的注册流程,现在就应该开始。最终您会遇到注册表单中的一个字段,上面写着“Enter CSR:”。
要输入 CSR,请右键单击“cert.csr”文件,选择“打开方式...”,然后使用记事本等简单文本编辑器打开它。
将 CSR 复制到 Web 表单中,然后继续注册过程。
一旦您的 CA 验证了您的身份,他们就会回复一个 Sun Java 代码签名数字 ID,它基本上看起来就像您在教程前一步发送给他们的原始 CSR 的一个非常长的版本。在使用您的数字 ID 之前,您需要做一些工作。在桌面上创建一个名为“cert.p7b”的新文件,并将 CA 的响应复制并粘贴到其中。
请务必包含“BEGIN CERTIFICATE
”和“END CERTIFICATE
”的起始和结束声明。这些是证书的一部分。另请注意,文本两侧应有 5 个破折号(-)。
要将证书导入您的信任库,请发出以下命令
keytool -import -trustcacerts -keystore <keystore_filename> -alias <alias_name>
-file "C:\Users\Jon\Desktop\cert.p7b"
再次将<>字段替换为您在本教程前面指定的值。
您的 Java Midlet 由两个文件组成:一个 JAR 文件和一个 JAD 文件。JAD 文件是描述您 JAR 文件信息的描述符文件。必须使用证书签名的是 JAD 文件,而不是 JAR 文件(这就是许多人出错的原因!)。
在此之前,您需要将工作目录更改为“JADTool.jar”文件所在的位置。此文件是 Java Wireless Toolkit (WTK) 的一部分,其位置可能因您的安装位置而异。该文件可能在此处:“C:\WTK2.5.2_01\bin”。要更改工作目录,请发出以下命令
cd "C:\WTK2.5.2_01\bin"
要将证书添加到 JAD,请发出此命令
Java -jar JadTool.jar -addcert -keystore <keystorename> -alias <aliasname>
-storepass <password> -inputjad <input_jadfile>
-outputjad <output_jadfile>
这里有很多内容。我们需要仔细审查每个字段的值
最终您应该得到类似这样的内容
Java -jar JadTool.jar -addcert -keystore "C:\Program Files
(x86)\Java\jdk1.6.0_18\bin\truststore2.jks" -alias testapp
-storepass password -inputjad "C:\Users\Jon\Desktop\MyApp.jad"
-outputjad "C:\Users\Jon\Desktop\MyApp 0.jad"
现在您已经将证书添加到了 JAD,您必须为 JAD 添加签名。命令与我们刚才发出的命令类似
java -jar jadtool.jar -addjarsig -jarfile <jar_file> -keystore <keystorename>
-alias <aliasname> -storepass <password> -keypass <password>
-inputjad <input_jadfile> -outputjad <output_jadfile>
主要区别在于将“-addcert”命令更改为“-addjarsign”命令。在指定<input_jadfile>参数时,请务必指向您刚刚创建的 JAD 文件(“C:\Users\Jon\Desktop\MyApp 0.jad”),而不是原始文件。为<output_jadfile>参数提供一个新名称,例如“C:\Users\Jon\Desktop\MyApp 1.jad”。
您可以通过发出以下命令来验证 JAD 文件是否已正确签名
java -jar jadtool.jar -showcert -all -inputjad <input_jadfile>
现在您的应用程序已签名,请删除“MyApp.jad”和“MyApp 0.jad”。然后将“MyApp 1.jad”重命名为“My App.jad”。
将 JAD 和 JAR 文件都传输到您的手机或其他测试设备。查看应用程序的详细信息,显示该应用程序已用您的公司信息进行了签名。这因设备而异,但应该会显示类似“Certificate: Yes”的内容。
感谢阅读!
本文最初发布于http://www.jpreece.com/csharp-tutorials/how-to-digitally-sign-a-j2me-midlet/。