2009-06-16 5 views
3

私はサーバーにhttps要求を行う小型のスタンドアロンプ​​ログラムを実装する予定です。クライアントで有効なSSL証明書が必要ですか?その場合、SSLハンドシェイクはどのように機能しますか?クライアントにSSL証明書を持たないセキュリティ上の問題はありますか?クライアント(Java、C++など)で正常なhttps接続を確立するために有効なデジタル証明書が必要ですか?

+0

1良い質問を見てお勧めします!私はその答えを知らないが、私は人々の言うことを聞くことに興味がある。 – samoz

答えて

6

通常、ネットワークトラフィックを暗号化する以外に、HTTPSはサーバーの認証に使用されます。つまり、クライアントがサーバーの所有者に関する情報を安心して提供できるようにするために、クライアントはサーバーによって発行された証明書の信頼チェーンを検査する必要があります。これを自動的に行うには、クライアントマシンに、サーバーの証明書を発行した証明機関を記述した証明書がインストールされている必要があります。通常、このような証明書は "信頼されたルート証明機関"と呼ばれる店舗のマシン上にあり、ほとんどのOSには共通のCAがすでにインストールされています。

さらに、多くのWebサーバーでは、クライアントがクライアント証明書を提供することによってサーバーに対して自身を認証できる機能を提供しています。 Webサーバーは、クライアントから送信された証明書を検査し、サーバー上の一連の権限にマップすることができます。この "クライアント認証"は、動作中のHTTPSセッションには必要ありませんが、単なる選択肢です。

要するに、あなたは実際には、クライアント上でにすべての証明書は必要ありませんが、おそらくは、サーバーのIDを検証するために、ルートCA証明書を持っていることになるでしょう。その証明書を持っていない場合は、サーバーを信頼することはできません(そうする別の理由がある場合を除きますが)とにかくデータを交換することもできます。

+0

クライアント認証がオプションの場合、クライアントはクライアントに返されたコンテンツをどのように暗号化しますか?サーバーが使用する暗号化アルゴリズムと、サーバーが使用する公開鍵は何ですか。または、クライアントは最初のハンドシェイク中にキー/アルゴリズムを共有しますか? – Ram

+0

クライアントとサーバは、初期ハンドシェイク中に鍵と暗号方式に同意します。 –

+0

クライアント認証がない場合、中間者がサーバーになりすますクライアントを偽装する可能性があるため、セキュリティ上の問題はありませんか? – Ram

0

HTTPS接続を確立するための証明書は必要ありませんが、通信相手と知りたい場合は、必要があります。

1

クライアント証明書は、サーバーに必要な場合にのみ必要です。クライアント証明書により、サーバーはクライアントを認証できますが、これはサーバーに許可されたすべてのクライアントのリストがある場合にのみ有効です。これは一般的にWebサーバーの場合には当てはまりませんので、クライアント証明書を要求することはまれです。

存在する場合、クライアント側の証明書は、セキュリティで保護されたチャネルの確立に影響を与えません。 (サーバーの証明書のみが必要となり、クライアント証明書を追加してもプロセスは変更されません)。セキュリティで保護されたチャネルが確立されると、サーバーはクライアントの証明書を使用してクライアントを認証しますキーまたは名前に許可されたクライアントのリストを含む)。

関連する問題