2016-04-28 24 views
0

我遇到了Windows Azure ACS的問題,我無法確定它是否應該是這種方式,或者我的代碼中有錯誤。通過HTTPS和令牌加密調用依賴方

我在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和證書是否正常?或者我需要額外的配置來完成這項工作?

在此先感謝!

回答

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)。

有關安全模式的更多信息,請查看以下鏈接:

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

希望這可以幫助別人!