zoukankan      html  css  js  c++  java
  • wcf 证书+ssl+自定义用户名密码

    1.生成证书 makecert -sr localmachine -ss My -n CN=WCFServer -sky exchange -pe -r

    2.ssl证书设置

      httpcfg: 1.httpcfg query ssl 

           2.httpcfg set ssl -i 0.0.0.0:port -h hash

      netsh:

           1. netsh http show sslcert

           2. netsh http add sslcert ipport=0.0.0.0:port certhash=hash appid={GUID}

      hash:证书的指纹

      GUID:调用的应用程序的GUID

      httpcfg:XP/2003/win8

      netsh:vist/win7/win8

      个人觉得win8下用netsh比较好  记得管理员权限

    3.服务端配置

      1.绑定

        设置绑定的安全模式为通道安全

    <security mode="Transport">

        客户类型凭证为基本

      <transport clientCredentialType="Basic"></transport>

      2.基地址

        基地址为https开头  

    <add baseAddress = "https://127.0.0.1:3555/TractabilityWCFServiceLib/Service1/" />

      3.终结点

        设置支持https的绑定模式、配置绑定

     <endpoint address ="" binding="wsHttpBinding" contract="TractabilityWCFInface.IService1" bindingConfiguration="wsHttps"/>
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 

      4.设置服务行为

        设置元数据终结点为https

    <serviceMetadata httpsGetEnabled="True"/>

        设置服务凭证

        1.服务端为证书验证

    <serviceCertificate x509FindType="FindBySubjectName" storeName="My" storeLocation="LocalMachine" findValue="WcfServerPK"/>

        2.客户证书的身份验证为none

    <clientCertificate>
           <authentication certificateValidationMode="None"/>
    </clientCertificate>

        3.用户名密码身份验证为自定义 指定验证类

    <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="命名空间.类名,程序集"/>

      5.自定义用户名密码验证类

        继承  System.IdentityModel.Selectors.UserNamePasswordValidator

        实现  Validate(string userName, string password)

            public override void Validate(string userName, string password)
            {
                Console.WriteLine("username=" + userName);//客户端传来的用户名
                Console.WriteLine("password=" + password);//客户端传来的密码
            }  
    

    4.客户端配置

      1.信任证书

            ServicePointManager.ServerCertificateValidationCallback += RemoteCertificateValidationCallback;
    
            private static bool RemoteCertificateValidationCallback(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
            {
                return true;
            }    

      2.传入用户名、密码

            client.ClientCredentials.UserName.UserName = "admin";
            client.ClientCredentials.UserName.Password = "1231313"; 
  • 相关阅读:
    记录一下周末作业
    超链接的 使用和按钮添加
    学习了网页设置上传视频
    Java-JDK安装及环境变量配置
    java-库存管理案例
    java-DateFormat
    java-正则表达式练习
    java-StringBuffer类
    java面对对象-匿名对象
    java static和final关键字
  • 原文地址:https://www.cnblogs.com/qingducx/p/3965039.html
Copyright © 2011-2022 走看看