WS-Security:使用BinarySecurityToken进行身份验证

众所周知,WS-Security设定的目标之一是对SOAP消息强制执行完整性和/或保密。 在完整性的情况下,添加到SOAP消息的签名是数学过程的结果,该过程涉及发送者的私钥,从而导致加密的消息摘要。

默认情况下,大多数框架(例如WSS4J)仅对正文进行签名。 如果要添加额外的标头(例如Timestamp标头),则需要明确指示对其进行签名。 使用WSS4J例如Spring的支持,你可以设置包含本地元素名称的逗号分隔的列表,并使用securementSignatureParts属性对应的命名空间。

在下面的示例中,如何指示它对Body和Timestamp元素(及其同级元素)进行签名。 这将导致将两个数字签名附加到消息中:

<property name="securementSignatureParts" value="{}{http://schemas.xmlsoap.org/soap/envelope/}Body;{}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}Timestamp">
</property>

最终,SOAP消息将与XML数字签名数据以及大多数情况下包含证书的BinarySecurityToken一起发送。 到目前为止没有新内容。 但是,令我吃惊的是,似乎没有广泛了解BST的目标是什么,也不知道如何使用它来控制身份验证。 让我尝试阐明一下:与SOAP消息一起发送的发件人的证书起着标识的作用。 您可以将其与用户名++进行比较。 应该清楚的是,消息中的证书不能被信任,用户名也不能不经过密码验证。 到目前为止,每个人都对此表示同意: “是的,当然,需要对证书进行验证才能被信任,然后您便会被设置!” 但这还不是全部。 证书的验证与身份验证不同。 消息中的证书有效并且由已知CA签名的事实不足以考虑发件人是否已通过身份验证。 例如:在最恶意的时刻,我本可以截取消息,更改内容,基于我的私钥创建新的签名并用我的证书替换消息中的BST。 我的证书完全可以是正式的CA签名证书(甚至由您使用的同一CA签名),因此它可以通过验证检查。 如果框架只是简单地验证消息中的证书,那么我们将完全没有安全性。

注意:如果您是通过安全传输发送邮件,则可能是我无法截获该邮件。 但是安全传输大多在实际端点之前终止,而使一小部分传输“不安全”。 尽管这部分将主要在公司内部进行,但是我想指出的是,无论您的传输多么安全,端点都有责任验证发件人的身份。 例如; 在异步系统中,SOAP消息可能已经放置在消息队列上,以便稍后进行处理。 当由端点开始处理时,安全传输的踪迹早已消失。 您必须使用消息中包含的信息来验证身份。

为了解决此漏洞,我们有两个解决方案:第一个解决方案进一步建立在我们已经描述的基础上:消息中的证书根据信任库中的CA根证书进行了验证。 在这种情况下,建议首先缩小可信CA的范围。 例如,您可以在有限的CA列表中与客户达成协议,以从中获取证书。 这样一来,您已经降低了信任更多“灰色区域” CA的风险,因为这些CA可能不遵循发出如此严格的证书的规则(例如,正确检查其客户的身份)。 其次,由于您的受信任CA发出的*每张*证书都将被视为“已认证”,因此我们将通过发出一些额外的支票来弥补漏洞。 使用WSS4J,可以基于证书的主题DN属性配置匹配模式。 他们对此有一个不错的博客条目: http : //coheigea.blogspot.ie/2012/08/subject-dn-certificate-constraint.html 。 我们可以指定证书的DN必须匹配给定值,如下所示:

Wss4jHandler handler = ... 
handler.setOption(WSHandlerConstants.SIG_SUBJECT_CERT_CONSTRAINTS, "CN = ...");

注意:目前在Wss4jSecurityInterceptor中使用Spring对WSS4J的支持尚无此设置器,因此您必须对其进行扩展才能启用此功能!

总结正在执行的步骤:

  1. 消息中包含的证书已根据您的受托机构中的受信任CA进行了验证。 验证成功后,它将通知应用程序证书仍然有效,并且实际上已由您认为可信的CA分发了该证书。
    • 此检查为我们保证了证书确实属于证书声称属于的一方。
  2. 您也可以选择在吊销时检查证书,以便我们不再继续信任被明确吊销的证书。
  3. WSS4J将检查证书的某些属性是否与特定服务的所需值匹配(主题DN证书约束支持)。
    • 这将是身份验证步骤; 一旦发现证书有效,我们将检查证书的所有者是否也是我们要授予访问权限的证书的所有者
  4. 最后,通过创建消息的新摘要来验证消息中的签名,将其与消息中的解密摘要进行比较,依此类推。

请注意,默认情况下不进行此检查(至少在使用WSS4J时)! 如果您不指定它,而只是将您的CA添加到信任库中,您将留下一个安全漏洞!

