通过HTTPS和令牌加密呼叫信赖方

时间:2016-04-28 07:45:00

标签: azure https acs

我遇到了Windows Azure ACS的问题,我无法确定它是否应该是这样,或者我的代码中是否有错误。

我在ACS中配置了许多依赖方,并且所有依赖方都配置了HTTPS。每个服务都以需要令牌加密的方式配置。为此,我上传了使用MakeCert.exe创建的证书。

当客户端与依赖方通信时,我将证书的公共部分添加为服务证书,并将主题名称添加为DnsIdentity:

var identity = EndpointIdentity.CreateDnsIdentity( GetClientCertificateSubjectName() );
var serviceEndpointAddress = new EndpointAddress( new Uri( _serviceAddress ), identity );

// Creation of channel factory

if( channelFactory.Credentials != null ) {
  channelFactory.Credentials.ServiceCertificate.DefaultCertificate = GetClientCertificate();
  channelFactory.Credentials.ClientCertificate.Certificate = GetServiceIdentityCertificate();
}

事情就是这样:当我通过HTTPS呼叫依赖方时,我可以跳过EndpointIdentity的创建,然后依赖方会给我一个正确的答案。我也可以跳过设置ServiceCertificate.DefaultCertificate属性或设置一个完全随机的证书,依赖方仍然会给我一个正确的答案。

当通过HTTP调用时,执行上述任何操作都会导致ACS错误输出,并显示消息表明我没有使用正确的证书。简而言之:当通过HTTP调用时,我只能与正确的客户端证书进行通信。我预计这也是HTTPS的情况。

我可以想象ChannelFactory<T>或ACS足够聪明,可以检测到使用了HTTPS并且跳过了配置的加密,有利于SSL加密。可悲的是,我无法找到任何支持这一想法的文档。

我的问题是:通过HTTPS呼叫依赖方时忽略EndpointIdentity和证书是否正常?或者我是否需要其他配置才能使其正常工作?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我提供的信息量不足以正确回答问题。事实证明,这一切都在我们正在创建的绑定中。它使用以下代码创建绑定:

public static Binding CreateServiceBinding( string acsCertificateEndpoint, string bindingNameSpace, bool useSsl ) {
  var binding = new IssuedTokenWSTrustBinding( CreateAcsCertificateBinding(), new EndpointAddress( acsCertificateEndpoint ) );

  if( useSsl ) {
    binding.SecurityMode = SecurityMode.TransportWithMessageCredential;
  }

  if( !string.IsNullOrWhiteSpace( bindingNameSpace ) ) {
    binding.Namespace = bindingNameSpace;
  }

  return binding;
}

public static CertificateWSTrustBinding CreateAcsCertificateBinding() {
  return new CertificateWSTrustBinding( SecurityMode.TransportWithMessageCredential );
}

结果如下:

  1. 如果是http通信,则通过MutualCertificate认证模式流程,仅应用于消息层。这就是客户被要求提供客户证书的原因。此绑定元素创建非对称安全绑定元素,该元素配置为需要基于证书的客户端身份验证以及基于证书的服务器身份验证。
  2. 如果是https通信,则它将通过CertificateOverTransport身份验证模式流,并且仅应用于传输层。这就是为什么即使没有提供客户证书,也可以。此绑定元素要求传输提供服务器身份验证以及消息保护(例如,HTTPS)。
  3. 有关安全模式的更多信息,请查看以下链接:

    https://msdn.microsoft.com/en-us/library/ms733098%28v=vs.110%29.aspx https://msdn.microsoft.com/en-us/library/ms731074%28v=vs.110%29.aspx

    希望这有助于某人!