Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

概要

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に証明書をインポートしてみよう。

参考文献

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした