【问题标题】:WCF DataService over Https基于 Https 的 WCF 数据服务
【发布时间】:2013-06-28 04:03:59
【问题描述】:

我正在开发一个在 Windows 控制台应用程序中自托管的 WCF 数据服务。我想通过 Https(即 SSL)而不是 Http 激活我的服务。我该怎么做?

谢谢

【问题讨论】:

    标签: ssl https wcf-data-services wcf-endpoint


    【解决方案1】:

    首先在 Windows 上创建 CA 证书(使用 Visual Studio 命令提示符):

    makecert -sv SignRoot.pvk -cy authority -r signroot.cer -a sha1 -n "CN=Dev Certification Authority" -ss my -sr localmachine
    

    现在将证书放在 Windows 密钥库中的“受信任的根证书颁发机构”中。这可以通过MMC来完成。为此:运行... -> 键入“mmc” -> 回车 -> 选择“证书”控制台 -> 在个人存储中找到您创建的证书并将其移动到受信任的证书颁发机构存储。

    现在我们创建一个由CA证书签名的交换证书:

    makecert -iv SignRoot.pvk -ic signroot.cer -cy end -pe -n CN="localhost" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localmachine -sky exchange -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12
    

    注意:EKU OID 用于服务器身份验证
    注意:CN(通用名称)应与调用服务的名称相同.

    现在我们向数据服务添加一个 Https 端点。那可以是
    1- 通过服务的 web.config 文件,我们必须在其中输入服务端点:

    <endpoint address="https://localhost:8888/" binding="basicHttpsBinding" contract="System.Data.Services.IRequestHandler"></endpoint>
    

    2- 或者使用 DataServiceHost 对象的“AddServiceEndpoint”以编程方式添加端点:

    host.AddServiceEndpoint(
                    new ServiceEndpoint(ContractDescription.GetContract(typeof(TestODataService.DemoDataService)))
                    {
                        Address = new EndpointAddress("https://localhost:8888/"),
                        Binding = new WebHttpBinding(WebHttpSecurityMode.Transport),
                        Contract = ContractDescription.GetContract(typeof(IRequestHandler)),
                    }
                    );
    

    注意:第二种方法中的绑定必须是具有传输安全性的 WebHttpBinding。在 web.config 方法中,它可以是 basicHttpsBinding,也可以是带有 bindingConfiguration 的 webBinding,以启用传输安全性。

    现在我们将交换证书与服务的端口绑定。为了让 WCF Web 服务器使用交换证书响应客户端,我们需要使用 netsh 命令将证书绑定到服务的地址: netsh http 添加 sslcert ipport=0.0.0.0:8000 certash=0000000000003ed9cd0c315bbb6dc1c08da5e6 appid={00112233-4455-6677-8899-AABBCCDDEEFF}

    注意:certhash 是交换证书的指纹,appid 是 AssemblyInfo.cs 中托管应用程序的 GUID强>的项目。 ip 0.0.0.0 绑定所有的ip地址,端口就是服务的端口。该命令要求每个地址只使用一次。

    注意:某些移动设备在使用服务的 ip 地址调用时可能无法验证服务的身份,即使交换证书将 CN 设置为服务。在这种情况下,证书的 CN 应该是域名。

    注意:为了让移动设备信任服务的交换证书,CA 证书应安装在移动设备上的 Trusted CA 证书存储中。

    注意:某些浏览器(例如 Chrome)会反对为 localhost 颁发证书,而 localhost 是仅在本地网络中使用的名称。如果您将 CN 设置为域名,则不会发生这种情况。

    参考:http://www.codeproject.com/Articles/24027/SSL-with-Self-hosted-WCF-Service

    【讨论】:

      猜你喜欢
      • 2022-08-16
      • 1970-01-01
      • 1970-01-01
      • 2016-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      相关资源
      最近更新 更多