WCF SSL证书验证错误

时间:2010-08-31 12:53:37

标签: wcf ssl-certificate wcf-security x509certificate

尝试使简单的Hello World(通过SSL)正常工作但收到以下错误:根据验证程序,远程证书无效。

服务器App.config是:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="mexBehavior">
                    <serviceMetadata httpGetEnabled="true" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <bindings>
            <wsHttpBinding>
                <binding name="SSLSecurity">
                    <security mode="Transport">
                        <transport clientCredentialType="None" />
                    </security>
                </binding>
            </wsHttpBinding>
        </bindings>
        <services>
            <service behaviorConfiguration="mexBehavior" name="HelloServiceLibrary.HelloService">
                <clear />
                <endpoint address="ws" binding="wsHttpBinding" name="wsEndpoint"
                    contract="HelloServiceLibrary.IHelloService">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>

                <endpoint address="https://localhost:443/hellossl" binding="wsHttpBinding" name="wssslEndpoint"
                    bindingConfiguration="SSLSecurity" contract="HelloServiceLibrary.IHelloService">
                  <identity>
                    <certificateReference x509FindType="FindByThumbprint" findValue="‎82a39faaeb18bf9585b334ca83264add3d5b26ee" />
                    <dns value="localhost" />
                  </identity>
                </endpoint>

                <endpoint address="mex" binding="mexHttpBinding" name="mexEndpoint"
                    contract="IMetadataExchange">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:8989/hello" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

请告知我做错了什么。

更新:证书已成功部署在本地计算机上的受信任的根证书颁发机构中。

3 个答案:

答案 0 :(得分:0)

将此添加到您的WCF配置中,让我知道输出。

 <system.diagnostics>
    <trace autoflush="true" />
        <sources>
            <source name="System.Net" maxdatasize="1024">
                <listeners>
                    <add name="MyTraceFile"/>
                </listeners>
            </source>
          <source name="System.Net.Sockets" maxdatasize="1024">
                <listeners>
                    <add name="MyTraceFile"/>
                </listeners>
            </source>  
       </sources>

        <sharedListeners>
            <add
              name="MyTraceFile"
              type="System.Diagnostics.TextWriterTraceListener"
              initializeData="System.Net.trace.log"
            />
        </sharedListeners>
        <switches>
            <add name="System.Net" value="Verbose" />
          <add name="System.Net.Sockets" value="Verbose" /> 
        </switches>
</system.diagnostics>

这是在黑暗中刺伤。

检查以确保将其安装到所有用户。

打开MMC
添加管理单元(证书)
  - 检查计算机帐户(下一个)
  - 选择您的电脑
完成

现在将证书重新安装到“受信任的根证书颁发机构”,并且所有用户都可以信任该证书。

答案 1 :(得分:0)

不确定这是否对您有所帮助,但我回顾了我的app.config如何设置为几周前我在使用证书时写的简单安全服务。以下是为正确配置服务配置而可能需要考虑的一些注意事项:

<bindings>
    <wsHttpBinding>
        ...
        <security>
            <transport clientCredentialType="Certificate"  />
        </security>
    </wsHttpBinding>
</bindings>

现在在我的配置中,我定义了一个端点行为,它提供了元数据来告诉服务客户端将使用哪个证书:

    <behaviors>
        <endpointBehaviors>
            <behavior name="ClientBehavior">
                        <clientCredentials>
                            <clientCertificate findValue="WcfClient" storeLocation="LocalMachine" storeName="My"
                 x509FindType="FindBySubjectName"/>
                            <serviceCertificate>
                                <authentication certificateValidationMode="PeerTrust" />
                            </serviceCertificate>
                        </clientCredentials>
                    </behavior>
        </endpointBehaviors>
    </behaviors>

答案 2 :(得分:0)

如果您只需要一个安全链接,即仅加密,不进行客户端身份验证,那么您无需设置任何客户端凭据。这就是你应该做的一切:
1.配置IIS以使用SSL
2.在您的服务上配置HTTPS端点
3.配置客户端以使用上述端点

就是这样。如果您的证书无效,则可能必须按照此处所述进行自定义证书验证:MSDN

祝你好运!