2017-03-09 4 views
1

サードパーティのSOAP WSへの接続に失敗するウェブサイトがあります。第三者WSへのリクエストが多い場合に最も発生します。だから毎回、何度か失敗することはありません。そして、ほとんどの場合、サードパーティのWSに多くのリクエストがあります。「SSL/TLSセキュアチャネルを作成できませんでした」

これは、IIS暗号と敷地内のサーバー上で私たちの上に固定されています。すべての無効なチェックボックスは以前にチェックされました。

しかし、Azure WebAppでは、設定を制御することはできません。何をすべきか考えていますか?

相続人は、結合およびサードパーティの石鹸WSよりのコードです:サードパーティのSOAPのWSは、上の間違ったSSL/chipersで構成されていた

 public static CustomBinding GetDefaultBinding() 
    { 
     ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 

     AsymmetricSecurityBindingElement securityElement = new AsymmetricSecurityBindingElement(); 

     securityElement.MessageSecurityVersion = MessageSecurityVersion.WSSecurity11WSTrust13WSSecureConversation13WSSecurityPolicy12; 

     securityElement.InitiatorTokenParameters = new X509SecurityTokenParameters(X509KeyIdentifierClauseType.IssuerSerial, SecurityTokenInclusionMode.Never); 
     securityElement.RecipientTokenParameters = new X509SecurityTokenParameters(X509KeyIdentifierClauseType.IssuerSerial, SecurityTokenInclusionMode.Never); 
     securityElement.ProtectTokens = true; 

     securityElement.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt; 

     securityElement.RequireSignatureConfirmation = true; 

     securityElement.SecurityHeaderLayout = SecurityHeaderLayout.Lax; 
     securityElement.EnableUnsecuredResponse = true; 
     securityElement.IncludeTimestamp = true; 
     securityElement.SetKeyDerivation(false); 
     securityElement.DefaultAlgorithmSuite = SecurityAlgorithmSuite.Basic128Rsa15; 
     securityElement.EndpointSupportingTokenParameters.SignedEncrypted.Add(new UserNameSecurityTokenParameters()); 
     securityElement.AllowSerializedSigningTokenOnReply = true; 

     CustomBinding myBinding = new CustomBinding(); 
     myBinding.Elements.Add(securityElement); 

     TextMessageEncodingBindingElement element = new TextMessageEncodingBindingElement(MessageVersion.Soap11WSAddressing10, Encoding.UTF8); 
     element.ReaderQuotas.MaxStringContentLength = int.MaxValue; 
     element.ReaderQuotas.MaxDepth = int.MaxValue; 
     element.ReaderQuotas.MaxArrayLength = int.MaxValue; 
     element.ReaderQuotas.MaxBytesPerRead = int.MaxValue; 
     element.ReaderQuotas.MaxNameTableCharCount = int.MaxValue; 
     myBinding.Elements.Add(element); 

     HttpsTransportBindingElement httpsBindingElement = new HttpsTransportBindingElement(); 
     httpsBindingElement.RequireClientCertificate = true; 
     httpsBindingElement.MaxBufferPoolSize = int.MaxValue; 
     httpsBindingElement.MaxBufferSize = int.MaxValue; 
     httpsBindingElement.MaxReceivedMessageSize = int.MaxValue; 
     httpsBindingElement.KeepAliveEnabled = false; 
     httpsBindingElement.AllowCookies = false; 

     myBinding.Elements.Add(httpsBindingElement); 

     myBinding.CloseTimeout = new TimeSpan(0, 10, 0); 
     myBinding.ReceiveTimeout = new TimeSpan(0, 10, 0); 
     myBinding.SendTimeout = new TimeSpan(0, 10, 0); 

     return myBinding; 
    } 

     private void ConfigureClientCredentials(ClientCredentials cc) 
    { 
     if (cc == null) return; 

     cc.UserName.UserName = Options.WebserviceUsername; 
     cc.UserName.Password = Options.AuthPassword; 

     cc.ClientCertificate.Certificate = Options.ClientCertificate; 
     cc.ServiceCertificate.DefaultCertificate = Options.IbaCertificate; 

     cc.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None; 
    } 

    private void ConfigureEndPoint(ServiceEndpoint endpoint) 
    { 
     endpoint.Contract.ProtectionLevel = ProtectionLevel.EncryptAndSign; 
     endpoint.EndpointBehaviors.Add(new CustomEndpointBehavior()); 

    } 

All disabled checkbox was checked before

All disabled checkbox was checked before

答えて

2

問題を引き起こした1台のサーバー(ロードバランサの設定) - 私のコードで問題にはならなかった。

+0

申し訳ありません - 私はちょうど私の答えを更新しました:-) – pajzo

+0

すばらしかったです。最終的なヒント:私はあなたがClean Code(ロバート・マーティンの偉大な本)について読んでみたいと思うかもしれません。あなたのコードはそれから利益を得るかもしれません。 – GhostCat

関連する問題