0

証明書を使った一般的なスキームがわかりません。例:私はいくつかのウェブサイトにアカウントを持っています。私は持っnameていpasswordます。このサイトにログインするにはどうすればよいですか?-フィールドを開い_https://website:443/loginて入力する必要があります。すべて問題がなければ、アドミタンスを取得します。

ここで、java + httpclient(apache)を使用してこれらの手順をプログラムで実行したいと思います。私は書いた:

client = new DefaultHttpClient();

client.getParams().setParameter(ClientPNames.COOKIE_POLICY, 
                                CookiePolicy.BEST_MATCH);
client.setCookieStore(new BasicCookieStore());
client.getCredentialsProvider()
      .setCredentials(new AuthScope(ADDRESS, new Integer(PORT)),
                      new UsernamePasswordCredentials(USERNAME, USERPWD));

そして、サーバーの証明書を使用してtrustStoreを作成する必要があります。

System.setProperty("javax.net.ssl.trustStore", "./KeyStore/myca");

ここで、「myca」は「InstallCert.java」(Sunの製品)で作成されました。

しかし、ブラウザ(FFox、またはOpera)のインポートサーバーの証明書のように、このすべての手順をプログラムで実行したいと思います...ユーザーは、追加のアプリケーションのセットではなく、自分のアプリケーションのみを使用したいと考えています。

どうすれば実行できますか?

そして今、主な問題は、サーバーがユーザーの証明書を必要としないのはなぜですか?また、自分の証明書を使用して認証するにはどうすればよいですか?(ユーザーの証明書を持っている場合、サーバーにログインするために「名前」「パスワード」は必要ありませんか?)

4

1 に答える 1

3

サーバーがユーザーの証明書を必要としないのはなぜですか?

ほとんどのユーザーはユーザー証明書を持っていないため、サーバーはユーザー証明書を必要としません。仮に取得したとしても、そのような証明書を取得するのは困難であるか、費用がかかるため、多くのユーザーは取得できません。

したがって、クライアント証明書を必要とするサーバーは、ユーザー数をおそらく 1000 分の 1 に減らすことになります。ほとんどのサーバー所有者はそれを望んでいません。

ユーザーの証明書があれば、サーバーにログインするために「名前」「パスワード」は必要ありませんか?

要件によって異なります。証明書とユーザー名/パスワードを要求することは、2 要素認証と見なされます。これは、より強力な形式の保護であり、1 つの要素のみを必要とします。ある種の生体認証を要求することで、さらに強力になります。

どうすればそれを実行できますか?

正確に何を実行しますか?あなたは「プログラムで」物事を行うことについて話しているが、あなたはすでにコードを提示している...?

また、自分の証明書を使用して認証するにはどうすればよいですか?

これは、サーバーの構成で行う必要があります。トラスト ルート証明書を含むトラスト ストアをセットアップする必要があり、ssl 構成でクライアント認証が必要です。たとえば、ここで clientauth を検索します。

于 2010-01-07T09:50:20.723 に答える