- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的理解是 SSL 结合了加密算法(如 AES、DES 等)和 key 交换方法(如 Diffie-Hellman),以在不安全网络(如 Internet)上的两个端点之间提供安全的加密和识别服务.
我的理解是 SASL 是一种 MD5/Kerberos 协议(protocol),几乎可以做同样的事情。
所以我的问题是:选择两者的利弊是什么,哪些场景更可取?基本上,我正在寻找在选择 SSL 或使用 SASL 时要遵循的一些准则。提前致谢!
最佳答案
比较 SSL/TLS 和 SASL 是相当困难的,因为 SSL/TLS 是一种通信协议(protocol),而 SASL 是一个框架,与其他协议(protocol)集成在一起。 (实际上,在某些情况下,您可以同时使用两者。)
此外,您提到了 Kerberos,它确实是一种身份验证协议(protocol)(可以与 SSL/TLS 或 SASL 一起使用,或者两者都独立使用)。您的问题似乎表明是否使用 Kerberos 是您应该首先选择的主要子问题之一。
SASL 本质上是一个间接层,允许在现有应用程序协议(protocol)(例如 LDAP、SMTP、Subversion 等)中实现可插入的身份验证系统和数据安全,尽管这些协议(protocol)需要知道这个扩展(例如 SMTP auth)。它是否以及如何提供安全的身份验证和数据加密在很大程度上取决于什么 underlying mechanism在这个框架内使用。以下是来自 svnserve
documentation 的示例:“内置的 CRAM-MD5 机制不支持加密,但 DIGEST-MD5 支持”。
如果您想将 Kerberos 与 SASL 一起使用,您将需要另一个间接级别:GSS-API (最常与 Kerberos 一起使用,但也可以用于其他机制)。 (请注意,SASL 上下文中的 GSSAPI
似乎意味着 Kerberos,这与它的 GS2
successor 不同。)
SSL/TLS 的一般目标是保护客户端和服务器之间的通信(完整性和 secret 性)。客户端应该始终检查 SSL/TLS 服务器的身份,它也为服务器提供了检查客户端身份的机制。它可以做什么还取决于它的配置方式。 SSL/TLS 最常与 X.509 证书一起使用:这是浏览器可以检查 HTTPS 服务器身份的方式。服务器还可以配置为请求客户端使用证书来标识自己(客户端证书身份验证)。
但是,如果要使用 Kerberos,则可以使用 TLS Kerberos cipher suites .这不太常见,但它们是 implemented in the JSSE .
它的实现通常提供类似于使用普通 TCP 连接所获得的 API:在 Java 中,一旦配置,您或多或少可以使用 SSLSocket
就像使用普通 Socket
一样.这不需要套接字顶部协议(protocol)的特定意识,尽管某些协议(protocol)具有从普通连接 ( Implicit v.s. Explicit SSL/TLS ) 切换到 SSL/TLS 的显式命令。它还可以提供身份验证。在 Java 中,JSSE是默认的 SSL/TLS 实现,它使您可以访问 SSLSocket
(或者 SSLEngine
如果你足够勇敢的话)。
您可能想阅读“When to use Java GSS-API vs. JSSE”,它类似于“SASL vs. SSL/TLS”(尽管它似乎已经有一段时间没有更新了,因为 JSSE 现在确实支持 Kerberos 密码套件,至少自 Oracle Java 6 起)。
我承认我对 SASL 的了解少于对 SSL/TLS 的了解,但是通过 SASL 进行数据加密听起来似乎需要更多的工作。它似乎没有某些 SSL/TLS 功能,例如 Perfect Forward Secrecy offered by EDH cipher suites .有一个example that uses SASL with GSSAPI (Kerberos here) in the JGSS tutorial :您需要显式包装/解开数据,而在使用 SSLSocket
时您不必这样做s。
我认为您主要关心的应该是首先决定要使用哪种身份验证机制:Kerberos、X.509 证书或其他什么。这将对您的整体架构产生更大的影响,并且两者都可以与 SASL 和 SSL/TLS 一起使用(如果您在 SSL/TLS 连接之上使用具有 EXTERNAL
机制的 SASL,则更是如此)。
Subject
and Principal
的概念.这并不直接与协议(protocol)或通信相关联,而是与您在应用程序中对身份验证和授权进行建模的方式相关。 (它为您提供了一组标准的类来这样做。)
关于encryption - 安全与认证 : SSL vs SASL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11347304/
我正在使用 Tornado 与 twitter 等第三方进行身份验证。 我的登录处理程序看起来像这样 class AuthLoginHandler(BaseHandler, tornado.auth.
有没有一种真正的方法可以在 Pylons 中添加身份验证?我见过很多不同的方法,但大多数方法要么过时,要么过于复杂。是否有教程可以解释如何以良好而可靠的方式添加身份验证? 最佳答案 考虑使用 repo
RESTful 身份验证是什么意思,它是如何工作的?我在谷歌上找不到很好的概述。我唯一的理解是您在 URL 中传递了 session key (记住),但这可能是非常错误的。 最佳答案 如何在 RES
我正在考虑在基于插件的系统中实现安全性的多种方式。现在,当我说“安全”时,我的意思是: a) 插件系统的开发人员如何确保插件在核心平台上的使用是安全的。b) 插件开发人员如何确保在其平台上使用的插件是
我正在使用 WCF Webhttp 服务。我创建了一堆服务,剩下的就是放入用户身份验证... 问题 与其余架构风格保持一致,我是否应该针对用户 db 验证每个服务调用。 如果是这样,我应该在每次调用服
假设我想对 Mifare Classic 进行身份验证。 我如何知道要发送到卡的确切类型的 APDU? 例子。 这段代码: bcla = 0xFF; bins = 0x86; bp1 = 0x0;
我通过在文件 xyz.php 中编写以下代码登录到网站。当我运行这个文件时,我会登录到 moodle 网站。有什么方法可以像下面的登录代码一样注销吗? $user = authenticate_use
我有一个应用程序可以匿名访问除几个之外的所有 xpages。我需要强制用户登录这些 xpages。是使用 beforepageload 事件来检查用户登录页面并将其重定向到正确的方式还是有更好的方法?
我想用 ember.js 实现身份验证。 因此,当应用程序启动时,在路由器处理请求的 url 之前,我想检查用户状态。如果用户未通过身份验证,我想保存请求的 url 并重定向到特定的 url (/lo
您如何执行 jQuery Ajax 调用并在发送请求之前对调用进行身份验证? 我还没有登录所以必须进行身份验证。安全不是任何人都可以访问的问题,只需要进行身份验证。它只是基本的 http 身份验证,您
我尝试使用找到的 swift 代码 here在网站上找到here ,但响应是带有两个错误的 html 代码:“您必须输入密码!”和“您必须输入用户名!”我是 NSURLSession 的新手,并尝试更
我正在尝试连接到 Visa Direct API,但我没有通过基本的 SSL 证书认证,这是我的代码: import requests headers = { 'Content
我正在用 tornado 在 python 中开发一个 REST API,我将实现身份验证和授权,试图避免锁定到其他大项目,即 django。我也在通过论坛和 SO 环顾四周,我喜欢一个可能适合的解决
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭10
如何在 Android 中通过 HTTP 进行身份验证? 最佳答案 我非常难以在 Android 中通过 HTTP 进行身份验证,因为在浏览器(Web 和 Android native )中它工作完美
我有一些关于登录和 session 的问题。我有这段代码: 数据库查询: login: function(req,callback) { var query = 'SELECT id FROM
我开始使用 Swift 开发 iOS 应用。现在我正处于需要创建登录系统的部分。但是,我们需要人们提供的 LinkedIn 信息。 我如何在 iOS 中使用 OAuth2 API 来实现这一点? 我已
如果没有找到用户,问题出在每个 $routeChangeStart 上,如果我只输入 url,它仍然会引导我访问页面。 现在我已经在服务器上重写了规则。 Options +FollowSymlinks
简单代码 require 'net/http' url = URI.parse('get json/other data here [link]') req = Net::HTTP::Get.new(
参考文档: https://docs.sonarqube.org/latest/instance-administration/security/ 概述 SonarQube具有
我是一名优秀的程序员,十分优秀!