如何签署Java Midlet?

如何签署Java Midlet?,java,midlet,sign,Java,Midlet,Sign,一个回答相当复杂的简单问题: 如何签署Java Midlet,以便在安全提示较少的情况下将其加载到手机上?获取所需的软件 从(您应该已经有了这个) 也来自 可以选择获取和安装,并允许您自动化构建(我强烈推荐这些) 导入现有证书(如果有) 如果您从Verisign(或其他提供商)购买了证书,则需要将证书导入J2SE密钥库 尝试使用以下命令keytool-import-alias{myalias}-file{mycertificate}(由于没有正确的证书,我无法测试此命令) 运行keytoo

一个回答相当复杂的简单问题:


如何签署Java Midlet,以便在安全提示较少的情况下将其加载到手机上?

获取所需的软件

  • 从(您应该已经有了这个)
  • 也来自
  • 可以选择获取和安装,并允许您自动化构建(我强烈推荐这些)
  • 导入现有证书(如果有)

  • 如果您从Verisign(或其他提供商)购买了证书,则需要将证书导入J2SE密钥库
  • 尝试使用以下命令
    keytool-import-alias{myalias}-file{mycertificate}
    (由于没有正确的证书,我无法测试此命令)
  • 运行
    keytool-list
    查看您的新证书
  • 接下来,您必须导出证书,以便将其导入手机
  • 运行
    keytool-export-alias{myalias}-file mycertificate.crt
  • 将证书导入您的手机(有关详细信息,请参阅下文)
  • 创建并导入新的(测试)证书

  • 您需要使用(来自JDK)
  • 我使用了以下命令
    keytool-genkey-alias{myalias}-keyalg RSA-validity 365
  • 这将提示您输入密钥库密码,输入您的密钥库密码(如果您有现有密钥库)或您想要使用的密钥库密码(如果您还没有密钥库)
  • 填写有关位置/公司名称等的所有提示
  • 运行
    keytool-list
    查看您的新证书
  • 接下来,您必须导出证书,以便将其导入手机
  • 运行
    keytool-export-alias{myalias}-file mycertificate.crt
  • 将证书导入您的手机(有关详细信息,请参阅下文)
  • 构建并打包应用程序

  • 用于构建MIDlet,特别注意类路径和引导类路径选项(否则预验证将失败)。我还将target设置为1.1,source设置为1.3
  • 生成JAD文件JAD中的关键属性是 MIDlet Jar URL、MIDlet Jar大小、MIDlet权限我们还包括MIDlet图标、MicroEdition配置、MicroEdition配置文件、MIDlet名称、MIDlet-Push-1、MIDlet图标、MIDlet描述和MIDlet版本
  • 根据JAD生成MANIFEST.MF文件,必须删除MIDlet Jar大小和
    MIDlet Jar URL
  • 这两项任务都可以使用wtkJad天线任务完成
  • 使用wtkPackage Antenna任务打包并预验证应用程序必须正确设置类路径和引导类路径属性,否则预验证将失败
  • 在应用程序上签名

  • 使用
  • 运行
    jarsigner-keystore{mykeystore}-storepass(mypassword}{myjar}{myalias}
  • 现在您有了一个已签名的jar,您需要更新JAD中的
    MIDlet jar大小
  • 现在使用来自WTK的证书将证书添加到JAD
  • 运行
    java-jarjadtool.jar-addcert-alias{myalias}-storepass{mypassword}-keystore{mykeystore}-inputjad{myinputjad}-outputjad{myoutputjad}
  • 现在再次使用添加签名到JAD
  • 运行
    java-jarjadtool.jar-addjarsig-alias{myalias}-jarfile{myjar}-storepass{mypassword}-keypass{mypassword}-keystore{mykeystore}-inputjad{myinputjad}-outputjad{myoutputjad}
  • 部署

    Manifest-Version: 1.0 MIDlet-Name: MyApp Created-By: 1.4.2_05-b04 (Sun Microsystems Inc.) MIDlet-Push-1: sms://:6553,net.ec1m.MyApp.midp.MyAppMIDlet,* MIDlet-1: MyApp, logo.png, net.ec1m.MyApp.midp.MyAppMIDlet MicroEdition-Configuration: CLDC-1.1 Ant-Version: Apache Ant 1.6.2 MIDlet-Icon: logo.png MIDlet-Vendor: EC1M MIDlet-Permissions: javax.microedition... MIDlet-Version: 1.0.67 MicroEdition-Profile: MIDP-2.0 MIDlet-Description: MyApp MIDlet
  • 将其部署到正确设置MIME类型的web服务器,并将其下载到您的手机,它将成为受信任的第三方应用程序
  • 根据手机的功能,您还可以通过蓝牙、红外或电缆将JAR和JAD发送到手机,从而将应用程序部署到手机上 出现在您的短信收件箱中
  • 在手机上安装证书

  • 将证书导入您的手机,在Windows XP SP2中我可以这样做 通过右键单击该文件并选择“发送到蓝牙设备”来完成此操作, 你应该能够通过电缆或红外线(IR)发送文件 尚未找到在Series 40手机上导入证书的方法
  • 安装证书后,需要对其进行授权 “应用程序安装”。在我的手机(诺基亚6680)上,这是在 工具->设置->证书管理->信任设置,我打开了 除了我认为“应用程序安装”之外,其他一切都是你所需要的
  • 常见问题

  • 未使用JAD安装的应用程序:只有使用JAD安装的应用程序才受信任,应用程序仍将从jar安装,但不受信任
  • 未设置应用程序信任设置:安装应用程序后,您需要指定给予它的信任程度(默认情况下,它不会获得所有权限)。在诺基亚60系列手机上,这些设置位于App.Manager下
  • 手机缺少根证书:某些手机缺少Java验证证书和/或Verisign证书。请在工具->设置->证书管理下检查相关证书
  • 授权失败:-这背后有很多可能的原因,下面是我遇到的一些原因
  • 手机中缺少证书,请仔细检查您的证书是否已安装,并且已在证书管理中将您的证书标记为受信任的应用程序安装
  • 重新启动:完全卸载应用程序,然后重新启动手机尝试取出电池和SIM卡,通常情况下会出现问题,特别是如果您一直在重新安装很多应用程序而没有先卸载
  • JAD/JAR不匹配:在JA中仔细检查应用程序大小
    MIDlet-Jar-URL: MyApp.jar
    MIDlet-Jar-Size: 201365
    MIDlet-Name: MyApp
    MIDlet-Vendor: EC1M
    MicroEdition-Profile: MIDP-2.0
    MicroEdition-Configuration: CLDC-1.1
    MIDlet-Icon: logo.png
    MIDlet-Push-1: sms://:6553,net.ec1m.MyApp.midp.MyAppMIDlet,*
    MIDlet-Description: MyApp MIDlet
    MIDlet-Permissions: javax.microedition.io.PushRegistry,javax.microedition.io.Connector.sms...
    MIDlet-Version: 1.0.67 MIDlet-1: MyApp, logo.png,net.ec1m.MyApp.midp.MyAppMIDlet
    MIDlet-Certificate-1-1: MIICODCCAaECBEKqpfswDQYJKoZIhvcNAQEEBQAwYz...=
    MIDlet-Jar-RSA-SHA1: EUsAch/.../hEZOsJsiCjBOhNs/3FSw4=
    
    Manifest-Version: 1.0 MIDlet-Name: MyApp Created-By: 1.4.2_05-b04 (Sun Microsystems Inc.) MIDlet-Push-1: sms://:6553,net.ec1m.MyApp.midp.MyAppMIDlet,* MIDlet-1: MyApp, logo.png, net.ec1m.MyApp.midp.MyAppMIDlet MicroEdition-Configuration: CLDC-1.1 Ant-Version: Apache Ant 1.6.2 MIDlet-Icon: logo.png MIDlet-Vendor: EC1M MIDlet-Permissions: javax.microedition... MIDlet-Version: 1.0.67 MicroEdition-Profile: MIDP-2.0 MIDlet-Description: MyApp MIDlet
    1) Creating keystore and using that generate CSR file.
    2) Perform steps given by certificate authority and download CSR and private key files.
    
    Now you need to create a chained certificate by combining all above certificates.
    
    1) Open a text editor (such as wordpad) and paste the entire body of each certificate into one text file in the following order:
    
        The Primary Certificate - your_domain_name.crt
        The Intermediate Certificate - IntCertCA.crt
        The Root Certificate - TrustedRoot.crt
        Make sure to include the beginning and end tags on each certificate. The result should look like this:
    
        -----BEGIN CERTIFICATE----- 
        (Your Primary SSL certificate: your_domain_name.crt) 
        -----END CERTIFICATE----- 
        -----BEGIN CERTIFICATE----- 
        (Your Intermediate certificate: IntCertCA.crt) 
        -----END CERTIFICATE----- 
        -----BEGIN CERTIFICATE----- 
        (Your Root certificate: TrustedRoot.crt) 
        -----END CERTIFICATE-----
    
        Save the combined file as your_domain_name.pem. The .pem file is now ready to use.
    
        openssl pkcs12 -export -in your_domain_name.pem -inkey your_private_key.key -out output_file_name.p12 -name your_alias
    
    
        NOTE: PLEASE REMOVE \ FROM FOLLOWING COMMANDS AND EXECUTE ( \ IS BASICALLY COMMAND CONTINUETY )
    
        keytool -importkeystore \
         -deststorepass changeit -destkeypass changeit -destkeystore your_domain_keystore.ks \
         -srckeystore output_file_name.p12 -srcstoretype PKCS12 -srcstorepass your_store_password \
         -alias your_alias
    
        Add your certificates to your your_midlet_name.jad file.
    
        java -jar JadTool.jar -addcert -alias your_alias \
        -storepass your_store_password \
        -keystore your_domain_keystore.ks \
        -inputjad your_midlet_name.jad -outputjad your_midlet_name.jad      
    
        Sign your midlet, also use your_midlet_name.jad file generated from Step8.
    
        java -jar JadTool.jar -addjarsig \
        -alias your_store_password \
        -storepass your_store_password \
        -keypass your_store_password \
        -keystore your_domain_keystore.ks \
        -inputjad your_midlet_name.jad -outputjad your_midlet_name.jad