15.2.2. 自己署名サーバー証明書を受け入れるためのクライアント設定
SSL でリモートメソッド呼び出しを行うには、クライアントがサーバーの証明書を信頼する必要があります。生成した証明書は自己署名で、既知の認証局への信頼チェーンがありません。自己署名証明書では、クライアントは明示的にその証明書を信頼するよう設定する必要があります。そうでないと、接続は失敗します。自己署名証明書を信頼するようクライアントを設定するには、クライアントの 信頼ストア に自己署名サーバー証明書をインポートします。
信頼ストアは信頼できる証明書を含むキーストアです。ローカルの信頼ストアにある証明書は有効として受け入れられます。サーバーが自己署名証明書を使用する場合は、SSL でリモートメソッド呼び出しを行うどのクライアントにも信頼ストアの証明書が必要となります。証明書として公開キーをエクスポートし、そうしたクライアントの信頼ストアに証明書をインポートします。
「自己署名証明書のエクスポート」 で作成された証明書は 手順15.3「信頼ストア「localhost.truststore」への証明書のインポート」 で説明されたステップを行うためにはクライアントにコピーされなければなりません。
手順15.3 信頼ストア「localhost.truststore」への証明書のインポート
これはクライアントの信頼ストアにサーバー上で以前にエクスポートされた証明書をインポートする手順です。
- クライアントで次のコマンドを発行します。
keytool -import -alias ejb-ssl -file mycert.cer -keystore localhost.truststore
- この信頼ストア用のパスワードが存在している場合はそれを入力します。なければ、新しい信頼ストア用のパスワードを入力し、再度それを入力します。
- 証明書の詳細を確認します。正しければ「yes」と入力し、それを信頼ストアにインポートします。結果
これで証明書が信頼ストアにインポートされ、この証明書を使用するサーバーでセキュアな接続が確立されました。
キーストアと同様に、指定された信頼ストアが存在しない場合はそれが作成されます。ただキーストアと大きく異なる点は、デフォルトの信頼ストアはなく、ひとつも指定されていない場合はコマンドは失敗するということです。
localhost.truststore を使用するためのクライアントの設定
これで自己署名サーバー証明書をクライアント上の信頼ストアにインポートしました。次は、この信頼ストアを使用するようクライアントに指示する必要があります。その方法は、javax.net.ssl.trustStore
プロパティを使用して localhost.truststore
場所をアプリケーションに渡し、javax.net.ssl.trustStorePassword
プロパティを使用して信頼ストアパスワードを渡します。例15.1「特定の信頼ストアを使用した com.acme.Runclient アプリケーションの呼び出し」 は JBoss Application Server 上で EJB にリモートメソッド呼び出しを行う仮定のアプリケーションである com.acme.RunClient アプリケーションを呼び出す例のコマンドです。アプリケーションのパッケージディレクトリのルート (ファイルパス com/acme/RunClient.class
の com
ディレクトリを含むディレクトリ) からこのコマンドを実行します。
例15.1 特定の信頼ストアを使用した com.acme.Runclient アプリケーションの呼び出し
java -cp $JBOSS_HOME/client/jbossall-client.jar:. -Djavax.net.ssl.trustStore=${resources}/localhost.truststore \ -Djavax.net.ssl.trustStorePassword=TRUSTSTORE_PASSWORD com.acme.RunClient