Konnte keine Vertrauensstellung einrichten der Verbindung wenn der Zugriff auf webservices innerhalb .NET Framework mit Zertifikat

Ich versuche zu nennen, einen webservice (nicht von mir), Service-verweisen in Visual Studio 2008. Passend zu seinem Besitzer, es erfordert ein Zertifikat, welches Sie freundlicherweise für Testzwecke.

Ich bin ein absoluter Neuling in Zertifikate, SSL und andere, so dass ich tun könnte etwas schrecklich falsch hier. Sowieso, das ist, was ich getan habe.

Erste, registrierte ich die P12-Datei zusammen mit seinem Passwort (ebenfalls vorhanden) in meinem client-Rechner.
Dann habe ich verwiesen auf den service über die Service-Reference-option in VS2008, und wies auf Ihre URL (das, btw, nutzt ein VPN-tunnel), für die es genannt zu werden, in einer windows form-Anwendung. Alle Ihre zugrunde liegenden Methoden sind anerkannt durch die generierten Assemblys.

Hier ist der code, den ich verwendet:

WebServiceClient client = new WebServiceClient();
X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);

store.Open(OpenFlags.ReadOnly);
X509Certificate2 certificate = store.Certificates[0]; 
client.ClientCredentials.ClientCertificate.Certificate = certificate;

client.ReturnSomeData(); //Error here

In der letzten Zeile, wird die folgende Ausnahme ausgelöst:

Could not establish trust relationship for the SSL/TLS secure channel with authority '<webservice URI here>'

Den inneren Ausnahmen sind die gleichen 2 Ebenen tief, und die Dritte ist

The remote certificate is invalid according to the validation procedure

Problem ist, ich kann die nennen, die sehr Methode verwenden, die sehr Zertifikats bei SoapUI, und Daten zurückgegeben.

Außerdem habe ich gesehen, die Fehlersuche Marc Kies gepostet hier , so …

  1. Haben Sie DNS-und line-of-sight auf den server? Ja
  2. Verwenden Sie den richtigen Namen aus dem Zertifikat? Ja, ich habe es mit Sofort.
  3. Ist das Zertifikat noch gültig? Hoffentlich. Wenn SoapUI es akzeptiert, ich denke, es ist? (Habe wirklich meine Zweifel hier)
  4. Wird einem schlecht konfigurierten load balancer, messing-up? Auch nicht erklären, SoapUI Verhalten.
  5. Hat die neue server-Maschine haben, die Uhr richtig eingestellt (also so, dass die UTC Zeit korrekt ist [ignorieren local time, es ist weitgehend spielen keine Rolle]) – dies ist sicherlich wichtig für WCF, so kann Auswirkungen auf reguläre SEIFE? Weiß nicht, ob sein.
  6. Gibt es ein Zertifikat Vertrauenskette Problem? wenn Sie surfen von dem server, der soap-Dienst, können Sie SSL? Eigentlich, die es gibt. Chrome meldet, dass The website's identity could not be confirmed. Ich nahm an, es wäre wegen eh, dass wir über eine VPN-Verbindung hier. Gibt es ein problem?
  7. Ist der server-Maschine-level-proxy richtig eingestellt??? (die verschiedenen für den Benutzer ist der proxy); siehe proxycfg unter Windows XP /2003 (nicht sicher über Vista etc) Wieder, nicht erklären, SoapUI Verhalten.

Jede Hilfe zutiefst dankbar.

  • Überprüfen Sie Ihre webservice-SSL-version und stellen Sie Ihre ServicePointManager.SecurityProtocol angemessen.
  • Ist diese Eigenschaft eine server-spezifische Konfiguration? Denn es ist nicht von mir.
  • Nein, es sollte gesetzt werden, in Ihrer client-Anwendung in C# – code.
  • In Schritt 6 oben – wenn Sie wiederholen Sie den test mit dem IE nicht, was IE sagen? Außerdem ist der code oben ausgeführt wird mit Ihren Berechtigungen oder service (verschiedene Benutzer) – Berechtigungen?
  • Er berichtet, dass „Es gibt ein problem in dem Sicherheitszertifikat der website“ und dass es „nicht ausgestellt wurde, von einer zuverlässigen Zertifizierungsstelle“.
  • ServicePointManager scheint eine statische Klasse, die nicht verlassen, die Eigenschaft sichtbar. Wie muss ich es einstellen?
  • Wie werden Sie das Vertrauen in den Emittenten? Machst du es über die MMC? Wenn ja, sind Sie, importieren Sie Sie in die Vertrauenswürdigen Root-Zertifikate für „Mein Benutzerkonto“, „Service-Konto“, oder „Computer-Konto?“
  • Ich benutzte Sie MMC ein, und ich importiert es zu den Vertrauenswürdigen Root-Zertifikate, die unter „Computer-Konto“.
  • Sind Sie mit der client-Anwendung wie dich selbst? Wenn ja, könnten Sie versuchen, verwenden Sie die „Mein Konto“ speichern statt?
  • sorry für die Letzte Antwort. Das Zertifikat ist bereits unter „Mein Benutzerkonto“ – Filiale. Kann ich versuchen, es zu entfernen aus der „Computer-Konto“?

InformationsquelleAutor Eric Wu | 2016-01-26



