2010-12-16 38 views
9

Muszę skonsumować usługę webową PHP, która ma certyfikat SSL. Moja biblioteka klasy .net 3.5 odwołuje się do usługi sieci Web za pomocą "Dodaj odwołania do usług" w Visualstudio 2010 (WCF w prawo?).Nie można ustanowić bezpiecznego kanału dla SSL/TLS z uprawnieniem '*'

Podczas wywoływania głównej metody usługi internetowej otrzymuję;

Nie można ustanowić bezpiecznego kanału dla SSL/TLS z uprawnieniem "{base_url_of_WS}".

Próbowałem dużo, jak

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

ale to nie będzie działać. Mam również certyfikat zainstalowany na mojej własnej maszynie.

* Dodatkowe informacje; Kiedy używam położenia wsdl w "Dodaj odniesienie do usługi", pojawia się ten sam błąd. Zanim spróbowałem, pracowałem ze statycznym kodem WSDL.

alt text

+0

Niezaufany certyfikat? – TomTom

+0

Wcale nie, dopiero co zostało wydane i podpisane. –

+1

Czy istnieje sposób, aby spróbować połączyć się z usługą internetową za pośrednictwem przeglądarki (np. Wyświetlać metadane usługi)? Pomoże to określić, czy problem dotyczy certyfikatów, czy w ramach WCF. –

Odpowiedz

8

Tak niezaufaną certyfikat może być przyczyną tego. Sprawdź ścieżkę certyfikatu dla usługi internetowej, otwierając serwis internetowy w przeglądarce i korzystając z narzędzi przeglądarki, aby spojrzeć na ścieżkę certyfikatu. Może być konieczne zainstalowanie jednego lub więcej pośrednich certyfikatów na komputerze wywołującym usługę sieciową. W przeglądarce możesz zobaczyć "Błędy certyfikatu" z opcją "Zainstaluj certyfikat", gdy będziesz dalej badać - może to być brakujący certyfikat.

Moje szczególnym problemem był pośredni certyfikat Geotrust Geotrust DV SSL CA brakuje po uaktualnieniu do serwera głównego w lipcu 2010

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

14

To był dokładny problem miałem zachodu. W innym artykule otrzymałem podpowiedź do zmiany konfiguracji. Dla mnie działa to:

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

Dzięki. Część transportowa była dokładnie tym, czego potrzebowałem! Naprawiono go po wielu godzinach testów. :) – KoalaBear

+0

Linia transportu również to dla mnie naprawiła. Mimo że ręcznie dodawałem poprawny, zaufany certyfikat do kodu, to nie rozpoznałbym go poprawnie, dopóki nie dodaję tego wiersza do pliku .config. Dzięki! – jozolo

+0

Ten sam problem, rozwiązany przez to ustawienie konfiguracyjne. Dzięki, spędziłem 3 godziny na tym –

2

Upewnij się, że uruchomiłeś program Visual Studio jako administrator.

2

Mieliśmy ten problem na nowym serwerze internetowym z stron .aspx wywołujących usługę sieciową. Nie udostępniliśmy użytkownikowi puli aplikacji uprawnień do certyfikatu komputera. Problem został rozwiązany po przyznaniu uprawnień użytkownikowi puli aplikacji.

0

Oto co ustalone dla mnie:

1) Upewnij się, że używasz Visual Studio jako Administrator

2) Zainstaluj i uruchom winhttpcertcfg.exe udzielenia dostępu

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

Polecenie jest podobny do poniżej: (wpisz swój temat certyfikatu i Name Service)

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

Należy wspomnieć, że winhttpcertcfg nie ma oficjalnego wsparcia dla Win 2008 R2 i nowszych, http://serverfault.com/questions/620013/importing-i-certificate-and-granting-permissions-on- windows-server-2012-r2 –

0

Gdyby ten sam błąd o kodzie:

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

rozwiązany przez dodanie hasła:

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

W przypadku pomaga ktoś inny, korzystając z nowego Microsoft Web Service Reference Provider tool, który jest standardem dla .NET i .NET Core musiałem dodać następujące linie do definicji wiążącej jak poniżej:

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

ta jest skutecznie tak samo jak odpowiedź Micha, ale w kodzie, ponieważ nie ma pliku konfiguracyjnego.

Powiązane problemy