dポイントプレゼントキャンペーン実施中!

お分かりになる方、お教え下さい

APKファイルにつけた署名を確認するために

jarsigner -verify -verbose -certs アプリ名.apk


を実行すると

jarsigner:java.lang.SecurityException: invalid SHA1 signature file digest
for n ・・・es/layout/main.xml

という風に表示されてしまいます

これは署名後にmain.xmlの内容が変更された場合に表示されるエラーだそうです
しかし当方でAPKファイルの内容を書き換える技術は到底ございませんし
いじった覚えもありません

通常、main.xmlの内容が署名後に変更された場合は

jar tvf APKファイル名

を実行するとMETA-INF/TECHKEY.SFよりもres/layout/main.xmlの
タイムスタンプのほうが新しくなるそうです

しかし当方で実行した場合

META-INF/TECHKEY.SFは

674 MON JUN 24 18:49:48

res/layout/main.xmlは

476 Sat JUN 01 10:24:18

になっていました

この結果で見る限りではres/layout/main.xmlの方が古いままに
なっていると思われます

なのになぜres/layout/main.xmlの内容が書き換えられたというエラーが出るのか?

解決策が見つからず困っています

お分かりになる方、ご教授下さい
よろしくお願い申し上げます

A 回答 (2件)

とりあえず、SHA1のオプションがポイントみたいです


> -digestalg SHA1

Javaのバージョンは、下記のコマンドで表示されます。
> java -version

この回答への補足

teketon様

あれから当方でも色々勉強させて頂き、

jarsigner -sigalg SHA1withRSA -digestalg SHA1 -keystore 証明書名.keystore -verbose アプリ名.apk 証明書別名

で署名をつけるとあの忌々しいメッセージは表示されなくなり
「jarが検証されました」といううれしいメッセージが表示されるようになりました

しかしなぜか二重署名になってしまい、やはりGooglePlayにアプリを
登録する事はできませんでした

jarsigner -verify -verbose -certs アプリ名.apk

で確認すると

当方がつけた署名以外に

X.509, CN=Android Debug, O=Android, C=US
[証明書は 11/12/20 23:53 に失効します]


という署名がついて複数署名になっています

また、

[CertPathが検証されていません: Path does not chain with any of the trust a
ors]

というエラーが署名の箇所に表示され文末には

このjarには、証明書チェーンがまだ検証されていないエントリが含まれています

と表示されています

なぜこのようなエラーが出るのか、複数署名になるのを防ぐ事はできるのか

もしおわかりになりましたらご指導下さい

何卒よろしくお願い申し上げます

補足日時:2013/07/07 16:33
    • good
    • 0
この回答へのお礼

何度も回答頂き本当にありがとうございます
本当に嬉しいです

jarsigner -keystore 証明書名 -digestalg SHA1 アプリ名 証明書別名

を実行してみるとパスワードを要求されましたが入力しても
そのあと何も表示されませんでした

試しに

jarsigner -verify -verbose -certs アプリ名.apk

で署名確認するとやはり

jarsigner:java.lang.SecurityException: invalid SHA1 signature file digest
for n ・・・es/layout/main.xml


と表示されました…

java -version

でバージョンを確認すると

java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b16)
Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode, sharing)

と表示されました

これは当方がダウンロードしたJDKのバージョンと一致しています
ここからダウンロードしました
      ↓
http://www.searchman.info/java_eclipse/1010.html

このJAVAに問題があるのでしょうか?

「署名した環境と検証する環境でJavaのバージョンが違う場合」
というのがどういう風に確認するのかがわからないのです

本当に初心者ですみません

お忙しい中お時間を頂いて本当に感謝しています
もし当方の問題点がおわかりになればお教え下さい

本当にありがとうございました

お礼日時:2013/07/07 11:20

署名の仕方が間違っているんじゃないかなあ。



>jarsigner -keystore mykeystore -digestalg SHA1 jarfile alias

あと、署名した環境と検証する環境でJavaのバージョンが違う場合もあやしそう。

参考URL:http://stackoverflow.com/questions/8176166/inval …
    • good
    • 0
この回答へのお礼

teketon様

お忙しい中回答頂き誠にありがとうございます

なるほど、別の署名の仕方があるんですね
当方は

jarsigner -verbose -keystore c:\証明書のあるディレクトリ\証明書名.keystore c:\ファイルのあるディレクトリ\アプリ名.apk 証明書別名

で署名をしていました

頂いた回答を元に勉強してみます

JAVAのバージョンが原因の場合もあるんですね
そちらも勉強してみます

しかし何しろ初心者で英語もわからないものですからできるかどうか…(;´д` )

出勤前で時間がないので取り急ぎお礼だけさせて頂きました

八方ふさがりの状態ですので少しでもヒントをいただけるのは
本当にありがたいです

もしお時間があれば初心者にもわかるようにもう少し詳しくお教え頂けますでしょうか?

・各環境のJAVAバージョンの確認の仕方


・jarsigner -keystore mykeystore -digestalg SHA1 jarfile alias

はjarsigner -keystore 証明書名 -digestalg SHA1 アプリ名 証明書別名

でよいのでしょうか?

取り急ぎお礼させて頂きます
本当にありがとうございました

お礼日時:2013/07/04 08:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!