• WCF Secrity基本概念


    WCF Secrity基本概念

    语法:

    <Bindings>

      <basicHttpBinding>

         <security mode=”None” />

      </basicHttpBinding>

    </Bindings>

    Transfer security 主要包括三个方面:

    1. 消息完整性(Message Integrity)

       消息完整性必须确保消息在传输过程中没有被篡改,接收的消息是完整且正确的。

    1. 消息机密性(Message confidentiality)

       消息机密性必须确保消息不会被任何第三方查阅,消息内容不会泄露给任何非相关人员。

    1. 交互验证(Mutual Authentication)

       通常的做法是对消息进行数字签名来确保消息完整性,使用非对称加密算法来组织消息内容外泄,而用户名/密码 、X.509数字证书等方式则可以用来验证对方身份.

    Security Mode

     WCF提供了5种不同的安全方式来实现上述目标

    l None: 不采用任何安全措施,仅使用在内部安全环境使用

    l Transport:在传输协议级别上对通道的所有通讯进行加密,可使用的通讯协议包括HTTPS TCPIPCMSMQ。优点是应用广发,多平台支持,实施方便简单,效率极高,适合高吞吐量的服务使用。缺点是只能实现点对点(point-to-point)的消息安全,在使用中介连接(Proxy)时可能会泄漏消息内容,比较适用于Intranet或直接连接的环境。

    l Message:通过相关标准(如:WS-Security)直接对消息进行加密来达到安全目的。有点事能实现端到端(end-to-end)的安全传输,不存在中介安全隐患,切扩展性较好。因采用工业安全标准,所以整合能力强,适用于Internet服务。缺点是比transport效率要低一些.

    l Mixed(TransportWithMessageCredential):混合了上面两种方式。使用Transport方式完成消息完整性、消息机密性以及服务器认证,而使用Message方式完成客户端认证。

    l Both:使用TransportMessage共同完成所有安全过程,比较恐怖,性能低下,只有NetMsmqBinding支持这一安全方式。

    Bindings and transfer security modes

    Name

    None

    Transport

    Message

    Mixed

    Both

    basicHttpBinding

    Yes(Default)

    Yes

    Yes

    Yes

    No

    netTcpBinding

    Yes

    Yes(Default)

    Yes

    Yes

    No

    netPeerTcpBinding

    Yes

    Yes(Default)

    Yes

    Yes

    No

    netNamedPipeBinding

    Yes

    Yes(Default)

    No

    No

    No

    wsHttpBinding

    Yes

    Yes

    Yes(Default)

    Yes

    No

    wsFrderationHttpBinding

    Yes

    No

    Yes(Default)

    Yes

    No

    wsDualHttpBinding

    Yes

    No

    Yes(Default)

    No

    No

    netMsmqBinding

    Yes

    Yes(Default)

    Yes

    No

    Yes

        

    总结:带有net 的默认都是Transport,只有basicHttp默认是None,为了兼容asmx,而以 ws开头的默认都是Message

    Credentials

    Security Mode解决了消息完整性和机密性,那么生下来的就是”Authentication”了,WCF支持多种认证方式,允许我们从多个客户端认证类型(Client Credentials Types)中选择适合我们需求的方案,比如经典的“用户名 /密码”或者Windows集成身份认证(NTLMKerberos)、X.509数字证书等。

    Transport  Security and Credentials

    Name

    None

    Windows

    Username

    Certificate

    basicHttpBinding

    Yes(Default)

    Yes

    Yes

    Yes

    netTcpBinding

    Yes

    Yes(Default)

    No

    Yes

    netPeerTcpBinding

    No

    No

    Yes(Default)

    Yes

    netNamedpipeBinding

    No

    Yes(Default)

    No

    No

    wsHttpBinding

    Yes

    Yes(Default)

    Yes

    Yes

    wsFederationHttpBinding

    N/A

    N/A

    N/A

    N/A

    wsDualHttpBinding

    N/A

    N/A

    N/A

    N/A

    netMsmqBinding

    Yes

    Yes(Default)

    No

    Yes

    Message Security and Credentials

    Name

    None

    Windows

    Username

    Certificate

    basicHttpBinding

    Yes(Default)

    Yes

    Yes

    Yes

    netTcpBinding

    Yes

    Yes(Default)

    Yes

    Yes

    netPeerTcpBinding

    No

    No

    N/A

    Yes

    netNamedpipeBinding

    No

    Yes(Default)

    N/A

    No

    wsHttpBinding

    Yes

    Yes(Default)

    Yes

    Yes

    wsFederationHttpBinding

    N/A

    N/A

    N/A

    N/A

    wsDualHttpBinding

    N/A

    N/A

    N/A

    N/A

    netMsmqBinding

    Yes

    Yes(Default)

    No

    Yes

     

    Access Control

    Access control  又被称之为 Authorization Authentication 验证客户端身份的目的不同,它被用来控制用户(组)的代码访问授权。

    Auditing

    Auditing的作用是将WCF安全相关时间记录到Windows系统日志中。

    A.创建证书:https://www.cnblogs.com/jfzhu/p/4067873.html

    1)将创建证书工具makecert.exe放到任意地方。可以把该文档中的makecert.exe工具复制粘贴到任意目录。

    2doc命令去到makecert.exe的路径,然后输入命令makecert -sr localmachine -ss My -n CN=DeferredTopupServer -sky exchange -pe -r。其中localmachine表示证书放的位置是本地计算机,My表示证书放在个人证书中,DeferredTopupServer这个是证书的名字根据实际需要改动。

    3)成功后,可以在控制台本地计算机个人证书中看到新创建的名为DeferredTopupServer的证书。步骤:
    在运行中输入mmc-->在控制台窗口中单击“文件”菜单下的“添加删除管理单元”-->在添加/管理单元窗口的独立页,单击“添加”-->在添加独立管理单元窗口,选择“证书”,单击“添加”-->在证书管理单元窗口,选择“计算机账户”,“下一步”-->选择“本地计算机”,单击“完成”。
    展开本地计算机中个人证书,可以查询DeferredTopupServer证书。

    4)在localmachineMy下创建好两个不同名字的证书(一个是用在web service config中,一个是用在IIShttps binding中)后,复制my中新建的两个证书到“本地计算机”下“受信任的根证书颁发机构”中。
    5)因为是创建的带私钥的证书,所以要将这两个证书对应的私钥文件权限设置为everyone,简单起见就是将MachineKeys文件夹的权限设置为everyone,目录为...CryptoRSAMachineKeys

    导入证书 (当有.pfx的证书文件时,不需要创建证书,只需要导入或安装到控制台证书的相应位置即可,此处只介绍导入方式)

    1)打开控制台的本地计算机证书,步骤类似创建证书中的步骤(3),将该文档中的.pfx文件复制粘贴到任意的目录下。

    2)右击“个人”-->“所有任务”-->“导入”-->“下一步”-->单击“浏览...”,“下一步”-->输入密码,一定要勾选“标志此秘钥为可导出的。这将允许您在稍后备份或传输秘钥”,“下一步”-->“下一步”“完成”

    3)同样的步骤导入其他证书,使“本地计算机”的“个人”和“受信任的根证书颁发机构”都有两个证书。
    4)将MachineKeys文件夹的权限设置为everyone,目录为...CryptoRSAMachineKeys

    C.导出证书:

    1 导出.pfx文件:
    在控制台中找到想要导出的证书-->右键“证书名字”,“所有任务”,“导出”-->“下一步”-->勾选“是,导出私钥”,“下一步”-->只选择“私人信息交换”,“下一步”-->自己给定一个密码,输入“密码”,“确认密码”,“下一步”-->点击“浏览”指定存放.pfx文件的位置和文件名,“下一步”-->“完成”

    2 导出.pem文件:(只要导出web service config中的证书)
    1)在控制台中找到想要导出的证书-->右键“证书名字”,“所有任务”,“导出”-->“下一步”-->勾选“不,不要导出私钥”,“下一步”-->勾选“Base64 编码 x509”,“下一步”-->点击“浏览”指定存放文件的位置和文件名,“下一步”-->“完成”。此时导出的文件是扩展名为.cer的文件
    2)将导出的.cer文件,重命名为.pem的文件即可。

     常见问题

    1:异常详细信息: System.Security.Cryptography.CryptographicException: 密钥集不存在。
    ArgumentException: 证书“CN=MyServerCert”必须具有能够进行密钥交换的私钥。该进程必须具有访问私钥的权限。

    该问题可能存在两个情况:
    A:帐户没有权限访问证书的私钥文件。解决方案就是找到证书的私钥文件找到,(位置类似Windows xp存放在:C:Documents and SettingsAll UsersApplication DataMicrosoftCryptoRSAMachineKeys
       Windows vista存放在:C:ProgramDataMicrosoftCryptoRSAMachineKeys )将权限设置最大

    B:根本没有没有该证书的私钥文件, 地址同A.这种情况一般产生是由于Makecert没有在本机上做,证书是从另外的机器导入进来的. 导入的时候由于服务器的原因不能导入私钥到这个服务器上. 解决方案就是在这服务器上直接用makecert产生证书.

    查找证书私钥:

    FindPrivateKey My LocalMachine -n "CN=www.ecepdi.com"   

    FindPrivateKey My LocalMachine -t "指纹密钥"

     

    WinHttpCertCfg.exe -g -c LOCAL_MACHINEMY -s "证书名" -a Network Service 

    设置完成后,IIS宿主不是马上就可以访问密钥,所以不要急,可以iisreset命令重启IIS

     

  • 相关阅读:
    对Request.Url片段解析
    Php学习之路四
    解析bmp图像(某年全国软件大赛题目)
    工信部软件大赛(解析bmp)
    Php学习之路三(字符串操作)
    C++二维数组做形参
    php学习之路五(表单验证)
    PHP(学习之路一)
    PHp学习之路二(数组练习)
    解析网页(KMP算法实现部分)
  • 原文地址:https://www.cnblogs.com/sundh1981/p/15404419.html
Copyright © 2020-2023  润新知