69

私の理解では、SSLは暗号化アルゴリズム(AES、DESなど)とキー交換方法(Diffie-Hellmanなど)を組み合わせて、安全でないネットワーク(インターネットなど)上の2つのエンドポイント間で安全な暗号化および識別サービスを提供します。 。

私の理解では、SASLはMD5 / Kerberosプロトコルであり、ほとんど同じことを行います。

だから私の質問:両方を選択することの賛否両論と、どちらをより好ましいものにするシナリオは何ですか?基本的に、SSLを選択するときに従うか、代わりにSASLを使用するためのガイドラインを探しています。前もって感謝します!

4

3 に答える 3

118

SSL / TLSは通信プロトコルであるのに対し、SASLは他のプロトコルと統合されたフレームワークであるため、SSL/TLSとSASLを比較することは非常に困難です。(実際、状況によっては両方を同時に使用できます。)

さらに、Kerberosについて言及しています。これは、実際には認証プロトコルです(SSL / TLSまたはSASL、あるいはその両方で独立して使用できます)。あなたの質問は、Kerberosを使用するかどうかを最初に選択する必要がある主要なサブ問題の1つを示唆しているようです。

SASLは基本的に、既存のアプリケーションプロトコル(LDAP、SMTP、Subversionなど)でプラグイン可能な認証システムとデータセキュリティを可能にする間接層ですが、これらのプロトコルはこの拡張機能( SMTP authなど)を認識する必要があります。安全な認証とデータ暗号化を提供するかどうか、またどのように提供するかは、このフレームワーク内で使用されている基本的なメカニズムに大きく依存します。svnserveドキュメントの例を次に示します。「組み込みのCRAM-MD5メカニズムは暗号化をサポートしていませんが、DIGEST-MD5はサポートしています」。SASLでKerberosを使用する場合は、別のレベルの間接参照が必要になります。GSS-API(Kerberosで最も一般的に使用されますが、他のメカニズムも使用できます)。(ご了承くださいGSSAPIGS2SASLのコンテキストでは、後継とは異なり、とにかくKerberosを意味するようです。)

SSL / TLSの一般的な目標は、クライアントとサーバー間の通信(整合性と機密性)を保護することです。クライアントは常にSSL/TLSサーバーのIDをチェックする必要があり、サーバーがクライアントのIDもチェックするためのメカニズムを提供します。何ができるかは、構成方法によっても異なります。SSL / TLSは、X.509証明書で最も一般的に使用されます。これにより、ブラウザーはHTTPSサーバーのIDを確認できます。サーバーは、証明書を使用してサーバーを識別するようにクライアントに要求するように構成することもできます(クライアント証明書認証)。ただし、Kerberosを使用する場合は、TLSKerberos暗号スイートを使用できます。これはそれほど一般的ではありませんが、JSSEに実装されています。

SSLSocketその実装は通常、プレーンTCP接続で得られるものと同様のAPIを提供します。Javaでは、一度構成すると、プレーンを使用するのと同じように、多かれ少なかれを使用できますSocket。一部のプロトコルには、プレーン接続からSSL / TLSに切り替える明示的なコマンドがありますが(暗黙的SSL /TLSと明示的SSL/TLS)、これはソケット上のプロトコルによる特定の認識を必要としません。また、認証を提供することもできます。Javaでは、JSSEはデフォルトのSSL / TLS実装であり、これによりアクセスが可能になりますSSLSocket(またはSSLEngine十分に勇気がある場合)。

