c# - 在 Azure Web 角色中为 WCF 端点添加额外的 SSL 行为

标签 c# web-services wcf azure ssl

我们的 azure web 应用程序已经将 https 端口 443 与我们的站点证书一起使用,我们在这个 webrole 中有一个 WCF 服务,它有一个使用我们的证书进行身份验证的 https 端点(单向 ssl),这个相同的服务需要一个额外的 https 端点支持使用我们的证书和第三方证书的双向身份验证。我们已经上传了证书,更新了服务定义文件,并添加了一个我们希望能正常工作的端点,但在测试中我们收到错误:服务“SslRequireCert”的 SSL 设置与 IIS“无”的设置不匹配'.

所以有效的端点是:https://environemnt.application.com/Services/Service.svc 生成错误的端点:https://environment.application.com/Services/Service.svc/twa

关键要求是它是 https,端口 443,在上面的新端点,不改变其余角色的 SSL 行为,我看到条目更改 IIS 配置或使用角色编辑器添加一个Https 输入端点,但由于我们已经使用我们的站点证书在端口 443 上有一个 Https 输入端点,所以我不想改变/影响整个角色。

如果有帮助,该服务是一个 WCF 服务,它使用 Mtom 编码的 soap 1.2 消息

这是我们输入的新值,我还需要什么?

<behaviors>
 <serviceBehaviors>
   <behavior name="SSLServiceBehavior">
     <serviceMetadata httpsGetEnabled="true" />
     <serviceDebug includeExceptionDetailInFaults="true" />
     <dataContractSerializer maxItemsInObjectGraph="2147483647" />
   </behavior>
 </serviceBehaviors>
 <endpointBehaviors>
  <behavior name="OneWayAuthEndpointBehavior">
  </behavior>
  <behavior name="TwoWayAuthEndpointBehavior">
      <endpointDiscovery enabled="true"></endpointDiscovery>
      <clientCredentials>
        <clientCertificate findValue="thumprint..." storeLocation="LocalMachine" storeName="CertificateAuthority" x509FindType="FindByThumbprint"  />
      </clientCredentials>
    </behavior>
 </endpointBehaviors>
</behaviors>
<services>
 <service behaviorConfiguration="SSLServiceBehavior" name="Service">
  <endpoint address="" behaviorConfiguration="OneWayAuthEndpointBehavior"binding="wsHttpBinding" bindingConfiguration="HttpsMtomOneWay" contract="ITestService" />
  <endpoint address="twa" behaviorConfiguration="TwoWayAuthEndpointBehavior" binding="wsHttpBinding" bindingConfiguration="HttpsMtomTwoWay" contract="ITestService"/>
</services>
<bindings>
 <wsHttpBinding>
  <binding name="HttpsMtomOneWay" messageEncoding="Mtom">
    <security mode="Transport">
      <transport clientCredentialType="None" />
    </security>
  </binding>
  <binding name="HttpsMtomTwoWay" messageEncoding="Mtom">
    <security mode="Transport">
      <transport clientCredentialType="Certificate" />
    </security>
  </binding>
 </wsHttpBinding>
</bindings>

非常感谢

最佳答案

通过以下步骤修复:

  • 向服务行为添加了 serviceCredentials.serviceCertificate(我们证书的证书详细信息)
  • 消除端点行为定义
  • 将 HttpsMtomTwoWay 绑定(bind)更改为 securityMode=Message

现在消息处理程序处理身份验证交换和外部证书验证,然后传递到传输端点,我们不需要弄乱站点范围的 SSL 或端点设置。经过众多第 3 方的测试和验证。

关于c# - 在 Azure Web 角色中为 WCF 端点添加额外的 SSL 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22388259/

相关文章:

c# - 我如何按下控制

javascript - Web 服务引用错误 (asp/vb.net)

java - JBoss WS 临时文件保存不正确

c# - 在 Visual Studio 2012 上使用 Web 引用而不是服务引用

asp.net - ASP.NET Web 方法和 WCF 服务有什么区别?

c# - 如何使用 XML-RPC 在 Python 和 C# 之间进行通信?

c# - 用一元/二元运算符中缀的后缀

c# - 针对匿名对象的 System.Text.Json 序列化

c# - 将 asmx SOAP web 服务转换为 ASP.NET 上的 REST : is WCF really useful for just that ?

wcf - 无法记录 WCF 消息正文