第二种解决方案不需要额外的配置,并且仅取决于要在信任库中显示的发送者的证书。
消息中包含的证书与信任库中的证书匹配。 如果它们匹配,则对发送者进行身份验证。 无需针对CA验证证书,因为在信任库中导入的证书是显式可信的(WSS4J仍将检查证书是否未过期,并可能对其进行吊销检查)。 同样,信任库中没有CA证书(或CA中间证书)! 也只有您要授予访问权限的发件人的证书。 因此,通过从信任库中添加(或删除)其证书来控制访问。

这要求您在最初导入证书时要谨慎,因为您必须确保它们实际上代表发送者。 但这是在将证书添加到信任库时以及在添加CA证书(如第一个解决方案)时始终必须执行的操作。

结论

假设您可以限制受信任的CA,则在大多数情况下,第一种解决方案是首选的,也是最具扩展性的。 对于新客户端,不需要对信任库进行任何更改。 匹配的属性可以存储在外部,因此很容易更改/添加。 另外,当客户端证书过期或被吊销时,您无需执行任何特殊操作。 发件人将在给定时刻使用新证书,并将根据您的信任库中的CA直接对其进行验证。 在第二种解决方案中,您将必须将新证书添加到受托者中,并将旧证书保留一段时间,直到执行切换为止。

总体经验教训:水密安全很难。 IT领域的#1规则(假设是所有麻烦的源头)在这里确实是正确的。 持怀疑态度,并确保您完全了解正在发生的事情。 在您确定默认设置之前,请不要信任默认设置。 房子警报的默认设置(例如123456)也不是好主意。 Tomcat安装上的默认管理员密码也不是。

参考: WS-Security:在Koen Serneels –技术博客博客中, 使用BinarySecurityToken进行 JCG合作伙伴 Koen Serneels的身份验证 。

翻译自: https://www.javacodegeeks.com/2013/09/ws-security-using-binarysecuritytoken-for-authentication.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367149.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue(ES6)中的data属性为什么不能是一个对象?

以下引官网原文&#xff1a;当一个组件被定义&#xff0c;data 必须声明为返回一个初始数据对象的函数&#xff0c;因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象&#xff0c;则所有的实例将共享引用同一个数据对象&#xff01;通过提供 data 函数&#xff…

echarts vue 柱状图实例_VUE中使用Echarts绘制柱状图

