Próbuję uzyskać dostęp do publicznie hostowanej usługi WWW SOAP (nie WCF) za pośrednictwem protokołu HTTPS i pojawia się błąd, którego nigdy wcześniej nie widziałem. Po pierwsze, tutaj są fakty:Jak zmusić klienta WCF do wysłania certyfikatu klienta?
- Ta usługa wymaga certyfikatów klienta. Mam certyfikat podpisany przez ten sam urząd certyfikacji co certyfikat serwera.
- Wiem, że adres URL jest dostępny, ponieważ mogę go uruchomić w Internet Explorerze. IE wyświetla okno "wybierz certyfikat", a jeśli go wybiorę (i zignoruje błąd serwera-nazwa-hosta-nie-zgodności-certyfikatu), uruchomi się i da mi błąd HTTP 500.
- Jeśli otworzę witrynę w Chrome, po wybraniu certyfikatu i zignorowaniu błędu otrzymam zwykły komunikat o błędzie dotyczący działania WSA = null.
- Jeśli otworzę witrynę w FireFox, po zignorowaniu błędu otrzymam stronę o tym, że serwer nie mógł zweryfikować mojego certyfikatu. Nigdy mnie o to nie poprosił, więc ma to sens.
Teraz wyjątek:
Error occurred while executing test 12302: System.ServiceModel.Security.SecurityNegotiationException: Could not establish secure channel for SSL/TLS with authority 'ihexds.nist.gov:9085'. ---> System.Net.WebException: The request was aborted: Could not create SSL/TLS secure channel.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
Mam prześledzić interakcji z WireShark, ale ponieważ nie jestem ekspertem w protokole TLS, mogę być brakuje wskazówek, co się dzieje . Tu jednak jest to, co ja widzę:
- C -> S Client Witam
- Zawiera takie rzeczy liczbę losową, data/czas, cypher apartamenty obsługiwane itp
- S - > C Server Witam, Certyfikat, żądania certyfikatu serwera Witam Sporządzono
- Zawiera certyfikat serwera, a wniosek o certyfikat klienta
- C -> S Certyfikat Client Key Exchange, Change Cipher Spec, Encrypted Handshake Wiadomość
- Oto interesująca część - Pierwsza część tego pakietu jest handshake certyfikatu, gdzie zakładam certyfikat klienta będzie być, ale nie ma żadnych certyfikatów (długość certyfikatów: 0).
- S -> C Alert (Level: Fatal Opis: Bad certyfikatu)
- No tak, nie było świadectwo wysłana.
My wiążący jest skonfigurowana w następujący sposób:
<binding name="https_binding">
<textMessageEncoding />
<httpsTransport useDefaultWebProxy="false" />
</binding>
Moje zachowanie jest skonfigurowana w następujący sposób:
<behavior name="clientcred">
<clientCredentials>
<clientCertificate findValue="69b6fbbc615a20dc272a79caa201fe3f505664c3" storeLocation="CurrentUser" storeName="My" x509FindType="FindByThumbprint" />
<serviceCertificate>
<authentication certificateValidationMode="None" revocationMode="NoCheck" />
</serviceCertificate>
</clientCredentials>
<messageInspector />
</behavior>
Mój punkt końcowy jest skonfigurowany do korzystania zarówno wiązania i zachowanie. Dlaczego WCF odmawia wysłania certyfikatu, gdy tworzy połączenie https?
Nienawidzę WCF tak bardzo. To rozwiązanie sprawdziło się, dzięki hałdom - ale to wszystko jest takie skrzypiące. Zabij mnie. – robnick