1. 概要

KeyStoreは、その名前が示すように、基本的に証明書、公開鍵、および秘密鍵のリポジトリです。 さらに、 JDKディストリビューションには、それらの管理に役立つ実行可能ファイル、keytoolが付属しています。

一方、証明書には多くの拡張子を付けることができますが、 .cerファイルには公開X.509キーが含まれているため、本人確認にのみ使用できることに注意する必要があります。

この短い記事では、.cerファイルをJavaキーストアにインポートする方法を見ていきます。

2. 証明書のインポート

さらに面倒なことはせずに、サンプルのKeyStore内にBaeldung公開証明書ファイルをインポートしてみましょう。

keytoolには多くのオプションがありますが、関心のあるものはその名前と同じくらい簡単なimportcertです。通常、KeyStore内にはさまざまなエントリがあるため、エイリアスを使用する必要があります。 一意の名前を割り当てる引数:

> keytool -importcert -alias baeldung_public_cert -file baeldung.cer -keystore sample_keystore
> Enter keystore password:
...
> Trust this certificate? [no]:  y
> Certificate was added to keystore

コマンドはパスワードと確認のプロンプトを表示しますが、storepass引数とnoprompt引数を追加することでそれらをバイパスできます。 これは、スクリプトからkeytoolを実行するときに特に便利です。

> keytool -importcert -alias baeldung_public_cert -file baeldung.cer -keystore sample_keystore -storepass pass123 -noprompt
> Certificate was added to keystore

さらに、KeyStoreが存在しない場合は、自動的に生成されます。 この場合、 storetype引数を使用して形式を設定できます。 指定しない場合、Java 8以前を使用している場合、KeyStore形式はデフォルトでJKSになります。 Java 9以降では、デフォルトでPKCS12になります。

> keytool -importcert -alias baeldung_public_cert -file baeldung.cer -keystore sample_keystore -storetype PKCS12
> Enter keystore password:
> Re-enter new password:
...
> Trust this certificate? [no]: y
> Certificate was added to keystore

ここでは、PKCS12KeyStoreを作成しました。 JKSとPKCS12の主な違いは、JKSはJava固有の形式であるのに対し、PKCS12はキーと証明書を格納する標準化された方法であるということです。

必要に応じて、これらの操作をプログラムで実行することもできます。

3. 結論

このチュートリアルでは、KeyStore内に.cerファイルをインポートする方法について説明しました。 そのために、keytoolのimportcertオプションを使用しました。