- PR -

クライアント認証

1
投稿者投稿内容
KAZU
会議室デビュー日: 2006/06/22
投稿数: 4
投稿日時: 2006-06-22 15:58
基本的な質問だと思うのですが、解決できず藁をもすがる思いで書き込みます。

あるお客様のサーバーに接続するためにクライアント証明書が必須であり、
Javaでクライアントプラグラムを作成したのですが、
 Server returned HTTP response code: 403
になり原因が分からず困っています。

元にしたプログラムは
JavaTM Secure Socket Extension (JSSE)リファレンスガイドにある
SSLSocketClientWithClientAuth.java
です。

javax.net.debug=allで確認したところ、クライアント証明書が
サーバに送付されていないようです。
key storeには、keytoolを使い、クライアント証明書のルート証明書、中間証明書も
importしました。

サーバはIISであり、IISの設定を「クライアント証明書を要求する」から
「クライアント証明書を受諾する」に変更してもらった場合は403エラーには
なりませんでした。

またクライアントプログラムをVB .Netで作成した場合は、
403エラーにならなかったので、サーバ側の設定や環境に
問題はないと思っています。

以上、考えられる原因などをご教授いただければ幸いです。
加納正和
ぬし
会議室デビュー日: 2004/01/28
投稿数: 332
お住まい・勤務地: 首都圏
投稿日時: 2006-06-22 22:42
引用:

KAZUさんの書き込み (2006-06-22 15:58) より:
あるお客様のサーバーに接続するためにクライアント証明書が必須であり、



http://forums.belution.com/ja/java/000/002/77s.shtml

のように、とりあえずTrustManagerを実装してみる(ほぼ空で)
というのはどうでしょう。

ちなみに、私は一瞬では解決できなかったので、jakartaのHttpClientライブラリ
を使って解決した記憶があります。PKCS#12用だったかな?

KAZU
会議室デビュー日: 2006/06/22
投稿数: 4
投稿日時: 2006-06-23 21:19
加納正和さま

早速のご回答ありがとうございます。
試してみます。
KAZU
会議室デビュー日: 2006/06/22
投稿数: 4
投稿日時: 2006-06-23 22:38
加納正和さま

KAZUです。
お世話になってます。
HttpClientで試してみましたが、同じ現象でした。
TrustManagerはまだ試していません。

プログラムは以下の通りです。

System.setProperty("javax.net.ssl.trustStore", "d:/ssltest/cer/trustStore");
System.setProperty("javax.net.ssl.trustStorePassword", "xxxx");
System.setProperty("javax.net.ssl.keyStore", "d:/ssltest/cer/keyStore");
System.setProperty("javax.net.ssl.keyStorePassword", "xxxx");
System.setProperty("javax.net.debug", "all");
String url = "https://.............";

HttpClient httpclient = new HttpClient();
GetMethod httpget = new GetMethod(url);
httpclient.executeMethod(httpget);
System.out.println(httpget.getStatusLine());
System.out.println(httpget.getResponseBodyAsString());


Key StoreとTrust Storeの登録は以下のとおりです。

VeriSignClass1PublicPrimaryCA.cer:クライアント証明書のルート証明書
ApplicationServiceCA.cer:クライアント証明書の中間証明書
VeriSignJapanClass1CA.cer:クライアント証明書の中間証明書
client_cer.cer:クライアント証明書
ForVerisignAuthTest.cer:ベリサインの無料試用版 SSLのルート証明書です。


keytool -import -trustcacerts -alias VeriSignClass1PublicPrimaryCA -file VeriSignClass1PublicPrimaryCA.cer -keystore keyStore -storepass xxxx
keytool -import -trustcacerts -alias VeriSignJapanClass1CA -file VeriSignJapanClass1CA.cer -keystore keyStore -storepass xxxx
keytool -import -trustcacerts -alias ApplicationServiceCA -file ApplicationServiceCA.cer -keystore keyStore -storepass xxxx
keytool -import -trustcacerts -alias client_cer -file client_cer.cer -keystore keyStore -storepass xxxx

keytool -import -trustcacerts -alias ForVerisignAuthTest -file ForVerisignAuthTest.cer -keystore trustStore -storepass xxxx
KAZU
会議室デビュー日: 2006/06/22
投稿数: 4
投稿日時: 2006-06-24 11:34
加納正和さま

KAZUです。
お世話になってます。

Key Storeの設定を以下のようにしたら、解決することができました。

https://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/deployment/deployment-guide/upgrade-guide/article-16.html

jakartaのHttpClientでも動作しましたが、HttpsURLConnectionでも正常に動作しました。

色々、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)