設定ファイルのバックアップを含むローカル設定変更を喜んで行う人のための詳細な回答:
1.変更前に機能しているかどうかをテストします
テストプログラムがまだない場合は、TLSハンドシェイクをテストする私のjava SSLPing pingプログラムを使用できます(HTTPSだけでなく、任意のSSL / TLSポートで動作します)。ビルド済みのSSLPing.jarを使用しますが、コードを読んで自分でビルドするのはすばやく簡単な作業です。
$ git clone https://github.com/dimalinux/SSLPing.git
Cloning into 'SSLPing'...
[... output snipped ...]
私のJavaバージョンは1.8.0_101より前(この記事の執筆時点ではリリースされていません)なので、Let's Encrypt証明書はデフォルトでは検証されません。修正を適用する前に、障害がどのように見えるかを見てみましょう。
$ java -jar SSLPing/dist/SSLPing.jar helloworld.letsencrypt.org 443
About to connect to 'helloworld.letsencrypt.org' on port 443
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
[... output snipped ...]
2.証明書をインポートする
私はJAVA_HOME環境変数が設定されたMac OS Xを使用しています。以降のコマンドでは、この変数が、変更するJavaインストールに対して設定されていると想定します。
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_92.jdk/Contents/Home/
JDKを再インストールせずに変更をバックアウトできるように、変更するcacertsファイルのバックアップを作成します。
$ sudo cp -a $JAVA_HOME/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/cacerts.orig
インポートする必要がある署名証明書をダウンロードします。
$ wget https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.der
インポートを実行します。
$ sudo keytool -trustcacerts -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt -importcert -alias lets-encrypt-x3-cross-signed -file lets-encrypt-x3-cross-signed.der
Certificate was added to keystore
3.変更後に機能することを確認します
JavaがSSLポートに接続できることを確認します。
$ java -jar SSLPing/dist/SSLPing.jar helloworld.letsencrypt.org 443
About to connect to 'helloworld.letsencrypt.org' on port 443
Successfully connected