it-swarm.com.de

Konnte keinen sicheren Kanal für SSL/TLS mit der Berechtigung "*" einrichten.

Ich muss einen PHP Webservice nutzen, der ein SSL-Zertifikat besitzt. Meine .net 3.5-Klassenbibliothek referenziert den Webservice mit "Dienstreferenzen hinzufügen" in Visualstudio 2010 (WCF-Recht?).

Beim Aufruf der Hauptmethode des Webservice erhalte ich;

Konnte keinen sicheren Kanal für SSL/TLS mit der Berechtigung '{base_url_of_WS}' einrichten.

Ich habe viel versucht, wie 

System.Net.ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); 
 public bool CheckValidationResult(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
    {
        return true;
    }

Aber es würde nicht funktionieren. Ich habe auch das Zertifikat auf meinem eigenen Rechner installiert.

*Zusatzinformation; Wenn ich den wsdl-Speicherort in "Dienstverweis hinzufügen" verwende, tritt der gleiche Fehler auf. Bevor ich es ausprobierte, arbeitete ich mit einem statischen Wsdl.

alt text

16
Casper Broeren

Ja, ein nicht vertrauenswürdiges Zertifikat kann dies verursachen. Sehen Sie sich den Zertifikatpfad für den Webservice an, indem Sie den Websservice in einem Browser öffnen, und verwenden Sie die Browser-Tools, um den Zertifikatpfad anzuzeigen. Möglicherweise müssen Sie ein oder mehrere Zwischenzertifikate auf dem Computer installieren, der den Webservice aufruft. Im Browser werden möglicherweise "Zertifikatfehler" mit der Option "Zertifikat installieren" angezeigt, wenn Sie weitere Untersuchungen durchführen. Dies kann das fehlende Zertifikat sein.

Mein besonderes Problem war ein Geotrust Geotrust DV SSL-CA-Zwischenzertifikat, das nach einem Upgrade auf den Stammserver im Juli 2010 fehlte

https://knowledge.geotrust.com/support/knowledge-base/index?page=content&id=AR1422

10
Graham

Das war genau das Problem, vor dem ich stand. In einem anderen Artikel bekam ich einen Hinweis zum Ändern der Konfiguration. Für mich funktioniert das:

<bindings>
  <basicHttpBinding>
    <binding name="xxxBinding">
      <security mode="Transport">
        <transport clientCredentialType="Certificate"/>
      </security>
    </binding>
  </basicHttpBinding>
</bindings>
20
MICHA

Problem

Beim Aufrufen einer Drittanbieter-API aus meinem ASP.NET Core MVC-Projekt wurde dieselbe Fehlermeldung angezeigt.

Konnte keinen sicheren Kanal für SSL/TLS mit der Berechtigung .__ einrichten. '{base_url_of_WS}'.

Lösung

Es stellte sich heraus, dass der Server der Drittanbieter-API TLS 1.2 benötigte. Um dieses Problem zu beheben, fügte ich dem Konstruktor meines Controllers die folgende Codezeile hinzu:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
7
Tod Birdsall

Wir hatten dieses Problem auf einem neuen Webserver von ASPX-Seiten, der einen Webservice aufrief. Wir hatten dem App-Pool-Benutzer keine Erlaubnis für das Maschinenzertifikat erteilt. Das Problem wurde behoben, nachdem dem Benutzer des App-Pools die Berechtigung erteilt wurde.

3
Robert Williams

Falls es jemandem hilft, das neue Microsoft Web Service Reference Provider-Tool zu verwenden, das für .NET Standard und .NET Core vorgesehen ist, musste ich der Bindungsdefinition die folgenden Zeilen hinzufügen:

result.Security.Mode = BasicHttpSecurityMode.Transport;
result.Security.Transport = new HttpTransportSecurity{ClientCredentialType = HttpClientCredentialType.Certificate};

Dies ist im Grunde dasselbe wie Michas Antwort, jedoch im Code, da keine Konfigurationsdatei vorhanden ist.

1
trebor74

Stellen Sie sicher, dass Sie Visual Studio als Administrator ausführen.

1
Perspicace

Hatte den gleichen Fehler mit dem Code:

X509Certificate2 mycert = new X509Certificate2(@"C:\certificate.crt");

Durch das Hinzufügen eines Passworts gelöst:

X509Certificate2 mycert = new X509Certificate2(@"C:\certificate.crt", "password");
0
Ramunas

Dieser Fehler kann aus vielen Gründen auftreten. Beim letzten Mal habe ich ihn behoben, indem ich die Datei Reference.svcmap Geändert und geändert habe, wie auf die WSDL-Datei verwiesen wird.

Ausnahme auslösen:

<MetadataSource Address="C:\Users\Me\Repo\Service.wsdl" Protocol="file" SourceId="1" />
<MetadataFile FileName="Service.wsdl" ... SourceUrl="file:///C:/Users/Me/Repo/Service.wsdl" />

Funktioniert gut:

<MetadataSource Address="https://server.domain/path/Service.wsdl" Protocol="http" SourceId="1" />
<MetadataFile FileName="Service.wsdl" ... SourceUrl="https://server.domain/path/Service.wsdl" />

Das scheint komisch, aber ich habe es reproduziert. Dies war in einer Konsolenanwendung unter .NET 4.5 und 4.7 sowie auf einer .NET WebAPI-Site unter 4.7 der Fall.

0

Hier ist was für mich fixiert:

1) Stellen Sie sicher, dass Sie Visual Studio als Administrator ausführen

2) Installieren und führen Sie winhttpcertcfg.exe aus, um Zugriff zu gewähren

https://msdn.Microsoft.com/en-us/library/windows/desktop/aa384088(v=vs.85).aspx

Der Befehl ist wie folgt: (Geben Sie Ihren Betreff und den Namen Ihres Zertifikats ein.)

winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "certificate subject" -a "NetworkService"
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "certificate subject" -a "LOCAL SERVICE"
winhttpcertcfg -g -c LOCAL_MACHINE\MY -s "certificate subject" -a "My Apps Service Account"
0
Stanley