原文: 点击打开链接

目录

介绍和目标

当我们谈论WCF安全性时,有两种方式:传输级安全性和消息级安全性。传输级安全性只不过是协议的内置安全性。在消息层级的安全性方面,我们需要对数据进行加密,换句话说,安全性被注入数据本身。在本文中,我们将研究如何使用WsHttp绑定实现传输级安全性。我们不需要为运输级别的安全性做更多的开发,因为它更多的是协议固有的安全模型。在本文中,我们将实现使用HTTPS作为传输安全性的WsHttp。

我在WCF,WPF,WWF,SharePoint,设计模式,UML等方面收集了大约400个FAQ问题和答案。请随时从我的网站下载这些FAQ PDF:http : //www.questpond.com

步骤1:使用WCF项目创建一个简单的服务

第一步是创建一个简单的WCF项目。所以点击新建项目并选择WCF服务项目。默认情况下,WCF项目创建一个默认功能GetData()我们将使用与此样本相同的功能。

public class Service1 : IService1
{
    public string GetData(int value)
    {
        return string.Format("You entered: {0}", value);
    }
    public CompositeType GetDataUsingDataContract(CompositeType composite)
    {
        if (composite.BoolValue)
        {
            composite.StringValue += "Suffix";
        }
        return composite;
    }
}

步骤2:在服务的web.config文件中启用传输级安全性

下一步是在WsHttp绑定中启用传输安全性。这是使用“安全”XML标签完成的,如以下代码片段所示:

<bindings>
<wsHttpBinding>
<binding name="TransportSecurity">
<security mode="Transport">
<transport clientCredentialType="None"/>
</security>
</binding>
</wsHttpBinding>
</bindings>

步骤3:绑定绑定并指定HTTPS配置

我们现在需要绑定端点。所以使用该bindingConfiguration标签来指定绑定名称。我们还需要指定服务所在的地址。请注意地址标签中的HTTS。

更改mexHttpBindingmexHttpsBinding第二个终点。

<service name="WCFWSHttps.Service1" behaviorConfiguration="WCFWSHttps.Service1Behavior">
<!-- Service Endpoints -->
<endpoint address="https://localhost/WCFWSHttps/Service1.svc" binding="wsHttpBinding" 

   bindingConfiguration="TransportSecurity" contract="WCFWSHttps.IService1"/>
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>
</service>

serviceMetadata,我们也需要改变httpGetEnabledhttpsGetEnabled

<serviceBehaviors>
........
.........
<serviceMetadata httpsGetEnabled="true"/>
.........
.........
</serviceBehaviors>

步骤4:启用Web应用程序HTTPS

现在我们完成了WCF服务项目创建和必要的配置更改,现在是编译WCF服务项目并将其托管在启用了HTTPS的IIS应用程序中的时候了。

我们将使用makecert.exe这是Microsoft的免费工具,以启用HTTPS进行测试。MakeCert(Makecert.exe)是一个命令行工具,用于创建由系统测试根键或另一个指定键签名的X.509证书。证书将证书名称绑定到密钥对的公共部分。证书保存到文件,系统证书存储或两者兼容。

您可以从C:\ Program Files \ Microsoft Visual Studio 8 \ Common7 \ Tools \ Bin获得相同的权限,也可以从Windows SDK获取。

您可以在“ C:\ Program Files \ Microsoft Visual Studio 8 \ Common7 \ Tools \ Bin ”的DOS提示符下键入以下内容请注意,“ compaq-jzp37md0 ”是服务器名称,因此您需要将其替换为PC名称。

makecert -r -pe -n "CN= compaq-jzp37md0 " -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

如果您通过命令提示符运行该命令,您应该获得如下所示的成功消息:

现在是时候将此证书分配给您的IIS网站。所以去IIS属性,点击目录安全选项卡,你应该看到服务器证书按钮。

单击服务器证书按钮,然后您将走过IIS证书向导。单击向导中的“分配现有证书”。

您可以看到证书列表。“ compaq-jzp37md0 ”证书是我们刚刚使用' makecert.exe ' 创建的证书

现在尝试测试网站没有'HTTPS',你会得到如下所示的错误...这意味着你的证书正在工作。

不要忘记启用IIS匿名访问。

步骤5:在Web应用程序中使用服务

现在是在ASP.NET网络中使用服务应用程序的时候了。所以点击添加服务参考并指定您的服务URL。您将看到如下图所示的警告框。当我们使用makecert.exe时,我们没有将主机名指定为服务URL。所以只要让它走了

步骤6:禁止HTTPS错误

makecert.exe '创建测试证书。换句话说,它不是由CA签署的。所以我们需要在ASP.NET客户端消费者中抑制这些错误。我们创建了一个函数IgnoreCertificateErrorHandler,即使有错误也返回true。此函数作为回调附加ServicePointManager.ServerCertificateValidationCallback

在相同的代码中,您还可以看到调用该GetData函数的服务消耗代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplicationConsumer.ServiceReference1;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;

namespace WebApplicationConsumer
{
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ServicePointManager.ServerCertificateValidationCallback = 
          new RemoteCertificateValidationCallback(IgnoreCertificateErrorHandler); 
        Service1Client obj = new Service1Client();
        Response.Write(obj.GetData(12));
    }
    public static bool IgnoreCertificateErrorHandler(object sender, 
      X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        return true;
    }
}
}

步骤7:享受成功

现在到最简单的步骤,编译您的ASP.NET客户端并享受成功。

源代码

我还附上了包含客户端和服务源代码

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