Sécurité et authentification: SSL vs SASL

je crois comprendre que SSL combine un algorithme de chiffrement (comme AES, DES, etc.) avec une méthode d'échange de clés (comme Diffier-Hellman) pour fournir des services de cryptage et d'identification sécurisés entre deux endpoints sur un réseau non sécurisé (comme Internet).

je crois comprendre que SASL est un protocole MD5 / Kerberos qui fait à peu près la même chose.

alors ma question: Quels sont les avantages et les inconvénients de choisir les deux et quels scénarios rendent l'un ou l'autre plus - elle préférable? Fondamentalement, je suis à la recherche de quelques lignes directrices à suivre lors du choix de SSL ou d'aller avec SASL à la place. Merci à l'avance!

37
demandé sur IAmYourFaja 2012-07-05 19:13:24

3 réponses

il est assez difficile de comparer SSL/TLS et SASL, car SSL/TLS est un protocole de communication, alors que SASL est un cadre, intégré à d'autres protocoles. (En fait, vous pouvez utiliser les deux en même temps, dans certaines circonstances.)

en outre, vous mentionnez Kerberos, qui est en effet un protocole d'authentification (qui peut être utilisé avec SSL/TLS ou SASL ou indépendamment des deux). Votre question semble suggérer que L'utilisation ou non de Kerberos l'un des principaux sous-problèmes tu devrais d'abord choisir.