在main.js中引入echartsimport echarts from ‘echarts‘Vue.prototype.$echarts echarts在相应的vue中导入echartsimport echarts from ‘echarts‘;实现柱状图显示mounted: function () {// 基于准备好的dom&#xff0c;初始化echarts实例let myChart echarts.init(documen…

从计算机体系结构方面思考深度学习

今年 1 月&#xff0c;谷歌人工智能负责人 Jeff Dean&#xff08;当时还是谷歌大脑负责人&#xff09;与 2017 年图灵奖得主、体系结构巨擘 David Patterson&#xff08;当时获奖结果尚未公布&#xff09;联合发表了题为《计算机体系结构黄金时代&#xff1a;赋能机器学习革命》…

使用Apollo通过WebSocket通过STOMP轻松进行消息传递

在我以前的文章中&#xff0c;我介绍了几个有趣的用例&#xff0c;这些用例使用著名的消息代理HornetQ和ActiveMQ通过Websockects实现STOMP消息传递。 但是我没有介绍的是Apollo&#xff0c;因为我个人认为它的API是冗长的&#xff0c;并且不像Java开发人员那样表现力强。 尽管…

h5渲染性能一瞥

内容来源&#xff1a;2018 年 6 月 30 日&#xff0c;饿了么前端主管向勇在“饿了么技术沙龙・第27弹 【前端专场】”进行《h5渲染性能一瞥》演讲分享。IT 大咖说&#xff08;微信id&#xff1a;itdakashuo&#xff09;作为独家视频合作方&#xff0c;经主办方和讲者审阅授权发…

爬虫系列之requests

爬取百度内容&#xff1a; 1 import requests2 url "https://www.baidu.com"3 4 if __name__ __main__:5 try:6 kv {user-agent: Mozilla/5.0}7 r requests.get(url, headerskv)8 r.raise_for_status() #返回状态值&#xff0c;如果…

高并发常见面试题

1、线程与进程 进程是一个实体。每一个进程都有它自己的地址空间&#xff0c;一般情况下&#xff0c;包括文本区域&#xff08;text region&#xff09;、数据区域&#xff08;data region&#xff09;和堆栈&#xff08;stack region&#xff09;。文本区域存储处理器执行的代…

如何使用JSON和Servlet创建JQuery DataTable

在本文中&#xff0c;我将介绍使用简单servlet传递的JSON创建JQuery DataTable所需的基本编码。 DataTable是基于JQuery的非常强大的网格&#xff0c;具有高级功能&#xff0c;可以使用自定义功能在短时间内构建。 安装 下载最新的JQuery DataTable下载 上面的下载将提供两个…

python将json转换为excel_使用python将Excel转换为JSON_python_酷徒编程知识库

我有一个excel文件&#xff0c;我想转换为JSON文件&#xff0c;excel类似于&#xff1a;Col A Col C Col F1 A EE2 B FF4 C FF5 D HH6 D HH7 A EE8 E EE希望JSON遵循以下格式&#xff1a;{"EE": {"A": {"Col A key":"1","Col A k…

页面重绘 回流及其优化

在讨论页面重绘、回流之前。需要对页面的呈现流程有些了解&#xff0c;页面是怎么把html结合css等显示到浏览器上的&#xff0c; 下面的流程图显示了浏览器对页面的呈现的处理流程。可能不同的浏览器略微会有些不同。但基本上都是类似的。 1. 浏览器把获取到的HTML代码解析成1…

Servlet异常和错误处理示例教程

有时我写了一篇有关Java异常处理的文章&#xff0c;但是当涉及到Web应用程序时&#xff0c;我们需要的不仅仅是Java中的异常处理。 Servlet异常 如果您注意到&#xff0c;doGet&#xff08;&#xff09;和doPost&#xff08;&#xff09;方法将抛出ServletException和IOExcept…

前端介绍开始(—)

web 的组成浏览器服务器&#xff1a;代替用户向服务器发送请求通信协议&#xff1a;规范数据传输及打包方式&#xff08;http,https&#xff09; 服务器&#xff1a;1 作用&#xff1a;1 接收用户请求并响应 2 存储数据3 具有安全性功能2 产品&#xff1a;1 Tomcat2 Aapache3 N…

python数据结构与算法13_python 数据结构与算法 (13)

python 数据结构与算法 (13)选择排序 (Selection sort) 是? 种简单直观的排序算法. 它的? 作原理如 下.? 先在未排序序列中找到最?(?)元素, 存放到排序序列的起始位 置, 然后, 再从剩余未排序元素中继续寻找最?(?)元素, 然后放到已排 序序列的末尾. 以此类推, 直到所有元…

算法10-----分糖果

1、题目&#xff1a; N个孩子在队伍中&#xff0c;每个孩子都有一定的等级值&#xff0c;相邻两个孩子等级高的拿到的糖果数量要比等级低的多&#xff0c;且每个孩子至少有一个糖果&#xff0c;所以最少队伍一共需多少糖果。 There are N children standing in a line. Each ch…

小程序如何发红包

咳咳&#xff0c;直入主题。敲黑板&#xff0c;请看下面一段对话。 产品&#xff1a;我想要小程序发红包这个功能 程序员&#xff1a;目前不支持啊 产品&#xff1a;我不管&#xff01; 程序员&#xff1a;做不到啊&#xff0c;这。。。 产品&#xff1a;我不管&#xff01;我不…

如何实现REST资源的输入验证

如何实现REST资源的输入验证 我正在使用的SaaS平台具有一个RESTful接口&#xff0c;该接口可以接受XML有效负载。 实施REST资源 对于像我们这样的Java商店&#xff0c;使用JAX-B从XML Schema生成JavaBean类是有意义的。 在像Jersey的JAX-RS环境中&#xff0c;使用JAX-B处理X…

Linux系统下,MySQL以及禅道的安装/卸载

1、MySQL卸载&#xff1a; &#xff08;通过yum命令卸载之前安装的mysql&#xff0c; find命令找到mysql文件&#xff0c;再用rm –rf 强制删除/var/lib/mysql&#xff09; 2、MySQL安装&#xff1a; &#xff08;使用yum命令安装mysql&#xff0c;安装完成后启动数据库&#x…

python类对象点处折行_史上最全的Python面向对象知识点疏理(对象是类的实例)

(对象是类的实例)面向对象技术简介类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。class类变量&#xff1a;类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用…

winform 点击全选

代码如下&#xff1a; #region 全选//chkAll_Checked即全选控键的点击事件private void chkAll_CheckedChanged(object sender, EventArgs e){if (chkAll.Checked){chkSun.Checked true;chkMon.Checked true;chkThu.Checked true;chkTue.Checked true;chkWed.Checked true…

今天的考核题目: 你知道React和Vue的区别吗? skr,skr

React 和 Vue 的区别 博主面了几家公司&#xff0c;看简历上写着使用Vue.js框架&#xff0c;就会问&#xff0c;你能说一说 vue 和 react的区别吗 &#xff1f;react 听过&#xff0c;没用过&#xff0c;所以就只能尴尬的说不怎么了解react。这不&#xff0c;最近刚学了react …