2011-05-05 69 views
2

我试图从C#程序调用JBoss服务,并且出现了一个烦人的模糊错误。调用HTTPS来自C#代码的JBoss服务抛出一个验证错误

  JbossService proxy = new JbossService(); 
      proxy.Credentials = new NetworkCredential("ME", "thepwd"); 
      proxy.Url = //https url snipped 
      proxy.CookieContainer = new CookieContainer(); 
      proxy.PreAuthenticate = true; 

      Console.WriteLine("Calling service..."); 
      queryResponse qr = proxy.query(); 
      Console.WriteLine("Done."); 

的异常和抛出内部异常如下:

例外:基础连接已关闭:一个发送发生意外的错误。

内部例外:由于远程方已关闭传输流,身份验证失败。

我不太清楚这是什么意思,除了也许JBoss喜欢我,甚至比我更喜欢它。我从本地电话拨打,所以我不认为这是一个网络问题。有没有人见过这个?

+0

这是什么样的服务?对我来说,问题显然是你没有使用正确的凭证(“ME/thepwd”)。所以,如果可能的话,我会尝试手动使用此服务。 – jpkrohling 2011-05-05 15:17:16

+0

我删除了我正在使用的凭据。我已经确认的实际使用的是正确的。 – quillbreaker 2011-05-05 15:54:04

+0

我以前没有手动使用过JBoss服务。这样做有什么特别的窍门吗? – quillbreaker 2011-05-05 17:02:34

回答

3

这通常发生在客户端无法通过https验证对服务器的信任时(通常是因为服务器证书是自签名的,或者是由未在客户端计算机上安装的根颁发机构签名的。

简易修复(尽管有安全方面的后果)......在某处你的初始化代码添加以下内容:

System.Net.ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true;}; 

基本上这将替换服务器证书验证的应用广处理,并导致您的应用程序接受任何证书。如果你想得到更好的粒度,你可以检查证书并在方法中加入一些逻辑。

这适用于任何基于System.Net的应用程序,所以它应该适用于Web服务以及基于WebRequest的任何事情。

+0

如果我请求SSL连接并且JBoss服务器没有配置为接受它,它是否也会执行相同的操作? – quillbreaker 2011-05-13 19:44:57

+0

简短的回答,不,我的答案不会解决这个问题,因为ServerCertificateValidationCallback仅在连接完成后以及客户端和服务器正在协商SSL时调用。在服务器未配置为处理https请求的情况下,它将简单地拒绝连接。在客户端上,处理该问题的唯一方法是尝试https,如果失败,尝试http(如果您的安全环境允许)。 – 2011-05-13 20:21:45

1

我还没有使用过JBOSS。这是我如何解决类似的问题,使用Microsoft技术的时候 - 同样的问题可能会影响你的程序:

  • 防火墙设置或网络问题(请尝试手动连接,排除了这一点)
  • 自助服务证书问题:
    • 检查下列证书值:
      • 确保服务器的证书颁发者有一个有效的,符合发行受信任的根证书颁发机构(CA),在同一台机器上
      • 服务器证书的主题名称匹配的机器名完全
      • 的机器名客户端访问服务器证书中规定的比赛
      • 管理员帐户设置(服务器)证书指纹
    • 尝试重新创建SSL证书两台服务器上)
    • 尝试创建自己的CA证书,添加到受信任的发布者,然后创建基于
的SSL SERT 0