从C#代码调用HTTPS JBoss服务会引发身份验证错误

时间:2011-05-05 14:48:20

标签: c# web-services jboss

我正在尝试从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.");

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

exception:底层连接已关闭:发送时发生意外错误。

内部异常:身份验证失败,因为远程方已关闭传输流。

我不太确定这意味着什么,除了JBoss比我喜欢的更喜欢我。我是从本地机器打电话,所以我不认为这是一个网络问题。有没有人见过这个?

2 个答案:

答案 0 :(得分:3)

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

轻松修复(虽然有安全后果)....在初始化代码的某处添加以下内容:

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

基本上,这取代了服务器证书验证的应用程序范围处理,并使您的应用程序接受任何证书。如果你想获得更细粒度,你可以检查证书并在方法中加入一些逻辑。

这适用于基于System.Net的任何内容,因此它适用于Web服务以及任何基于WebRequest的内容。

答案 1 :(得分:1)

我没有用过JBOSS。这就是我在使用Microsoft技术时解决类似问题的方法 - 同样的问题可能会影响您的程序:

  • 防火墙设置或网络问题(尝试手动连接,以解决此问题)
  • 自助服务证书问题:
    • 检查以下证书值:
      • 确保服务器的证书颁发者在同一台计算机上具有有效的匹配颁发受信任根证书颁发机构(CA)
      • 服务器证书使用者名称与机器名称完全匹配
      • 客户端访问的计算机名称与服务器证书中定义的名称匹配
      • 管理员帐户集(服务器)证书指纹
    • 尝试在两台服务器上重新创建SSL证书)
    • 尝试创建自己的CA证书,添加到受信任的发布者,然后根据该证书创建SSL sert