keytool
にあるはずのJavaインストールで使用できます$JAVA_HOME/bin
。Java キーストアは、$JAVA_HOME/lib/security/cacerts
または$JAVA_HOME/jre/lib/security/cacerts
JDK または JRE がインストールされているかどうかによって異なります。
Java 9 以降を使用している場合、正確な場所を知る必要はありません。-cacerts
オプションをショートカットとして使用できます。
Java 9+
したがって、Java 9 (別名 Java 1.9) 以降では、単に使用します
keytool -importcert -trustcacerts -cacerts -file myCert.pem -alias myCert
以前の Java バージョン
Java 8 (別名 1.8) 以前では、次のようにキーストアの場所を指定する必要があります
keytool -importcert -trustcacerts -keystore $JAVA_HOME/lib/security/cacerts -file myCert.pem -alias myCert
Java 5 (別名 1.5) 以前では、この-importcert
オプションは存在しませんでした。と呼ばれていまし-import
たが、それ以外は同じです。だから使う
keytool -import -trustcacerts -keystore $JAVA_HOME/lib/security/cacerts -file myCert.pem -alias myCert
追加オプション
- トラストストアのパスワードを求められます。デフォルトのパスワードはchangeitです。
- インポートを無人で実行する必要がある場合は、追加できます
-storepass changeit -noprompt
フォーマット
keytool
X.509 v1、v2、および v3 証明書、およびそのタイプの証明書 (P7B) で構成される PKCS#7 形式の証明書チェーンをインポートできます。インポートするデータを提供する必要があります
- バイナリ エンコーディング形式 (DER) のいずれか
- または印刷可能なエンコーディング形式 (別名 base64 エンコード) で、
-----BEGIN
と-----END
行で囲まれています (PEM)
注: PEM 形式の証明書チェーンが実際に機能するかどうかはわかりません。
ボーナススクリプト
残念ながら、これは bash であるため、Windows ユーザー向けのソリューションはありません。
この単純なスクリプトは、stackoverflow に関するいくつかの有用な質問とスマートな回答のおかげで作成され、Java のバージョンをチェックし、必要に応じて正しいキーストアの場所を特定し、1 つのコマンドで複数の証明書をインポートできます。ファイル パターン引数を単一引用符で囲む必要があることに注意してください (使用法を参照)。
addcerts.sh
#!/bin/bash
# Add custom root certificates to Java trust store
if [ "$#" -ne 1 ]; then
SCRIPT=`basename "$0"`
echo "Usage: $SCRIPT 'path/to/certs/*'"
exit 1
fi
CERTFILES=$1
JAVA_VERSION=`java -version 2>&1 | head -1 | cut -d'"' -f2 | sed '/^1\./s///' | cut -d'.' -f1`
if (( $JAVA_VERSION >= 9 )); then
CACERTS="-cacerts"
else
# Check where cacerts are located
# differs depending or jdk or jre installed
if [ -d "$JAVA_HOME/jre" ]; then
CACERTS="$JAVA_HOME/jre"
else
CACERTS="$JAVA_HOME"
fi
CACERTS="-keystore $CACERTS/lib/security/cacerts"
fi
# Now add certificates
for CERTFILE in $CERTFILES; do
# Remove path, then suffix to derive alias from filename
ALIAS=${CERTFILE##*/}
ALIAS=${ALIAS%.*}
$JAVA_HOME/bin/keytool -importcert -file "$CERTFILE" -alias "$ALIAS" $CACERTS -trustcacerts -storepass changeit -noprompt
if [ $? -ne 0 ]; then
echo "Failed to add $CERTFILE as $ALIAS to $CACERTS"
exit 1
fi
done