• SSL/TLS 应用于无Svc文件的WCF


      在许多项目中,我们可能需要使用SSL/TLS(SSL Security Socket Layer 安全套接字/TSL Transfer Layer Security 传输层安全)来对客户端与服务端进行认证,并使用客户端与服务端之间认证成功后产生的会话密钥(Session Key)对数据加密,以保证消息的机密性。

      应用SSL/TLS,很自然想到证书。.Net平台下,可以使用makeCert来制作测试证书。关于makeCert的使用,可以参见MSDN。

      本节内容:

        1、证书制作

        2、无Svc文件的服务端配置

        3、客户端调用

      1、证书制作

      本例中使用的制作证书的命令如下:

    makecert -r -pe -n "CN= Tyb1222 " -b 01/01/2000 -e 01/01/2050 -eku 1.3.6.1.5.5.7.3.1 
      -ss my -sr localMachine -sky exchange -sp 
      "Microsoft RSA SChannel Cryptographic Provider" -sy 12

    注意以上命令红色部分表示证书主题。

      -ss my表示证书的存储区为个人。

      -sr localMachine 表示存储于本地计算机

    这些信息在稍后的配置中会用到。其他的请参见MSDN中的说明

      查看证书如图:

      2、无Svc文件的服务端配置

    <?xml version="1.0" encoding="utf-8"?>
    
    <!--
      有关如何配置 ASP.NET 应用程序的详细消息,请访问
      http://go.microsoft.com/fwlink/?LinkId=169433
      -->
    
    <configuration>
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding  name="vrvTransportBinding">         
              <security mode="Transport">
                <transport clientCredentialType="None"></transport>
              </security>
            </binding>        
          </basicHttpBinding>
        </bindings>
        <serviceHostingEnvironment>
          <serviceActivations>
            <add service="VrvService.StateGrid.TerminalService" relativeAddress="TerminalService.svc"/>
          </serviceActivations>      
        </serviceHostingEnvironment>
        <services>
          <service name="VrvService.StateGrid.TerminalService" behaviorConfiguration="vrvServiceBehavior">
            <endpoint address=""
                      binding="basicHttpBinding" 
                      contract="VrvService.Interface.ITerminal" 
                      behaviorConfiguration="vrvEndpointBehavior" 
                      bindingConfiguration="vrvTransportBinding">           
            </endpoint>
            <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
          </service>
         
        </services>
        <behaviors>
          <serviceBehaviors>
            <behavior name="vrvServiceBehavior">
              <serviceMetadata httpsGetEnabled="true"/>
              <serviceDebug includeExceptionDetailInFaults="True"/>
              <serviceCredentials>
                <windowsAuthentication allowAnonymousLogons="true"/>
                <clientCertificate>
                  <authentication certificateValidationMode="PeerTrust"/>
                </clientCertificate>
                <serviceCertificate findValue="Tyb1222" storeName="My" storeLocation="LocalMachine" x509FindType="FindBySubjectName"/>
              </serviceCredentials>
            </behavior>
          </serviceBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>

      3、客户端调用

      可以通过添加引用调用服务:如下图,单击确定即可:

      客户端调用代码如下:

                var proxy = new TerminalClient();
                proxy.GetTerminalAlarm("123123", 10);

      运行代码出现如下异常:

      由于证书是使用信任链模式对进行认证的,如果证书不收信,将导致以上异常。解决办法如下:

    1、将证书导入“受信任根证书颁发机构”,如下图:

    在上图的导入窗口中操作后,客户端调用就不会有以上异常。

    2、在C#客户端调用时,可以通过代码回调证书的认证方式:

        
                ServicePointManager.ServerCertificateValidationCallback +=
                    (sender, certificate, chain, sslPolicyError) => true;
                var proxy = new TerminalClient();
                proxy.GetTerminalAlarm("123123", 10);
    
    
        
    

      参考:

    http://www.cnblogs.com/artech/archive/2011/06/02/Authentication_042.html

  • 相关阅读:
    Javascript学习总结
    MVC和MVVM
    各大搜索引擎网址收录入口地址
    微软称IE9将更加出色 对手谷歌也能从中受益(图文)
    公安部:身份证丢失无需挂失 被冒用不担责 冒用身份证犯罪
    微软发布Mac 8版Messenger 支持视频会议(图)
    如何删除XP系统的NETWARE,改变登陆界面 火急!!XP系统登录界面由于netware造成的不能更改
    使用WebBrowser自动登录阿里妈妈网站
    微软发布IE9开发者预览版 不支持XP系统(图)
    ASP 0113 的错误的终极解决办法(三种)
  • 原文地址:https://www.cnblogs.com/tyb1222/p/2932659.html
Copyright © 2020-2023  润新知