LoginSignup
29
30

More than 5 years have passed since last update.

SSLクライアント証明書を使って通信する

Last updated at Posted at 2015-06-14

概要

SSLを使ったクライアント認証は、特定のクライアント以外からサイトを見せたくない時、非常に便利に使えます。ここではMavenなどJavaのアプリケーションでもクライアント証明書を使う方法をまとめます。

全体の流れ

  1. JREに同梱されている証明書ストアcacertsにクライアント証明書を発行した認証局の認証局証明書をインポート
  2. 実行時のシステムプロパティにcacertsやクライアント証明書を指定
  3. クライアント証明書が必要な特定のサイトが利用可能に

認証局証明書のインポート

JREに同梱されている証明書ストアcacertsにインポートしないと、JREは実行時にインポートした認証局のみ認証されていると勘違いします。指定したファイルにある証明書のみ読み込みます。JREに同梱されているcacertsには主なルート認証局の証明書が入っているので、そこに自前認証局の証明書を読み込みましょう。

JREに同梱されているcacertsは$JRE_HOME/lib/security/cacertsです。これを適当なパスにコピーし、認証局証明書をインポートしましょう。認証局証明書がどこにあるかは、認証局によって異なります。システム管理者に聞いてください。

認証局証明書のインポート

認証局証明書のインポートは下記のコマンドでOKです。

keytool -v -alias 適切なエイリアス名 -import -file 証明書ストアファイル -keystore cacerts

cacertsのパスワードを聞かれます。OracleのJREを利用しているのであれば、パスワードはchangeitです。コマンドの最後にインポートするか聞かれるので、はいもしくはYesと入力しましょう。

実行時のシステムプロパティの指定

実行時に指定するシステムプロパティは下記の通りだ。

キー 値の例 意味
javax.net.ssl.trustStore /USER_HOME/.m2/cacerts 証明書ストアファイルへのパス
javax.net.ssl.trustStoreType jks 形式。同梱がベースなので、未指定でも良い
javax.net.ssl.trustStorePassword changeit 証明書ストアファイルのパスワード
javax.net.ssl.keyStore /USER_HOME/.m2/user.p12 ユーザーの秘密鍵ストアファイル
javax.net.ssl.keyStoreType pkcs12 秘密鍵ストアファイルの形式(jks or pkcs12)
javax.net.ssl.keyStorePassword 秘密鍵エクスポート時のパスワード 秘密鍵ストアファイルのパスワード

これをMavenの起動時に読み込む.mavenrcに書けばMavenでの利用時にクライアント認証がなされ、Eclipseの起動時に読み込むeclipse.iniに書けばEclipseでの利用時にクライアント認証がされる。gradle等でも利用できるはずだ。

よく出くわす問題

a. unable to find valid certification path to requested targetというエラーがでる

新たな証明書ストアファイルに証明書をインポートしてしまった時にこうなることがあります。インストールされているcacertsに証明書をインポートしてみよう。

参考文献

29
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
30