JavaでパスワードなしのPKCS #12フォーマットの証明書を読み込もうとすると例外が出る。

iPhoneのプッシュ通知の認証に使っている証明書はp12という拡張子になると思いますが、この証明書をパスワードなしで書き出した場合に、JavaのKeyStoreに読み込めないという問題があります。

証明書を読み込もうとしたらゼロ除算で例外が発生

MacでiPhoneのプッシュ通知に関する開発中、パスワードなしで書き出した証明書をKeyStoreを用いて読み込もうしたらゼロ除算の例外が発生しました。
これは以下のように問題として報告されています。
JDK-6415637 : PKCS12KeyStore exceptions

Caused by: java.lang.ArithmeticException: / by zero
        at com.sun.crypto.provider.PKCS12PBECipherCore.a(DashoA13*..)
        at com.sun.crypto.provider.PKCS12PBECipherCore.a(DashoA13*..)
        at com.sun.crypto.provider.PKCS12PBECipherCore.a(DashoA13*..)
        at com.sun.crypto.provider.PKCS12PBECipherCore.a(DashoA13*..)

パスワード入れれば済むのですが、少し気持ち悪いです。

JDK7 update 4で修正

少し辿ってみると、JDK7で修正されているという記述が見つかりました。
JDK-2221118 : enable empty password support for pkcs12 keystore
ターミナルで現在のJavaのバージョンを確認してみます。

$ java -version
java version "1.6.0_43"

JDK6のようなので、アップデートしたら直るかな、と思いアップデートしてみます。
JDKのダウンロードは、Java SE Downloadsから。

$ java -version
java version "1.7.0_25"

アップデート完了。これで実行してみたら、先ほどの例外は出なくなりました。

コメント

タイトルとURLをコピーしました