Hallo Leute,
ich habe die Aufgabe den Webservice (WSDL) eines Fremdanbieters anzusprechen (momentan noch die Test-Version die der Anbieter bereitstellt). Dabei bekomme ich immer die Meldung:
Fehlermeldung:
Die zugrunde liegende Verbindung wurde geschlossen: Für den geschützten SSL/TLS-Kanal konnte keine Vertrauensstellung hergestellt werden.
Daraufhin habe ich das ganze ohne SSL versucht:
System.Net.ServicePointManager.ServerCertificateValidationCallback +=
delegate (object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors sslError)
{
bool validationResult = true;
return validationResult;
};
Dann geht das System auf die http-Adresse, die es leider aber nicht gibt. Gibt es eine Möglichkeit diesen Fehler zu umgehen?
Gruß fungi35
Verwendet der Service ein Zertifikat von einer offiziellen Authority oder ist das selber signiert?
Du kannst versuchen das Zertifikat bei dir zu installieren und als vertrauenswürdig zu akzeptieren.
Dann geht das System auf die http-Adresse, die es leider aber nicht gibt. Gibt es eine Möglichkeit diesen Fehler zu umgehen?
Ob HTTP geliefert wird hat nix mit SSL an oder aus zu tun. Der Server liefert dir HTTP und/oder HTTPS. Durch deaktivieren von SSL schaltest du nicht automatisch auf HTTP um, der Server muss so konfiguriert sein, dass er auch HTTP-Verbindungen unterstützt, was aber i.d.R. keine gute Idee ist, da unsicher.
Beste Grüße
emuuu
2+2=5( (für extrem große Werte von 2)
Komme ich irgendwie an das Zertifikat oder muss ich dafür den Anbieter kontaktieren?
Ja. Wie es geht hängt von deinem Browser ab.
Chrome:
Klick auf das Schloss neben Adresse in der Browserleiste. Hier steht normalerweise "sicher" bei einem selbstsignierten Zertifikat eher nicht.
Dann auf den "Zertifikat" klicken (bzw. auf das "Gültig" darunter). Dann im Zertifikat-Dialog den Reiter "Details öffnen und auf "In Datei kopieren".
Schon hast das Zertifikat. Dann die Datei öffnen und das Zertifikat installieren. Je nachdem ob du es für den Benutzer oder Computer installiert hast, vertraut der Benutzer/Computer dem Zertifikat nun.
Sollte auf keinen Fall als Dauerlösung verwendet werden.
2+2=5( (für extrem große Werte von 2)
Danke, ich habe das Zertifikat heruntergeladen und auf meinem PC installiert (für meinen lokalen Computer). Komischerweise kommt die Meldung trotzdem noch. Sehr seltsam 🤔
Edit: Die InnerException zeigt die Meldung "Das Remotezertifikat ist laut Validierungsverfahren ungültig." an.
Edit 2: Den Virenscanner (ESET) hab' ich auch komplett ausgeschaltet, der hat auch eine SSL-Prüfung. Bringt leider auch nichts.
Genau für diese Fehlermeldung ist der Code von Dir oben aber eigentlich die Lösung als sehr schmutziger Hack.
Dieser Hack (es ist kein fix!) hat aber nichts mit "ohne ssl" zutun. Der Hack ist einfach dazu da, dass er JEDES Zertifikat erlaubt.
Es wird aber trotzdem SSL verwendet.
Da dies ein globales Verhalten ist - und man sollte global nicht jedem Zertifikat vertrauen - ist dies prinzipiell nicht zu empfehlen.
Besser wäre certificate pinning, sprich Du überprüfst ob das Zertifikat auch wirklich das ist, was Du erwartest; das kann auch ein selbst signiertes sein.
Kerry Lothrop hat dieses Prinzip auf der Technical Summit 2016 auf Basis von Xamarin gezeigt.
Xamarin, aber sicher!
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Der Code oben funktioniert (auch) nicht bzw. er bewirkt nicht, dass das Zertifikat akzeptiert wird.
Das CAPI2-Log spuckt folgenden Fehler aus:
Fehlermeldung:
System
- Provider
[ Name] Microsoft-Windows-CAPI2
[ Guid] {5bbca4a8-b209-48dc-a8c7-b23d3e5216fb}EventID 11
Version 0
Level 2
Task 11
Opcode 2
Keywords 0x4000000000000003
- TimeCreated
[ SystemTime] 2018-02-12T20:01:26.031218800Z
EventRecordID 2688
Correlation
- Execution
[ ProcessID] 14476
[ ThreadID] 16288Channel Microsoft-Windows-CAPI2/Operational
Computer mypc
- Security
[ UserID] S-1-5-21-849391721-3056917416-2997542074-1011
UserData
CertGetCertificateChain
Certificate
[ fileRef] 3681981CCE42123211DFF2B1FCA102B01901BB5A.cer
[ subjectName] My Company LtdValidationTime 2018-02-12T20:01:26.031Z
AdditionalStore
Certificate
[ fileRef] 3681981CCE42123211DFF2B1FCA102B01901BB5A.cer
[ subjectName] My Company Ltd
ExtendedKeyUsage
Usage
[ oid] 1.3.6.1.5.5.7.3.1
[ name] Serverauthentifizierung
- Flags
[ value] 0
- ChainEngineInfo
[ context] user
- CertificateChain
[ chainRef] {33CF4FEB-7DDD-4841-9187-DDB12366B2D5}
TrustStatus
ErrorStatus
[ value] 20
[ CERT_TRUST_IS_UNTRUSTED_ROOT] true
- InfoStatus
[ value] 100
[ CERT_TRUST_HAS_PREFERRED_ISSUER] true
ChainElement
Certificate
[ fileRef] 3681981CCE42123211DFF2B1FCA102B01901BB5A.cer
[ subjectName] My Company Ltd
- SignatureAlgorithm
[ oid] 1.2.840.113549.1.1.5
[ hashName] SHA1
[ publicKeyName] RSA
- PublicKeyAlgorithm
[ oid] 1.2.840.113549.1.1.1
[ publicKeyName] RSA
[ publicKeyLength] 1024
TrustStatus
ErrorStatus
[ value] 20
[ CERT_TRUST_IS_UNTRUSTED_ROOT] true
- InfoStatus
[ value] 10C
[ CERT_TRUST_HAS_NAME_MATCH_ISSUER] true
[ CERT_TRUST_IS_SELF_SIGNED] true
[ CERT_TRUST_HAS_PREFERRED_ISSUER] true
- ApplicationUsage
[ any] true
- IssuanceUsage
[ any] true
- EventAuxInfo
[ ProcessName] xxxxxxxxx.exe
- CorrelationAuxInfo
[ TaskId] {D35E6EC8-9382-445D-9FD0-7811CE47DC86}
[ SeqNumber] 3
- Result Eine Zertifikatkette wurde zwar verarbeitet, endete jedoch mit einem Stammzertifikat, das beim Vertrauensanbieter nicht als vertrauenswürdig gilt.
[ value] 800B0109
Ausgestellt wurde das Zertifikat von thawte, deren Rootzertifikate ich gerade alle mal installiert habe (auch ohne Erfolg)