3

SSL サーバーに接続するには、Java クライアントを作成する必要があります。サーバーは openssl 証明書を使用し、クライアント認証を行うように構成されています。

私 (openssl についても SSL についてもあまり知らない) が、クライアント側の実装を誰に任せるべきかを理解するのに役立つ有用なリソースをオンラインで見つけることができないようです。

ヘルプ!

4

3 に答える 3

4

ここでひねりを加えたのは、クライアント認証を使用しているため、自分自身を識別するための秘密鍵と証明書が必要なことです。SSLContext を初期化するときに KeyManagers を指定することにより、これを JSSE に提供します。

カスタマイズ可能なセットアップ

以下は、基本的な手順です。JSSE API は Java 6 で大幅に改善されましたが、Java 5 を使い続けることにします。

KeyStore tks = KeyStore.getInstance(KeyStore.getDefaultType());
tks.load(...); /* Load the trust key store with root CAs. */
TrustManagerFactory tmf = 
  TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(tks);
KeyStore iks = KeyStore.getInstance(KeyStore.getDefaultType());
iks.load(...); /* Load the identity key store with your key/cert. */
KeyManagerFactory kmf = 
  KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(iks, password);
SSLContext ctx = SSLContext.getInstance("TLS");
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
SocketFactory factory = ctx.getSocketFactory();
Socket socket = factory.createSocket(host, port);

システム構成

SunJSSEプロバイダーを使用する場合は、代替の「ゼロ構成」シナリオを使用できます。他の多くのプロバイダー (IBM など) も同じパターンに従っており、同様に機能すると思います。このメカニズムはシステム プロパティを使用し、 JSSE リファレンス ガイドで詳細に説明されています。

クライアント認証の場合、重要なプロパティjavax.net.ssl.keyStorejavax.net.ssl.keyStorePasswordです。値は、それぞれ、ユーザーのキー ストアへのパスと、そのキー ストアの「キー エントリ」のパスワードである必要があります。

これらのプロパティを使用すると、次のようにクライアント認証をサポートする新しい SSLSocket を作成できます。

SocketFactory factory = SSLSocketFactory.getDefault();
Socket socket = factory.createSocket(host, port);

SSLSocketFactoryシステム全体のプロパティに依存する「デフォルト」を使用しているため、JVM で作成されたすべてのソケットは同じ証明書で認証されます。それ以上の制御が必要な場合は、上記の「カスタマイズ可能なセットアップ」を使用する必要があります。

于 2008-12-22T22:44:05.917 に答える
1

Javaでは、標準APIにSSLサポートが含まれています。1.5.0javadocのこれらのクラスを見てください。

通信ロジックを自分で実行している場合はSSLSocket 。

サーバー側がHTTPを話す場合はHttpsURLConnection

于 2008-12-22T12:44:57.873 に答える
0

httpclient を使用できます。このSSL ガイドをご覧ください。

于 2008-12-22T10:21:08.913 に答える