「 JavaGSS-APIとJSSEをいつ使用するか」をお読みください。これは「SASLとSSL/TLS」に似ています(ただし、JSSEサポートしているため、しばらくは更新されていないようです。 Kerberos暗号スイートは、少なくともOracle Java6以降になりました。

私はSSL/TLSよりもSASLについてあまり知らないことを認めますが、SASLを介してデータ暗号化を行うことは、より多くの作業になると思われます。EDH暗号スイートが提供するPerfectForwardSecrecyなどの特定のSSL/TLS機能がないようです。JGSSチュートリアルにGSSAPI(ここではKerberos)でSASLを使用する例があります。データを明示的にラップ/アンラップする必要があります。これは、sを使用する場合は行う必要がありませんSSLSocket

あなたの主な関心事は、最初にどの認証メカニズムを使用するかを決定することだと思います:Kerberos、X.509証明書、または他のもの。これはアーキテクチャ全体により大きな影響を与え、SASLとSSL / TLSの両方で使用できます(EXTERNALSSL / TLS接続の上にあるメカニズムでSASLを使用する場合はさらに影響があります)。

  • Kerberosは非常に集中化されています。クライアントは、アプリケーションサーバーに接続できるだけでなく、KDCに接続して認証できる必要があります。クライアントは、そのKDCを使用するように構成する必要もあります。ユーザーの観点からは、ユーザーはパスワードを使用できます。
  • X.509はより分散化されています。ただし、ユーザー証明書用に認証局を展開する(または商用の認証局を使用する)必要がある場合があります。ユーザーには証明書と秘密鍵を与える必要がありますが、複雑すぎると感じる人もいます。

JAASは、認証と承認を処理するための一般的なJavaフレームワークであるために使用されます。これは、セキュリティ管理者の概念と非常に密接に関連しています。SubjectそれはあなたにとPrincipalの概念を与えます。これは、プロトコルや通信に直接リンクされているのではなく、アプリケーション内で認証と承認をモデル化する方法にリンクされています。(これにより、標準のクラスセットが提供されます。)

(通常、後の単語が記載されているJavaリファレンスドキュメント(JGSS、SASL、...)を確認することをお勧めしますが、必ずしも読みやすいとは限りません。)

于 2012-07-08T18:41:12.923 に答える
34

SSLとSASL

SASLがプロトコルではなく、抽象化レイヤーであることは事実です。SSLとSASLが同様の機能を提供していることも事実です。どちらも、認証、データ署名、暗号化を提供します。

SSLはトランスポート層で実行され、通常は下のプロトコルに対して透過的です。たとえば、LDAPまたはHTTPでSSLを使用できます。ただし、場合によっては、セキュリティで保護されたモードに切り替えるために、既存のプロトコルを変更する必要があります。たとえば、POP3とIMAPは、SSLの使用を開始するコマンドSTARTTLSを持つように拡張されています。その観点からすると、これはSASLが行っていることと似ています。

一方、SASL機能を提供するために多くのプロトコルも拡張されています。 これがプロトコルのリストです。繰り返しになりますが、POP3とIMAPはその2つであり、認証を開始するために異なるコマンドを使用しています。

では、SSLをいつ使用する必要があり、SASLをいつ使用する必要があるのでしょうか。

SSLとSASLの明らかな違いは、SASLではクライアントを認証するためにさまざまなメカニズムを選択できるのに対し、SSLは証明書に基づいて認証を行うためにバインドされていることです。SASLでは、GSSAPI、Kerberos、NTLMなどの使用を選択できます。

この違いのために、いくつかの状況があります。SSLではなくSASLを使用する方が直感的です。たとえば、クライアントアプリケーションはKerberosを使用してエンドユーザーを認証しています。サーバーはクライアントを認証する必要があります。クライアントアプリケーションにはすでにKerberosクレデンシャル(Kerberos用語ではチケット)があるため、Kerberosクレデンシャルを使用してサーバーで認証することは理にかなっています。もちろん、SSLを設定して同じことを行うこともできます。ただし、これは、既存のKerberosインフラストラクチャに加えて、認証局インフラストラクチャをセットアップし、クライアント証明書をKerberosクレデンシャルと何らかの方法で関連付ける必要があることを意味します。それは実行可能ですが、多くの作業が必要です。

また、SSLではなくSASLメカニズムでのみ使用できる機能を使用する必要がある場合もあります。たとえば、Kerberosを使用すると、クライアントからサーバーにチケットを転送できるため、サーバーはチケットを使用してクライアントに代わって一部のリソースを照会できます。一般的な例の1つは、アプリケーションサーバーとデータベースがあることです。クライアントアプリケーションはアプリケーションサーバーで認証され、アプリケーションサーバーはクライアントの資格情報を使用してクライアントに代わってデータベースにクエリを実行する必要があります。SSLはこの機能を提供できませんが、Kerberosはこれをサポートしています。したがって、その場合は、SASLの使用を選択する必要があります。

場合によっては、SSLは使用したいが、SASLは使用したくないことがあります。たとえば、プロトコルを拡張することはオプションではありません。または、プロトコルの下で交換されるすべてのパケットを暗号化する必要があります。

GSSAPIはKerberosおよびSASLとどのように関連していますか

このwikiページによると、GSSAPIとKerberosの両方がSASLでサポートされているメカニズムです。GSSAPIは、ジェネリックプログラミングインターフェイスです。アイデアは、アプリケーションライターが、下で使用されているプロトコルに関係なく、単一の共通APIを使用して認証や暗号化などを実行できるようにすることです。GSSAPIはKerberosを実装します。したがって、GSSAPIを使用してKerberos認証を行うことができます。

JAASはSASLとどのように関連していますか

正直なところ、私はJavaの専門家ではありません。私が読んだところによると、JAASは単なるプラグ可能な認証フレームワークのようです。私はその考えがGSSAPIに似ていると信じています。使用している認証方法に関係なく、単一のプログラミングインターフェイスを提供することです。GSSAPIは認証と安全なメッセージ交換に重点を置いていますが、JAASは認証と承認に重点を置いています。JAASもSASLメカニズムの1つであるという証拠は見つかりません。カスタムSASLメカニズムの実装を支援するJavaライブラリのヘルパークラスがいくつかあるはずです。カスタムSASLメカニズムを実装する場合、JAASを使用するのが理にかなっている場合があります。

于 2012-07-07T23:44:44.660 に答える
4

SASLはプロトコルではなく、認証メカニズムの抽象化レイヤーです。SASLメカニズムとしてDigest-MD5またはGSS-APIを使用する場合は、データトラフィックを完全に暗号化するようにSASLに要求できます。これは、たとえば、ActiveDirectoryサーバーと通信するために私が行うことです。SSLは必要ありません。あなたのユースケースは何ですか?詳しく説明してください!

于 2012-07-07T21:20:11.777 に答える