2016-06-09 10 views
1

Ich wollte ssl Web-Service aufrufen. Ich habe ein Serverzertifikat, das ich im vertrauenswürdigen Speicher installiert habe. Ich benutze SOAP-UI-Tool und Soap-Sonar, um SSL-Web-Service anzurufen, den ich mit HTTS-Aufruf an den Dienst verwende.2-Wege-SSL-Web-Service-Test

Sieht aus wie Zertifikat nicht durch die Anfrage geht.

Ich habe eine C# -Anwendung erstellen, um die Anfrage mit Zertifikat zu übergeben.

Aber immer noch der gleiche Fehler.

Können Sie andere Tools zum Testen des Webservice vorschlagen? oder Beispielcode?

private void button4_Click(object sender, EventArgs e) 
    { 
     try 
     { 

      var clientHandler = new WebRequestHandler(); 
      string address = @"https://xxx.xxx.xxx.xxx:58444/IVR/"; 
      var requestXML = "\\request.xml"; 
      var serialized = File.ReadAllText(Environment.CurrentDirectory + requestXML); 
      var cert = GetCert(); 
      CertificateWebClient myWebClient = new CertificateWebClient(cert); 

      string fileName = Environment.CurrentDirectory + requestXML; 
      myWebClient.Headers.Add("Content-Type", "application/xml;charset=utf-8"); 
      byte[] responseArray = myWebClient.UploadFile(address, fileName); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 


public class CertificateWebClient : WebClient 
{ 
    private readonly X509Certificate2 certificate; 

    public CertificateWebClient(X509Certificate2 cert) 
    { 
     certificate = cert; 
    } 

    protected override WebRequest GetWebRequest(Uri address) 
    { 
     HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(address); 

     ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3; 
     request.ServicePoint.Expect100Continue = true; 
     request.ServerCertificateValidationCallback = 
      delegate(Object obj, 
      X509Certificate X509certificate, 
      X509Chain chain, 
      System.Net.Security.SslPolicyErrors errors) 
      { 
       if (errors == System.Net.Security.SslPolicyErrors.RemoteCertificateNameMismatch) 
       { 
        return true; 
       } 
       else 
       { 
        return false; 
       } 
      }; 

     request.ClientCertificates.Add(certificate); 
     return request; 
    } 
} 

Ausnahmen: -

Die Anforderung wurde abgebrochen: Es konnte keine sichere SSL/TLS-Kanal erstellen.

+0

Wenn Sie eine Ausnahme erhalten, bitte posten Sie es –

+0

Ich habe Frage mit Ausnahme aktualisiert. – Prashant

+1

Das hängt wahrscheinlich nicht mit Ihrem Code zusammen. Entweder A: Das Zertifikat des Servers wird von Ihrer Anwendung nicht als vertrauenswürdig eingestuft. oder B: Das Zertifikat des Clients wird vom Server nicht akzeptiert. Überprüfen Sie mit Fiddler, dass Sie wirklich das Zertifikat in der Anfrage übergeben –

Antwort

0

Sie setzen eine HTTP-Adresse:

string address = @"http://xxx.xxx.xxx.xxx:{port}/IVR/"; 

Der WebClient wird nie ein HTTPS-Zertifikat auf eine HTTP-Adresse übergeben.
Ihre Adresse sollte wie folgt aussehen:

string address = @"https://xxx.xxx.xxx.xxx:{HTTPSPORT}/IVR/"; 
+0

ja ich habe versucht mit https. aber ich habe das gleiche Ergebnis – Prashant

+0

@ Prashant sind Sie sicher, dass der Webserver HTTPS an dem Port/der Adresse unterstützt, die Sie kontaktieren möchten? –

+0

ja das habe ich bestätigt ... – Prashant

0

ich durch dieses Problem gelöst Mein Zertifikat nicht private Schlüssel hat, so dass ich wieder erstellt und installiert. (how to create a private key) Danach kann ich eine Verbindung herstellen.

Danke für Ihre Hilfe.