Java Midlet に署名するにはどうすればよいですか?
質問
単純な質問とかなり複雑な答え:
セキュリティプロンプトを少なくして携帯電話にロードできるようにするには、Java Midlet にどのように署名しますか?
解決
必要なソフトウェアを入手する
- Java SDK (JDK) から 太陽 (これはすでに持っているはずです)
- Java ワイヤレス ツールキット (WTK) からも 太陽
- 必要に応じて取得してインストールします 蟻 そして アンテナ ビルドを自動化できるようにします (これらを強くお勧めします)
既存の証明書をインポートします (証明書がある場合)
- 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
- 証明書を携帯電話にインポートします(詳細は以下を参照)
C:\j2sdk1.4.2_08\bin>keytool -genkey -alias company -keyalg RSA -validity 365
Enter keystore password: password
What is your first and last name? [Unknown]: My Name
What is the name of your organizational unit? [Unknown]: company
What is the name of your organization? [Unknown]: company
What is the name of your City or Locality? [Unknown]: location
What is the name of your State or Province? [Unknown]: location2
What is the two-letter country code for this unit? [Unknown]: GB
Is CN=My Name, OU=company, O=company, L=location, ST=location2, C=GB correct? [no]: yes
Enter key password for (RETURN if same as keystore password):
アプリケーションをビルドしてパッケージ化する
- 使用
javac
classpath および bootclasspath オプションに特に注意して MIDlet を構築します (そうしないと事前検証が失敗します)。また、ターゲットを 1.1 に、ソースを 1.3 に設定します。 - JADファイルを生成するJADの重要な属性は、ミッドレットjar-url、ミッドレットjarサイズ、ミッドレット焦点を含みます。 、ミッドレットアイコン、ミッドレットデスプト、ミッドレットバージョン
- JAD に基づいて MANIFEST.MF ファイルを生成します。MIDlet-Jar-Size と
MIDlet-Jar-URL
- これらのタスクはどちらも、wtkJad アンテナ タスクを使用して完了できます。
- wtkPackage アンテナ タスクを使用してアプリをパッケージ化して事前検証します。クラスパス プロパティとブートクラスパス プロパティを正しく設定する必要があります。そうしないと、事前検証が失敗します。
申請書に署名する
- 次を使用してアプリケーションに署名します
jarsigner
- 走る
jarsigner -keystore {mykeystore} -storepass (mypassword} {myjar} {myalias}
- これで、署名された jar が完成しました。
MIDlet-Jar-Size
あなたのJADで
- 次に、次を使用して証明書を JAD に追加します。
JadTool.jar
WTKから
- 走る
java -jar JadTool.jar -addcert -alias {myalias} -storepass {mypassword} -keystore {mykeystore} -inputjad {myinputjad} -outputjad {myoutputjad}
- 次に、次を使用して署名を JAD に再度追加します。
JadTool.jar
- 走る
java -jar JadTool.jar -addjarsig -alias {myalias} -jarfile {myjar} -storepass {mypassword} -keypass {mypassword} -keystore {mykeystore} -inputjad {myinputjad} -outputjad {myoutputjad}
導入
- これを MIME タイプが正しく設定された Web サーバーに展開し、携帯電話にダウンロードすると、信頼できるサードパーティ アプリケーションになります。
- 電話機の機能に応じて、Bluetooth、赤外線、またはケーブルを介して JAR および JAD を電話機に送信することにより、アプリケーションを電話機に展開することもできます。Nokiaの電話では、SMS受信トレイにファイルが表示されます
電話機への証明書のインストール
- 携帯電話に証明書をインポートします。WindowsXPSP2では、ファイルを右クリックして「Bluetoothデバイスに送信」を選択してこれを行うことができます。ケーブルまたはInfra Red(IR)でファイルを送信できるはずです。注意:とにかくシリーズ40電話に証明書をインポートすることはありませんでした
- 証明書がインストールされたら、「アプリケーションのインストール」を許可する必要があります。私の携帯電話(nokia 6680)では、これはツールの下にあります - > [設定] - > [証明書管理] - >信頼設定、私はすべてをオンにしますが、「アプリケーションのインストール」が必要だと思います
よくある問題
- JAD を使用してインストールされていないアプリケーション:アプリケーションは JAD を使用してインストールされた場合にのみ信頼されます。アプリケーションは jar からインストールされますが、信頼されません。
- アプリケーションの信頼設定が設定されていません:アプリケーションをインストールしたら、アプリケーションにどの程度の信頼を与えるかを指定する必要があります (デフォルトではすべての権限が取得されるわけではありません)。Nokia シリーズ 60 電話では、これらはアプリの下にあります。マネージャー。
- 電話機にルート証明書がありません:Java Verified 証明書や Verisign 証明書が一部の電話機にない場合は、[ツール] -> [設定] -> [証明書管理] で関連する証明書を確認してください。
- 認証に失敗しました:- この背後には考えられる理由がたくさんあります。私が見つけた理由は次のとおりです。
- 電話機に証明書がありません。証明書がインストールされており、証明書管理でアプリケーションのインストールに対して信頼できるものとしてマークされていることを再確認してください。
- リブート:アプリケーションを完全にアンインストールしてから、携帯電話を再起動してください。バッテリーと SIM も取り外してみてください。特に最初にアンインストールせずに何度も再インストールしている場合は、状況がうまくいかなくなることがよくあります。
- JAD/JAR の不一致:JAD でアプリケーションのサイズを再確認してください。重要なのはディスク上のサイズではなくバイト数であることに注意してください。
- ブラウザのキャッシュ:無線でインストールする場合は、インストールする前にブラウザのキャッシュを必ずクリアしてください
- で改行されると聞いたことはありますが、確認したことはありません
MIDlet-Permissions
問題を引き起こす可能性がありますが、Nokia 6680/6630/6230i では問題ないようです (ファームウェアに依存する可能性がありますか?)
- の
MIDlet-Permissions
属性は多くの問題の原因です (特に、ドキュメントが間違っている/欠落している、または携帯電話によって異なることが多いため)。最初はそれを省略し、一度に 1 つずつ権限を追加してみてください。一部の携帯電話は、サポートしていないアクセス許可について文句を言いますが、一部の携帯電話はそれらを無視します
- 一部の初期の Nokia 6600 ファームウェアには、信頼された MIDlet のインストールを停止するバグがあります。
- 証明書はまだ有効ではありません:証明書を自分で生成した場合は、有効開始日が明日になる可能性があります。また、PC と電話の日付が異なる場合は、証明書の有効期間外になる可能性があります。
- シリーズ 40 電話では証明書管理がありません。署名付きアプリケーションをインストールできますが、自己署名証明書の場合は動作がおかしくなります
- JadTool の問題:私はこれらの問題を経験したことはありませんが、他の多くの人が経験しています
- 「jadtool を手動で使用しようとすると問題が発生します。証明書チェーンがありますが、WTK jadtool を使用して JAD ファイルに追加された 2 番目の証明書を取得できないようです。ただし、興味深いのは、同じ WTK GUI インターフェイスのいずれかを使用してミッドレットに正常に署名できることです。2 番目の証明書が正しく追加されます。私の手順:
- 1.4.2_06 jarsigner.exe を使用して jar に署名します
- WTK (2.2 または 2.3 ベータ) jadtool を使用して、certnum 1 で証明書を追加します
- jadtool を呼び出して certnum 2 で addcert を実行すると、同じ証明書が cert 1-2 として挿入されます。WTK GUI は正常に動作しているように見えるので、何か間違ったことをしているのではないかと思います。」
- 「KVM ニュース グループで、jadtool にバグがあるという内容の投稿を受け取りました。作成者はバグ レポートを提出し、パッチを投稿したと主張しています。 http://archives.java.sun.com/cgi-bin/wa?A2=ind0508&L=kvm-interest&F=&S=&P=9858 また、投稿された興味深いメモの 1 つは、証明書の JAD パラメータは静的であるため、WTK から正しく取得したら、それらを Ant スクリプトに静的に配置できるということでした。
- 「Nokia 6620 デバイスの Midlet に署名しようとしています。実際に 2 つの証明書 (ユーザー CA と中間 CA) を含む Verisign コード署名証明書を使用しています。WTK 2.2 署名ツールを使用しています。このツールが署名時に 2 つの証明書をサポートしているかどうか知っていますか?署名は 2 つの証明書とともに JAD ファイルに追加されますが、インストール時にセキュリティ エラーが発生します。デバイスを確認したところ、Verisign 用に別のルート証明書がインストールされていますが、それでも失敗します。
- 「必要に応じて、デュアル証明書をサポートする sprintpcs 開発者キットをダウンロードできます (http://developer.sprintpcs.com)。ただし、その証明書は Nokia (6620/cingular) 電話機で動作することはありませんでしたが、(開発者ルートが有効になっている) スプリント電話機では動作します。最終的には、このブログで説明されているように証明書を作成し、それを電話機にインストールすることでのみ動作するようになりました。奇妙なことに、私の versign 付き証明書のルート証明書が 6620 電話機上に * あったにもかかわらず、それでも、皆さんが思っているように MIDlet がインストールされませんでした。」
- 古い携帯電話 (6230/i、6682) は x509 証明書をサポートしていません。解決策として WPKI が提案されていますが、これについては調査していません。
- ソケット接続に問題が発生する可能性があります (http://Discussion.forum.nokia.com/forum/showthread.php?t=68306 )おそらく WAP インフラストラクチャとオペレータが提供するサービスが原因です。HTTP はより安全に使用できるプロトコルです
- 「オンラインにアクセスしてアプリケーションの有効性を確認してください」:はい・いいえ。電話機で [はい] ボタンをクリックすると、次のエラーが表示されます。「このアプリケーションの証明書は取り消されました」と表示され、インストールが失敗します。これを修正するには、[ツール] -> [マネージャー] -> [メニュー] -> [設定] -> [オンライン証明書チェック] [オン / オフ / 必須] に移動します。デフォルトのアドレス設定もあります。オンライン制御設定が必要な場合、デフォルトのアドレスがないとチェックは失敗します。見る http://Discussion.forum.nokia.com/forum/showthread.php?t=71071
信頼ドメイン
- MIDP2 には 4 つの異なる信頼ドメイン (メーカー、オペレーター、信頼できるサードパーティ、および信頼できない) があります。信頼できるサードパーティは、私たちにとって実際に役立つ唯一のものです。私の Nokia 6680 (Vodafone UK) では次のオプションが提供されます。
ネットワークアクセス:許可されていない、毎回尋ねる、初めてのメッセージングを尋ねてください:許可されていません、Auto-STARTのたびに尋ねてください:許可されていない、毎回尋ねる、初めての接続を尋ねてください:許可されていない、毎回尋ねる、初めて尋ねる、常にマルチメディアを許可する:許可されていない、毎回尋ねる、初めてユーザーデータを読む尋ねる:許可されていない、毎回尋ねる、初めて尋ねる、常にユーザーデータの編集を許可する:許可されない、毎回質問する、初めて質問する、常に許可する - これらの設定は通信事業者と電話機の製造元によって定義されるため、電話機、製造元、通信事業者によって異なります。
未解決の問題
- J2ME WTK ユーティリティを使用してこの形式で JAD に署名できましたが、デバイスにインストールしようとすると、「アプリケーション認証に失敗しました 909」というメッセージが表示されます。
サンプル JAD
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
サンプル Ant ビルド ファイル私たちのものを置きました EC1M ant ビルド ファイル (できれば) これらすべてが少し簡単になるように、私たちのウェブサイトにアップしてください。その他のリソースこれ Nokia フォーラムの FAQ 一読の価値があります。
他のヒント
ステップ1: で上昇させることができるCSR要求を作成します。
1) Creating keystore and using that generate CSR file.
2) Perform steps given by certificate authority and download CSR and private key files.
ステップ2: 検証のための認証局へのあなたの情報を与えます。
ステップ3: あなたは、コード署名用の証明書を提供されます。
ステップ4: あなたは、ルート証明書と一緒にダウンロード中間証明書を必要とする。
ステップ5: 今、あなたはyour_domain_name.crt持つことになる、IntCertCA.crt、TrustedRoot.crt
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.
ステップ6: あなたのyour_domain_name.pem
の中に秘密鍵をインポート 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 )
ステップ7: output_file_name.p12
からキーストアを作成します。 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
ステップ8: 注:PLEASE TAKE次のコマンドをトリガする前にあなたのJADファイルのバックアップ
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
ステップ9: 注:PLEASE TAKE次のコマンドをトリガする前にあなたの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