如何为J2ME应用签名

在尝试为Java应用程序签名时,可能会遇到官方文档不够详尽的问题。本文将以简单的语言,从开始到结束,详细解释如何完成这一过程。

可能已经尝试过Sun Microsystems的官方教程,但发现它并不适用。值得注意的是,签名Java应用程序和签名J2ME应用程序的过程并不相同。在使用手机上的应用之前,需要对JAD文件进行一些额外的操作。

准备

需要以下工具:

  • SunJavaWireless Toolkit 2.5.2或更高版本
  • 最新的Java Development Kit (JDK)

逐步指导

在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 -alias

替换为"truststore2.jks"(不带引号),将替换为应用程序的名称。确保不包含空格和大写字符。例如,"Hello World"应更改为"helloworld"。输入密钥库密码。如果这是第一次使用这个密钥库,将被要求重新输入密码。记下这个密码,因为需要经常使用它。

将被要求输入一些关于公司的信息。尽可能准确地填写信息,每个字段后按Enter键。当所有字段都完成后,必须确认信息。完成后,输入"yes"然后按Enter键。输入别名的密码,然后重新输入它。确保记下这个密码,因为将经常使用它。这个密码可以和密钥库密码相同。

CSR基本上是刚刚输入的所有数据的加密版本,以数字签名的形式。必须将签名发送给证书颁发机构(CA)进行处理。要创建CSR:

keytool -certreq -file "C:\Users\Jon\Desktop\certreq.csr" -keystore -alias

将文件路径替换为桌面路径("C:\Users\Jon\Desktop\"),建议这样做以方便。将替换为之前指定的文件名(truststore2.jks),将替换为之前指定的名称(testapp)。输入密钥库的密码。会注意到CSR已经输出到桌面,文件名是之前指定的。

现在已经创建了CSR,需要将其发送给CA。如果还没有开始与CA(如VeriSign或Thawte)的注册过程,应该现在开始。最终会在注册表单上看到一个字段,上面写着"输入CSR"。

要输入CSR,请使用简单的文本编辑器(如记事本)打开"cert.csr"文件,通过右键点击并选择"打开方式..."。

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

一旦CA验证了身份,他们将回复一个Sun Java代码签名数字ID,这基本上看起来像是之前发送给他们的CSR的长版本。在可以使用数字ID之前,需要做一些工作。在桌面上创建一个名为"cert.p7b"的新文件,并将CA的回复复制粘贴进去。

确保包括"BEGIN CERTIFICATE"和"END CERTIFICATE"的起始和结束声明。这些是证书的一部分。还要注意,文本的两侧应该有5个破折号(-)。

要将证书导入到信任库,执行以下命令:

keytool -import -trustcacerts -keystore -alias -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 -alias -storepass -inputjad -outputjad

这里有很多操作。需要仔细检查每个字段值:

  • - 记住,密钥库实际上位于不同的工作目录,所以需要指定其完整路径:"C:\Program Files (x86)\Java\jdk1.6.0_18\bin\truststore2.jks"(Windows搜索在这里是好朋友)。
  • - 之前指定的别名(testapp)。
  • - 密钥库密码。
  • - JAD的位置("C:\Users\Jon\Desktop\MyApp.jad")。
  • - 告诉工具在哪里输出新的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"

现在已经将证书添加到JAD,必须将签名添加到JAD。命令与刚刚发出的命令类似:

java -jar jadtool.jar -addjarsig -jarfile -keystore -alias -storepass -keypass -inputjad -outputjad

主要的区别是将"-addcert"命令更改为"-addjarsign"命令。确保在指定参数时,指向刚刚创建的JAD文件("C:\Users\Jon\Desktop\MyApp 0.jad"),而不是原始文件。给参数一个新的名称,例如"C:\Users\Jon\Desktop\MyApp 1.jad"。

可以通过执行以下命令来验证JAD文件是否已正确签名

java -jar jadtool.jar -showcert -all -inputjad

现在应用程序已经签名,删除"MyApp.jad"和"MyApp 0.jad"。现在将"MyApp 1.jad"重命名为"My App.jad"。

将JAD和JAR文件传输到手机或其他测试设备。查看应用程序的详细信息,显示应用程序已用公司信息签名。这因设备而异,但应该类似于"证书:是"。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485