65.9K
CodeProject 正在变化。 阅读更多。
Home

如何对 J2ME Midlet 进行数字签名

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2010年6月1日

CPOL

6分钟阅读

viewsIcon

37356

本教程将从头到尾用简单的语言解释如何为 Java Mobile Midlet 进行数字签名。

引言

我们最近被要求为 Java Mobile Midlet 进行数字签名,结果发现官方的详细文档非常缺乏。本教程将从头到尾用简单的语言解释如何实现这一点。

入门须知

您可能已经尝试过来自Sun Microsystems的官方教程,但发现它根本无效。如果您想知道,签名 Java 应用程序和签名 J2ME 应用程序是同的过程。您需要在 JAD 文件上做一些额外的工作,然后才能在手机上使用该应用程序。

必备组件

分步说明

  1. 以管理员身份打开命令提示符
  2. 在 Windows Vista 中执行此操作,请转到“开始”菜单,键入cmd,第一个结果应该是“cmd.exe”。右键单击它,然后单击“以管理员身份运行”。

  3. 导航到 keytool
  4. 您需要将工作文件夹切换到 JDK bin 文件夹,keytool 就位于该文件夹中。为此,首先确定 keytool 的位置。它可能在这里:“C:\Program Files\Java\jdk1.6.0_18\bin”,但具体位置可能因您的安装位置和处理器架构而异。

    切换文件夹

    cd "C:\Program Files (x86)\Java\jdk1.6.0_18\bin"
  5. 创建密钥库
  6. 您必须创建一个包含贵公司交易信息的密钥库。您的证书颁发机构(如VeriSignThawte)将使用这些信息来验证您的公司。输入以下命令

    keytool -genkey -keyalg rsa -keystore <keystore_filename> -alias <alias_name>

    <keystore_filename>替换为“truststore2.jks”(不含引号),将<alias_name>替换为您的应用程序名称。请务必排除空格和大写字符。例如,“Hello World”应变为“helloworld”。输入密钥库的密码。如果这是您首次使用此密钥库,系统将要求您重新输入密码。请记下此密码,因为您需要定期使用它。

    系统会要求您输入一些关于您公司的信息。尽可能准确地填写信息,在每个字段后按 Enter。完成所有字段后,您必须确认信息。完成后,键入“yes”然后按 Enter。为别名输入密码,然后再次输入。请务必将此密码记在某个地方,因为您将定期使用它。此密码可以与您的密钥库密码相同。

  7. 创建证书签名请求 (CSR)
  8. 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 已输出到您的桌面,文件名为您之前指定的名称。

  9. 将 CSR 提交给证书颁发机构 (CA)
  10. 现在您已经创建了 CSR,需要将其发送给您的 CA。如果您还没有开始与 CA(如VeriSignThawte)的注册流程,现在就应该开始。最终您会遇到注册表单中的一个字段,上面写着“Enter CSR:”。

    要输入 CSR,请右键单击“cert.csr”文件,选择“打开方式...”,然后使用记事本等简单文本编辑器打开它。

    将 CSR 复制到 Web 表单中,然后继续注册过程。

  11. 将证书导入信任库
  12. 一旦您的 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"

    再次将<>字段替换为您在本教程前面指定的值。

  13. 将证书添加到 JAD
  14. 您的 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>

    这里有很多内容。我们需要仔细审查每个字段的值

    • <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”)。

    最终您应该得到类似这样的内容

    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"
  15. 为 JAD 添加签名
  16. 现在您已经将证书添加到了 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”。

  17. 验证 JAD 是否已签名
  18. 您可以通过发出以下命令来验证 JAD 文件是否已正确签名

    java -jar jadtool.jar -showcert -all -inputjad <input_jadfile>
  19. 测试和分发
  20. 现在您的应用程序已签名,请删除“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/

© . All rights reserved.