惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
T
The Exploit Database - CXSecurity.com
The GitHub Blog
The GitHub Blog
量子位
S
SegmentFault 最新的问题
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Proofpoint News Feed
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
Threat Research - Cisco Blogs
I
Intezer
Hugging Face - Blog
Hugging Face - Blog
Spread Privacy
Spread Privacy
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
Know Your Adversary
Know Your Adversary
人人都是产品经理
人人都是产品经理
G
Google Developers Blog
Cyberwarzone
Cyberwarzone
L
LINUX DO - 热门话题
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
J
Java Code Geeks
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
T
Tenable Blog
Jina AI
Jina AI
A
About on SuperTechFans
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog
AWS News Blog
AWS News Blog
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
T
Threatpost
大猫的无限游戏
大猫的无限游戏
I
InfoQ
T
Tor Project blog
Project Zero
Project Zero
F
Full Disclosure
L
Lohrmann on Cybersecurity
P
Palo Alto Networks Blog
G
GRAHAM CLULEY
B
Blog
Apple Machine Learning Research
Apple Machine Learning Research
The Hacker News
The Hacker News
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
V2EX
The Cloudflare Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security

博客园 - 大熊(BigBear)

ADO.net实现批量SQL操作. - 大熊(BigBear) - 博客园 Application_AcquireRequestState事件,导致Ajax客户端不能加载 CSLA.Net在Web项目中使用SQL2005的分页 Moss中Form验证中"找不到匹配项"问题的处理 对于知识库系统建设的思考 知识管理中知识地图详解〔转〕 知识管理中的一些概念 Aop面向方面编程之PostSharp框架 [摘]IIS上部署WCF的问题 Linq使用之分组 Silverlight表格绑定中的一点细节处理 页面加载性能的优化 由一棵树绑定引发的遐想 IBatis.Net使用MemCached替换内置缓存策略 Webpart深入(二) Webpart深入(一) ASP.NET MVC 中文文档3 ASP.NET MVC 中文文档2 ASP.net MVC 中文文档1
.Net下调用Java安全Web服务
大熊(BigBear) · 2009-11-24 · via 博客园 - 大熊(BigBear)

有一个Java服务器的web服务, 只是遵循SOAP Message Security 1.0协议, 没有证书,使用Http协议,

调用的时候遇到了一些麻烦.

1. 开始用WCF调用, 始终不能成功, WCF使用UserName验证的时候要么使用Https协议,要么使用X509证书.

他严格的要求传输时的安全性, 所以不能使用UsernameToken Profile 1.0 对用户名和密码处理。

应该是有别的办法的, 目前没研究明白.

2. 使用WSE3.0.

这个组件.net3.5中没有, 要单独安装, 在WebConfig添加一些配置项.

其中有几个关键的地方:

<messaging>

<mtom serverMode="optional" clientMode="On" />

</messaging>

这里需要开启MTOM协议的支持, 服务端是自己选择, 客户端是开启. 主要是处理附件上传这类大文件.

如果不开启,总是报错误: 返回的数据是application/xop+xml 类型, 而应该是”text/xml”.

VS2008不支持WSE3.0组件, 引用WEBService 后,要手动修改Reference.cs的继承类为Microsoft.Web.Services3.WebServicesClientProtocol.

在wse3policyCache.config文件中对WSE扩展定义, 其实就是可以在Soap请求发出前, 进行附加的处理步骤.

这里自己添加了一个组件. <extension name="RemoveTimestamp" type="WSSE3.UsernameClientAssertion, WSSE3"/>

这个SecurityPolicyAssertion的作用是修改SaopHeader中的内容.

默认发出的Header中的Security段是这样的:

<wsse:Security soap:mustUnderstand="1">

    <wsu:Timestamp wsu:Id="Timestamp-0a44f33a-9bb0-4cc4-a4a2-e22e622c9daa">

        <wsu:Created>2009-06-11T06:51:49Z</wsu:Created>

        <wsu:Expires>2009-06-11T06:56:49Z</wsu:Expires>

    </wsu:Timestamp>

    <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-e118d95f-f4a8-4e12-8102-4b24a66d39a7">

        <wsse:Username>某某用户</wsse:Username>

        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">123</wsse:Password>

        <wsse:Nonce>meHEDYrJuLsimiAxFZ1F2Q==</wsse:Nonce>

        <wsu:Created>2009-06-11T06:51:49Z</wsu:Created>

    </wsse:UsernameToken>

</wsse:Security>

而期望的Header(接口文档)中没有< wsu:Timestamp >这段, 不移除会调用失败.

通过实现SoapFilter类, 可以在Soap请求发出或者接受时进行处理.

public override Microsoft.Web.Services3.SoapFilterResult ProcessMessage(SoapEnvelope envelope)

        {

            XmlNamespaceManager mgr = new XmlNamespaceManager(envelope.NameTable);

            mgr.AddNamespace("wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");

            mgr.AddNamespace("wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");

            XmlNode securityNode = envelope.Header.SelectSingleNode("wsse:Security", mgr);

            XmlNode timestamp = envelope.Header.SelectSingleNode("wsse:Security/wsu:Timestamp", mgr);

            securityNode.RemoveChild(timestamp);

            return SoapFilterResult.Continue;

        }

这段代码, 将Timestamp移除。

另外我们可以打开追踪功能,这样调试问题就方便许多了。

<diagnostics>

         <trace enabled="true" input="InputTrace.webinfo" output="OutputTrace.webinfo" />

            <detailedErrors enabled="true" />

   </diagnostics>

会在项目下生成两个文件,里面记录了详细的信息,input是输入,output是发出的。

总结: .net下调用Java的安全Web服务, 差异性有时让人不知道哪里出错, 很难理出思路.