Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用加密和完整性验证传输XML的好方法是什么?_Xml_Api_Encryption_Soap_Xml Rpc - Fatal编程技术网

使用加密和完整性验证传输XML的好方法是什么?

使用加密和完整性验证传输XML的好方法是什么?,xml,api,encryption,soap,xml-rpc,Xml,Api,Encryption,Soap,Xml Rpc,我们被要求开始开发一种在项目中传输XML数据的标准化方法,该方法最终将在整个特定行业中使用。其中一些要求包括: XML必须允许对数据进行部分/完全加密 必须能够验证XML的来源(服务器和客户端将相互了解) 必须支持在线和离线处理(批处理) 任何在线处理都必须通过安全通道进行 “服务器”和“客户端”将相互“注册”,并启动消息的发送 联合体提出的一些想法: 大多数成员不喜欢SOAP—它通常会导致比它解决的问题更多的问题和开销 XML完整性和加密比传输更重要 大多数成员更喜欢在应用程序级别加密/

我们被要求开始开发一种在项目中传输XML数据的标准化方法,该方法最终将在整个特定行业中使用。其中一些要求包括:

  • XML必须允许对数据进行部分/完全加密
  • 必须能够验证XML的来源(服务器和客户端将相互了解)
  • 必须支持在线和离线处理(批处理)
  • 任何在线处理都必须通过安全通道进行
“服务器”和“客户端”将相互“注册”,并启动消息的发送

联合体提出的一些想法:

  • 大多数成员不喜欢SOAP—它通常会导致比它解决的问题更多的问题和开销
  • XML完整性和加密比传输更重要
  • 大多数成员更喜欢在应用程序级别加密/解密的概念,而不仅仅是在传输级别
  • SSL连接将是在线的、仅实时的,并且不能在web应用程序级别强制实施
我们已经有了一个在概念验证阶段使用的基本XML模式,基本上包括:

  • 命令/响应类型
  • 变量/响应消息

目前我们正处于高水平阶段,我想知道目前存在哪些标准以及建议采用哪些方法。

我不知道我是否能够充分回答您的问题,提供的信息,但您需要的是一个公钥/信任网络基础设施

XML必须允许对数据进行部分/完全加密

你如何实现这一点,用哪种语言是你的事情。大多数情况下,一个填充对称密码就足够了,如果您将它作为base64以类似于的方式嵌入xml中,那么应该可以工作

必须能够验证XML的来源(服务器和客户端将相互了解)

HMACs。简单明了的HMAC,通过Diffie-Hellman系统进行签名和认证密钥交换


但老实说,标准并不是以你想要的方式存在的。有一些最佳实践和加密系统可以组合在一起。尽管发明你自己的系统是不明智的。它会坏的。您最好使用SSL/TLS和x509基础设施。

如果您打算进行部分加密,那么PKCS#7/CMS将很快成为一个障碍。PGP在这方面可能也不是很有用,所以这就给您留下了XML签名和XML加密标准

对于签名生成/验证,使用XML数字签名是合乎逻辑的。但是,您需要非常清楚地指定您将要签署的内容,以及您将对验证做出的选择。良好的验证可以清楚地验证规范化方法、哈希方法等。除此之外,您必须真正确保您所签名的内容是从XML检索的内容。验证一个部分并发现您使用的是XML的一个完全不同的部分非常容易。有时软件易受攻击,因为攻击者可以简单地从数据中删除签名

如果您总是(总是)在解密之前验证XML,那么只需使用XML加密和AES-CBC即可。如果你没有,你应该使用。由于它目前是一个工作草案,可能需要您在当前软件中创建一些更改。如果没有验证或具有完整性保护的密码,您将容易受到oracle攻击

当然,对于签名生成和验证以及加密/解密,您应该使用x509基础结构。您可以设置自己的CA软件,例如使用EJBCA,但您应该获得这样做的专业知识(购买支持?)。证书和密钥管理应该是主要关注点之一。或者,您可以使用标准SSL/TLS证书。这将允许您设置启用SSL的服务器。如果您选择SSL/TLS(强烈推荐),请使用客户端身份验证和一小部分安全密码套件

最后,您应该限制可用选项的数量,同时为将来的更改保留选项。如果你有太多的选择,测试将变得非常困难,攻击者只会选择难度最小的一个进行攻击。如果对性能感兴趣,请为具有众所周知的命名曲线的X509证书选择ECC,但要注意其复杂性以及某些合作伙伴无法找到正确库的可能性


您可以从信誉良好的供应商那里买到所有这些,但我对XML加密支持持怀疑态度。我已经离开了一些开源lib(甚至在测试它们之前),因为我根本无法充分信任它们。不幸的是,我从“营利性”组织中看到了更糟糕的情况。你需要一位信誉卓著的密码专家来检查协议和实现——仅仅把一些东西拼凑在一起是不够的。

如果你还没有,我会先看看施奈尔的“应用密码术”。祝你好运