自己署名証明書をJavaにインポートしたいので、SSL接続を確立しようとするすべてのJavaアプリケーションがこの証明書を信頼します。
これまでのところ、私はそれをインポートすることができました
keytool -import -trustcacerts -noprompt -storepass changeit -alias $REMHOST -file $REMHOST.pem
keytool -import -trustcacerts -noprompt -keystore cacerts -storepass changeit -alias $REMHOST -file $REMHOST.pem
それでも、実行しようとすると HTTPSClient.class
私はまだ得ます:
javax.net.ssl.SSLHandshakeException:Sun.security.validator.ValidatorException:PKIXパスの構築に失敗しました:Sun.security.provider.certpath.SunCertPathBuilderException:要求されたターゲットへの有効な証明書パスが見つかりません
Windowsでは最も簡単な方法はプログラム portecle を使うことです。
System.out.println(System.getProperty("Java.home"));
Linuxの場合:
SSL証明書は、すでに次のように使用しているWebサーバーからダウンロードできます。
$ echo -n | openssl s_client -connect www.example.com:443 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/examplecert.crt
必要に応じて証明書情報を確認します。
$ openssl x509 -in /tmp/examplecert.crt -text
証明書をJava cacertsキーストアにインポートします。
$ keytool -import -trustcacerts -keystore /opt/Java/jre/lib/security/cacerts \
-storepass changeit -noprompt -alias mycert -file /tmp/examplecert.crt
編集する
ssls.com から年間5ドルの証明書を取得できるため、最近ではキーストアに証明書を追加する必要はあまりありません。念のためにそれはあなたのためのオプションです。
私は証明書をキーストアに追加する小さなスクリプトを書くことになったので、使うのはずっと簡単です。
最新版は https://github.com/ssbarnea/keytool-trust から入手できます。
#!/bin/bash
# version 1.0
# https://github.com/ssbarnea/keytool-trust
REMHOST=$1
REMPORT=${2:-443}
KEYSTORE_PASS=changeit
KEYTOOL="Sudo keytool"
# /etc/Java-6-Sun/security/cacerts
for CACERTS in /usr/lib/jvm/Java-8-Oracle/jre/lib/security/cacerts \
/usr/lib/jvm/Java-7-Oracle/jre/lib/security/cacerts \
"/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security/cacerts" \
"/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/MacOS/itms/Java/lib/security/cacerts"
do
if [ -e "$CACERTS" ]
then
echo --- Adding certs to $CACERTS
# FYI: the default keystore is located in ~/.keystore
if [ -z "$REMHOST" ]
then
echo "ERROR: Please specify the server name to import the certificatin from, eventually followed by the port number, if other than 443."
exit 1
fi
set -e
rm -f $REMHOST:$REMPORT.pem
if openssl s_client -connect $REMHOST:$REMPORT 1>/tmp/keytool_stdout 2>/tmp/output </dev/null
then
:
else
cat /tmp/keytool_stdout
cat /tmp/output
exit 1
fi
if sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' </tmp/keytool_stdout > /tmp/$REMHOST:$REMPORT.pem
then
:
else
echo "ERROR: Unable to extract the certificate from $REMHOST:$REMPORT ($?)"
cat /tmp/output
fi
if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT >/dev/null
then
echo "Key of $REMHOST already found, skipping it."
else
$KEYTOOL -import -trustcacerts -noprompt -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
fi
if $KEYTOOL -list -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -keystore "$CACERTS" >/dev/null
then
echo "Key of $REMHOST already found in cacerts, skipping it."
else
$KEYTOOL -import -trustcacerts -noprompt -keystore "$CACERTS" -storepass ${KEYSTORE_PASS} -alias $REMHOST:$REMPORT -file /tmp/$REMHOST:$REMPORT.pem
fi
fi
done
`` `
D:\Java\jdk1.5.0_10\bin\keytool -import -file "D:\Certificates\SDS services\Dev\dev-sdsservices-was8.infavig.com.cer" -keystore "D:\Java\jdk1.5.0_10\jre\lib\security\cacerts" -alias "sds certificate"
これは私のために働きました。 :)
Sudo keytool -importcert -file filename.cer -alias randomaliasname -keystore $ Java_HOME/jre/lib/security/cacerts -storepass changeit
デフォルトでJava cacertsファイルに含まれていない認証局によって署名された証明書を使用している場合は、HTTPS接続用に次の設定を完了する必要があります。証明書をcacertsにインポートするには
単純なコマンド 'keytool'はWindowsやCygwinでも動作します。
もしあなたがCygwinを使っているならこれは私が "S.Botha's"の答えの下から使った修正されたコマンドです:
その中からkeytoolコマンドを実行します。ここで、最後に新しいCertへのパスを指定します。
./keytool.exe -import -trustcacerts -keystore ../lib/security/cacerts -storepass changeit -noprompt -alias myownaliasformysystem -file "D:\Stuff\saved-certs\ca.cert"
これがCygwinの下にある場合は、Cygwin以外のプログラムへのパスを指定しているので、そのパスはDOS風で引用符で囲まれています。
試してみたいかもしれません
keytool -import -trustcacerts -noprompt -keystore <full path to cacerts> -storepass changeit -alias $REMHOST -file $REMHOST.pem
cacerts
と書くだけでは、証明書がどこに置かれるのか正直にわかりません。
Java Linuxに証明書をインストールする
/ opt/jdk(バージョン)/ bin/keytool -import -aliasエイリアス名-file certificate.cer -keystore cacerts -storepass password