我正在为自定义设备创建通信协议,最初我计划简单地使用传输级安全性 ( TLS ) 作为安全/加密手段。我被指示(这是为了一份工作)必须使用应用程序级安全性(ALS,我认为必须由我定义),而这个决定背后的理由非常模糊。
在什么样的情况下 TLS 是不合适的(ALS 是合适的)?
是否有可能在创建此 ALS 方案的过程中,我最终可能会在应用程序级别重新实现(糟糕的)TLS?
我正在为自定义设备创建通信协议,最初我计划简单地使用传输级安全性 ( TLS ) 作为安全/加密手段。我被指示(这是为了一份工作)必须使用应用程序级安全性(ALS,我认为必须由我定义),而这个决定背后的理由非常模糊。
在什么样的情况下 TLS 是不合适的(ALS 是合适的)?
是否有可能在创建此 ALS 方案的过程中,我最终可能会在应用程序级别重新实现(糟糕的)TLS?
通常,当人们说他们不想要 TLS 而是所谓的“应用程序级”时,那么原始的、赤裸裸的事实是他们不知道他们在喋喋不休。
不过,请注意“通常”:在某些情况下 TLS 是不够的,并且需要其他一些东西并且要在可以称为“应用程序”的某个级别上应用。主要情况是当某些客户端必须发送具有某种强制责任的请求时;简而言之,当请求必须签署时,如果出现问题,请求可以作为审判期间的证据。TLS 不做签名;它在内部使用签名,但仅用于身份验证。客户端可以确定它与正确的服务器通信(反之亦然,如果使用客户端证书),但它没有在法官眼中令人信服的证据。
当然,需要“ALS”但不能给出适当规格的人不太可能意识到这些微妙之处。他们可能只是在应用一些他们不理解的教条。为了解决这个问题,按照他们的要求做:实现一些应用程序级安全性,其中包括将“消息”交换为“字节序列”,这恰好与RFC 5246中描述的相同。
这一点以前曾以易于理解的图形格式出色地提出:

(我希望斯科特亚当斯的律师能原谅我引用了这个非凡的智慧。)
TLS 对于点对点安全很有用,在这种安全性中没有中间方,并且仅限于一跳。
应用程序级安全性 (ALS) 可能意味着消息级安全性,例如WS-Security规范,它允许:
缺点是
Microsoft 的 WCF 站点上有更多关于此主题的信息。
理想情况下,您可能需要考虑传输安全和消息凭据:
使用传输和消息凭据保护服务使用 Windows Communication Foundation (WCF) 中的传输和消息安全模式中最好的。总而言之,传输层安全提供完整性和机密性,而消息层安全提供各种凭证,而这些凭证是严格的传输安全机制无法实现的