2 Replies
  1. 1

    Ich es geschafft, erhalten das Zertifikat direkt importieren aus .p12-Datei.
    Der folgende code

    X509Certificate2 certificate = new X509Certificate2();
    certificate.Import(@"<FilePath>",password,X509KeyStorageFlags.DefaultKeySet);
    client.ClientCredentials.ClientCertificate.Certificate = certificate;
    
    client.ReturnSomeData();

    ist Sie erfolgreich, so ich ‚ m kleben mit dieser Lösung für jetzt. Es ist nicht ideal, aber zu sehen, wie dringend diese Angelegenheit ist, ich ändere es später.

    Immer noch nicht eine endgültige Antwort, obwohl dies kann helfen, wem auch immer, hat ein ähnliches problem.

    UPDATE

    Ich denke, dass ich herausgefunden habe, warum das beantwortet die Frage.
    So, wie es sich herausstellt, etwas ist immer noch falsch mit der Art, wie ich die Daten des Zertifikats aus dem Speicher. Direkt importieren Sie gewährleistet, dass das Zertifikat ist da, aber ein paar zusätzliche Schritte, die erforderlich waren, um den client zu verbinden.

    Ersten, die Festlegung der Transportmittel in der Bindung.

    <binding name="<bindingName>">
            <security mode="Transport" >
                <transport clientCredentialType="Certificate" />
            </security>
    </binding>

    Zweitens, sicherzustellen, dass die ServerCertificateValidationCallBack callback ist richtig Validierung. So schlimm, wie es scheint,

    ServicePointManager.ServerCertificateValidationCallback += 
        (sender, x509Certificate, chain, errors) => true;

    arbeiten FÜR NICHT-produktive ZWECKE.

  2. 0

    Für mich klingt es, wie es ist ein Vertrauens-Problem. Wenn der Drittanbieter-Dienst, der gab Sie Ihr Zertifikat ist wohl das CA-Zertifikat und nicht das server-Zertifikat selbst. Installieren Sie das Zertifikat im windows-Zertifikatsspeicher. Es gibt viel von tutorials wenn Sie sich für Sie.

    Wenn das Zertifikat, das Sie Euch gab, ist self-signed, dann müssen Sie Ihre CA-Zertifikat im windows-Zertifikatspeicher, so dass das system vertraut auf die Emittentin und damit das server-Zertifikat ist ebenfalls als vertrauenswürdig.

    Update: Hier ist ein weiteres link mit einem tutorial zum importieren eines Wurzel-CA und Vertrauen, denken Sie daran, dass es ist nicht genug, um das Zertifikat zu importieren, müssen Sie explizit Vertrauen, Blick auf die unteren Bilder auf dem link.

    • Danke für die Antwort, @GustavoRubio. Ich installiert das Zertifikat in den store, nach Anweisung durch den link, den Sie zur Verfügung gestellt. Der Fehler besteht weiterhin. Ich habe auch überprüft, wenn es selbst unterzeichnet, und der Ausstellername unterscheidet sich von der SubjectName. Nicht, dass es genügt zu sagen, ist es nicht?
    • Es hängt davon ab, in der Regel ein „self-signed“ – Zertifikat bedeutet, dass die CA (Certificate Authority) ist nicht einer von denen, die in den bekannten „Behörden“ von Browsern, die operativen Systeme und solche, wie verisign, thawte, comodo, etc. Wenn der Emittent des cert ist die Firma, die Sie arbeiten mit, als die Chancen sind es ist ein selbst-signiertes Zertifikat in der Tat. Wer ist der Emittent des cert, die dir gegeben wurden?
    • Gerade überprüft es. In der Tat, sind die Emittentin ist nicht eine „bekannte Behörde“. Ich war auf den ersten verwirrt, da der Emittent berichtet wurde, wie ein anderes Unternehmen, und ich habe gerade herausgefunden, es ist das gleiche (nur ein anderer ausgedachter name).
    • That being said, habe ich importiert (erfolgreich) es an Vertrauenswürdigen Root-Zertifikate der Behörden, so sollte es erkannt werden, als… vertrauenswürdigen Autorität, Recht?
    • Ja, aber Sie müssen auch, um es als „vertrauenswürdig“ sind, so dass, wenn Sie die Anforderungen der Kanal, der zieht das server-Zertifikat weiß, dass die Autorität vertrauenswürdig ist und Sie nicht die Warnung
    • Ich verstehe immer noch nicht wie kann ich es einstellen, um „vertrauenswürdigen“ andere als einfach importieren zu TRC. Können Sie weitere Anweisungen?
    • Bitte siehe meine aktualisierte Antwort.
    • vielen Dank für Sie Antwort. Ich habe alle Schritte, die Ihr zur Verfügung gestellten link und anschließend auf den remote-Zertifikat wurde für ungültig befunden. >.< Bedenkt, dass ich außer Kraft setzen können ServicePointManager.ServerCertificateValidationCallback, und ich habe (auch zu Testzwecken), und die Ausnahme verlagert The HTTP request is unauthorized with client authentication scheme 'Anonymous'. The authentication header received from the server was ''.", bedeutet das, dass die ursprüngliche Frage gelöst wurde?
    • Was Sie versuchen könnte, wird im browser die URI des webservice, müssen Sie Sie aufrufen, erhalten Sie möglicherweise eine Fehlermeldung vom Dienst, ja (Falsches gateway, Methode, etc.) aber wenn Sie das Kontrollkästchen Symbol in der browser-Leiste erhalten Sie noch die httpS-cert info als gültig, wenn Sie nicht dann noch etwas ist falsch mit der CA

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.