我们在VS 2010,C#和WCF开发的应用程序中一直在努力。我们使用Transport作为安全模式,并在TransportSecurity Properties中将其设置为None和None。
我们正在IIS6中托管该服务。经过大量工作后,我们设法使用https使其工作。我们使用的证书是自己创建的证书,使用selfssl.exe工具创建。创建证书并将其存储在“受信任的证书”列表中后,我们将其设置为IIS中的服务器证书,并使用443端口对证书指纹和本地主机地址进行“绑定”。 httpcfg工具。
好吧,我们还使用了不推荐用于生产的着名代码(我们知道这一点),它可以验证非有效证书颁发机构颁发的证书。我们从MSDN WCF动手练习中获取了这段代码。在这段代码中,我们为它提供证书的CN = NAME,它可以工作。
好的,我们终于开始工作了。这一切都在发展中。现在我们处于测试阶段,他们同意使用支持证书的代码段。问题是我们需要使用的证书,在IIS中设置它并将其设置为使用着名的代码后,它不起作用。
我们得到的错误就是这个(只显示错误的第一部分而不是堆栈跟踪):
System.ServiceModel.Security.SecurityNegotiationException:无法与权限为“172.30.224.46”的SSL / TLS安全通道建立信任关系。 ---> System.Net.WebException:基础连接已关闭:无法为SSL / TLS安全通道建立信任关系。 ---> System.Security.Authentication.AuthenticationException:根据验证过程,远程证书无效。
新证书由他们自己的证书颁发机构颁发,与我们的自我生成证书相比有几处不同,例如“使用”属性不同,或者例如我们的证书具有“增强使用”属性而他们没有。
我们在证书中注意到的另一个巨大差异是,他们是证书层次结构的一部分,他们有一个受信任的根证书,然后是中间证书的Authoity,并且在服务器中使用的证书属于中间证书。
是否需要特殊配置来支持这种类型的证书?你能告诉我们什么呢? ....我们需要一些帮助:S
我们还进行了测试,创建了自签名证书以及在其环境中设置所需的所有步骤,并且应用程序正常运行。
感谢您的帮助和关注,
Andrey Gonzalez
答案 0 :(得分:0)
通常,当证书中存储的服务器名称与您在客户端上用于引用服务器的主机名不同时,会出现此错误。
例如,您的服务器证书是针对“yourserver.com”颁发的,并且您尝试仅使用“yourserver”或其IP地址从客户端访问它。