我正在尝试将现有的WCF客户端应用程序移植到Mono下的Linux上运行.现在我正在测试所有东西,搞清楚什么对Mono有效,什么不对.
客户端通过basicHttpBinding进行超级简单的调用.它工作得很好,直到我启用SSL(即在绑定中指定BasicHttpSecurityMode.Transport).
异步操作中的异常:System.Net.WebException:获取响应流时出错(写入:身份验证或解密失败.):SendFailure ---> System.IO.IOException:身份验证或解密失败.---> Mono.Security.Protocol.Tls.TlsException:从服务器收到的证书无效.错误代码:0xffffffff800b010a
我读过Mono安全常见问题解答 ; 但是,服务器上的SSL证书来自根CA(购买的证书) - 由Equifax安全证书颁发机构颁发.我在针对.svc URL的Ubuntu安装上运行了TlsTest工具,没有任何问题/错误.我也可以在Firefox中使用该服务(没有安全警告).
我错过了什么?
Mono 中的 TlsTest 文件确实非常擅长检查这一点,因此询问似乎有点愚蠢 - 但是:您可以使用 WebClient 向 .svc 文件发出请求并获得响应吗?如果不是,则由于某种原因,证书可能仍然存在问题。
我还猜测您已经使用 mozroots 或 certmgr 工具来验证根 CA 是否存在?通过 certmgr 将站点上的证书显式添加到商店怎么样?
还要提醒一下:certmgr 工具通常适用于当前用户的证书副本,您需要指定 arg,--machine
以便所有用户都获得证书。