la SASL est essentiellement une couche d'authentification indirecte qui permet de brancher les systèmes d'authentification et la sécurité des données dans les protocoles d'application existants (E. LDAP, SMTP, Subversion,...), bien que ces protocoles doivent être conscients de cette extension (par exemple,SMTP auth). Que l'authentification sécurisée et le cryptage des données soient assurés et de quelle manière ils le sont dépendent fortement de ce que mécanisme sous-jacent est utilisé dans ce cadre. Voici un exemple à partir de la svnserve documentation:"le mécanisme CRAM-MD5 intégré ne supporte pas le cryptage, mais DIGEST-MD5 fait". Si vous voulez utiliser Kerberos avec SASL, vous aurez besoin d'un autre niveau d'indirection: GSS-API (qui est le plus couramment utilisé avec les Kerberos, mais peut également permettre d'autres mécanismes). (Notez que GSSAPI dans le contexte de SASL semble impliquer Kerberos de toute façon, contrairement à son GS2 successeur.)

le L'objectif général de SSL / TLS est de sécuriser la communication (intégrité et confidentialité) entre un client et un serveur. Le client doit toujours vérifier l'identité du serveur SSL/TLS, et il fournit des mécanismes permettant au serveur de vérifier également l'identité du client. Ce qu'il peut faire dépend aussi de comment il est configuré. SSL / TLS est le plus couramment utilisé avec les certificats X. 509: c'est ainsi qu'un navigateur peut vérifier l'identité d'un serveur HTTPS. Les serveurs peuvent également être configuré pour demander au client d'utiliser un certificat pour s'identifier (authentification client-Certificat). Cependant, si vous voulez utiliser Kerberos, vous pouvez utiliser TLS Kerberos suites de chiffrement. C'est beaucoup moins courants, mais ils sont mis en oeuvre dans la JSSE.

ses implémentations fournissent généralement des API similaires à ce que vous obtenez avec des connexions TCP simples: en Java, une fois configuré, vous pouvez plus ou moins utiliser un SSLSocket comme vous utiliseriez un Socket. Cela ne nécessite pas de spécifique prise de conscience par le protocole sur le dessus de la socket, bien que certains protocoles aient des commandes explicites pour passer à SSL / TLS à partir d'une connexion simple ( V. S. implicites. Explicite SSL / TLS). Il peut également fournir une authentification. En Java, le JSSE est l'implémentation par défaut de SSL/TLS, qui vous donne accès à SSLSocket (ou SSLEngine si vous êtes assez courageux).

Vous voudrez peut-être lire " quand utiliser Java GSS-API vs. JSSE", qui est similaire à "SASL vs. SSL/TLS" (bien qu'il ne semble pas avoir été mis à jour depuis un certain temps, depuis la JSSE support de Kerberos suites de chiffrement maintenant, au moins depuis Oracle Java 6).

j'admets que j'en sais moins sur SASL que sur SSL/ TLS, mais faire du cryptage de données via SASL semble plus compliqué. Il ne semble pas avoir certaines fonctionnalités SSL/TLS comme Perfect Forward Secrecy offerts par EDH suites de chiffrement. Il y a un exemple qui utilise SASL avec GSSAPI (Kerberos ici) dans le tutoriel JGSS: vous devez envelopper / déballer les données explicitement, ce que vous n'auriez pas à faire en utilisant SSLSocket S.

je pense que votre principale préoccupation devrait être de décider quel mécanisme d'authentification vous voulez utiliser en premier lieu: Kerberos, certificats X. 509, ou autre chose. Cela aura plus d'impact sur votre architecture globale, et les deux peuvent être utilisés avec SASL et SSL / TLS (plus si vous utilisez SASL avec EXTERNAL mécanisme, lorsqu'il est au-dessus d'une connexion SSL/TLS).

  • Kerberos est très centralisé. Le client devra pouvoir communiquer avec la KDC pour s'authentifier, en plus de pouvoir communiquer avec votre serveur d'application. Les clients devront également être configurés pour utiliser cette KDC. Du point de vue de l'utilisateur, ils peuvent utiliser des mots de passe.
  • X. 509 est plus décentralisé. Toutefois, vous devrez peut-être déployer une autorité de Certification (ou utiliser une autorité commerciale) pour: vos certificats d'utilisateur. Les utilisateurs devront recevoir des certificats et des clés privées, que certains pourraient trouver trop complexes.

JAAS y entre parce que C'est le cadre Java général pour traiter l'authentification et l'autorisation. Il est très étroitement lié à la notion de responsables de la sécurité. Il vous donne la notion de Subject et Principal. Ceci n'est pas directement lié aux protocoles ou à la communication, mais plutôt à la façon dont vous modélisez l'authentification et autorisation dans votre demande. (Il vous donne un ensemble normalisé de classes pour le faire.)

(je suggère généralement de passer par le Java documents de référence qui mentionnent les mots que vous cherchez: JGSS, SASL, ..., bien qu'ils ne soient pas nécessairement faciles à lire.)

66
répondu Bruno 2017-04-13 12:13:47

SSL vs SASL

il est vrai que SASL n'est pas un protocole mais une couche d'abstraction. Il est également vrai que SSL et SASL offrent en quelque sorte des fonctionnalités similaires. Les deux permettent l'authentification, la signature de données et le cryptage.

SSL est fait à la couche transport et il est normalement transparent au protocole en dessous. Par exemple, vous pouvez utiliser SSL sur LDAP ou HTTP. Toutefois, dans certains cas, la modification des protocoles existants nécessaire pour basculer en mode sécurisé. Par exemple, POP3 et IMAP est étendu pour avoir une commande STARTTLS pour initier L'utilisation de SSL. De ce point de vue, C'est un peu comme CE QUE FAIT SASL.

de l'autre côté, de nombreux protocoles sont également étendus pour fournir la capacité SASL. Ici est la liste des protocoles. Encore une fois, POP3 et IMAP sont deux d'entre eux et ils utilisent des commandes différentes pour initier l'authentification.

Donc, quand devrions-nous utiliser SSL et quand devrions-nous utiliser SASL?

une différence évidente entre SSL et SASL est que SASL vous permet de sélectionner différents mécanismes pour authentifier le client tandis que SSL est en quelque sorte lié pour effectuer l'authentification basée sur un certificat. Dans SASL, vous pouvez choisir D'utiliser GSSAPI, Kerberos, NTLM, etc.

à cause de cette différence, il y a certaines situations, c'est juste plus intuitif d'utiliser SASL mais pas SSL. Par exemple, votre application cliente utilise Kerberos pour authentifier l'utilisateur final. Votre serveur doit authentifier le client. Étant donné que votre application client possède déjà des justificatifs D'identité Kerberos (dans la terminologie Kerberos, un ticket), il est logique d'utiliser les justificatifs D'identité Kerberos pour s'authentifier avec le serveur. Bien sûr, vous pouvez toujours configurer SSL pour faire la même chose. Cependant, cela signifie qu'en plus de L'infrastructure Kerberos existante, vous devez configurer L'Infrastructure D'Autorité de certification et en quelque sorte corréler le certificat client avec les références Kerberos. C'est faisable, mais beaucoup de travail.

de plus, parfois, vous devez utiliser certaines fonctionnalités qui ne sont disponibles que dans le mécanisme SASL mais pas dans le SSL. Par exemple, Kerberos vous permet de transférer le ticket du client vers le serveur afin que le serveur puisse utiliser le ticket pour interroger certaines ressources au nom du client. Un exemple courant est que vous avez un serveur d'application et une base de données. L'application client s'authentifie avec le serveur d'application et le serveur d'application doit interroger la base de données au nom du client en utilisant les justificatifs d'identité du client. SSL ne peut pas vous fournir cette fonctionnalité, mais Kerberos le supporte. Alors, dans ce cas, vous devez choisir d'utiliser SASL.

dans certains cas, vous voulez utiliser SSL mais pas SASL. Par exemple, étendre le protocole n'est pas une option ou vous voulez crypter chaque paquet échangé en utilisant le protocole en dessous.

comment le GSSAPI se rapporte-t-il à Kerberos et SASL

selon ceci wiki page, GSSAPI et Kerberos sont supportés mécansim dans SASL. GSSAPI est une interface de programmation générique. L'idée est de laisser application writer utiliser une seule API commune pour effectuer l'authentification, le chiffrement, etc. quel que soit le protocole utilisé ci-dessous. GSSAPI met en œuvre Kerberos. Ainsi, vous pouvez utiliser GSSAPI pour faire l'authentification Kerberos.

Quel est le lien entre JAAS et SASL

honnête, je ne suis pas un expert Java. D'après ce que j'ai lu, On dirait que JAAS est juste un framework d'authentification. Je crois que l'idée est similaire au GSSAPI. Il s'agit de fournir une interface de programmation unique, quelle que soit la méthode d'authentification utilisée. Alors que le GSSAPI se concentre sur l'authentification et l'échange de messages sécurisés, le JAAS se concentre sur l'authentification et l'autorisation. Je ne trouve aucune preuve que JAAS soit aussi un des mécanismes de la SASL. Je crois qu'il devrait être quelque helper les classes de la bibliothèque Java vous aident à implémenter des mécanismes SASL personnalisés. Lors de la mise en œuvre du mécanisme SASL personnalisé, il peut être logique d'utiliser JAAS.

21
répondu Harvey Kwok 2018-07-17 11:50:12

SASL n'est pas un protocole mais une couche d'abstraction pour un mécanisme d'auth. Si vous utilisez Digest-MD5 ou GSS-API comme mécanisme SASL, vous pouvez demander à SASL de chiffrer complètement votre trafic de données. C'est par exemple ce que je fais pour parler à vos serveurs Active Directory. Vous n'aurez pas besoin de SSL. Quelle est votre cas d'utilisation. Veuillez donner des précisions!

2
répondu Michael-O 2012-07-07 21:20:11