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