Wpis z mikrobloga

Cześć Mirki, bardzo dużo w temacie pomógł mi @Koliat, ale chciałem jeszcze zapytać, może ktoś robił w taki sposób web service i ma z tym jakieś doświadczenie.

Przygotowuje wysyłkę danych przez web service (SOAP 1.2) przez HTTPS i muszę uwierzytelnić się certyfikatem. Otrzymałem więc od dostawcy usługi certyfikat *.p12 (PKCS12) z certyfikatem klienta (wystawiony dla XXX, wystawiony przez domena.pl), i tym, którym podpisuje go dostawca (wystawiony przez domena.pl, wystawiony przez domena.pl).

app.config i customBinding wygląda tak: https://pastebin.com/LRuxUF9S

Kiedy wczytam certyfikat klienta i próbuję wysłać dane, dostaję błąd:

The service certificate is not provided. Specify a service certificate in ServiceCredentials


Pierwszy problem:

- Który certyfikat powinienem ustawić jako ten od usługi? Ten, który był w pliku PKCS12 (wystawiony dla domena.pl) czy kompletnie inny, który powinienem dostać od dostawcy? On używa po stronie aplikacji certyfikatu z urzędu certyfikacji wystawionego dla "*.domena.pl".
- Jeśli komunikacja jest tylko w jedną stronę i tylko ja wysyłam dane, mogę wyłączyć sprawdzanie tego certyfikatu?

Spróbowałem użyć tego certyfikatu z mojego pliku *.p12, który był wystawiony dla domena.pl i podpisywał mój certyfikat klienta, ale dostaje inny błąd. W razie czego, endpoint jest na https://subdomena.domena.pl/

Identity check failed for outgoing message. The expected DNS identity of the remote endpoint was 'subdomena.domena.pl' but the remote endpoint provided DNS claim 'domena.pl'. If this is a legitimate remote endpoint, you can fix the problem by explicitly specifying DNS identity 'domena.pl' as the Identity property of EndpointAddress when creating channel proxy.


Drugi problem:

- Powinien używać tego certyfikatu, który wcześniej wspominałem? Powinien on być wystawiony dla 'subdomena.domena.pl' lub '*.domena.pl' zamiast 'domena.pl' i w tym przypadku jest to błąd dostawcy, który generował certyfikat?
- Powinienem poprosić o certyfikat wystawiony dla '*.domena.pl', którego dostawca używa po stronie usługi (wystawiony przez urząd certyfikacji)?

Będę wdzięczny za jakąkolwiek pomoc. ( ͡° ͜ʖ ͡°)

#programowanie #csharp #programista15k
  • 3
  • Odpowiedz
@a-kow: Rozumiem, że sama domena jest za poprawnym certifikatem (akceptowanym przez przeglądarke/curl itp), a jedynie subdomena nie jest? Sam generujesz certyfikat per subdomene (zakładam że nie masz wildcarda) i jedyny problem to taki, że nikt go nie akceptuje, a musi akceptować Twoja apka?
Czy przypadkiem nie pominąłeś kroku instalacji certyfikatu na maszynie, na której jest apka? (innymi słowy, opisane stepy tutaj: https://support.microsoft.com/en-us/help/901183/how-to-call-a-web-service-by-using-a-client-certificate-for-authentica ) ?
  • Odpowiedz
@maque: Dzięki za odpowiedź. Na tyle, na ile rozumiem - certyfikat raczej jest akceptowany, bo przy wpisywaniu URL endpointu w adres przeglądarki i wybraniu certyfikatu, uzyskuje dostęp. Podobnie przy teście na SoapUI i podpięciu *.p12 wszystko jest ok.

Ja sam certyfikatów nie generowałem. Otrzymałem jedynie PKCS12, po zaimportowaniu którego mam dwa certyfikaty (jeden w magazynie CA - wystawiony dla "domena.pl", drugi w Osobistych - wystawiony dla "firma X"). Nie mam wildcarda
  • Odpowiedz
via Wykop Mobilny (Android)
  • 0
@maque: Jeszcze próbowałem ustawić DNS na "identity" na endpoincie, ale on jest nadpisywany przez certyfikat usługi i jego właściwości.
  • Odpowiedz