Wątek przeniesiony 2017-11-27 13:03 z Newbie przez somekind.

Uwierzytelnianie ePUAP na podstawie danych z Profilu Zaufanego

0

@Dymb: Wielkie dzięki, spróbuję użyć tego u siebie. Mam nadzieję że pójdzie :)

Czy ktoś miał podobny błąd przy próbie wysłania żądania ArtifactResolve przez HttpClient: "javax.net.ssl.SSLHandshakeException: DH ServerKeyExchange does not comply to algorithm constraints" ? Chodzi o środowisko testowe - https://symulator.login.gov.pl/login-services/idpArtifactResolutionService

0

Da się z WK wyciągnąć adres email osoby, która się loguje? W starym PZ była usługa TpUserInfo, teraz w WK takiej usługi nie ma. Ktoś coś wie na ten temat?

0

@slavo210: Marne szanse, przy niektórych dostawcach tożsamości (dowód osobisty) w ogóle nie ma przecież takich danych. Sam protokół SSO do WK przewiduje 4 claimy (imię, nazwisko, pesel i data urodzenia) jako informacje o użytkowniku.

1

Co prawda to nie do końca WK, ale możesz użyć PZ do podpisania dokumentu i potem z samego podpisu wyciągnąć te dane.

0

@Dymb: PZ niby działa do końca roku, później mają wygasić ...

0

Autoryzacja za pomocą PZ będzie wygaszona. Samo podpisywanie dokumentów będzie cały jak najbardziej czas aktywne.

0

Żeby doprecyzować - to nie jest tak że "autoryzacja za pomocą PZ będzie wygaszona", bo przecież WK odwołuje się do PZ jako głównego dostawcy. Profil zaufany nie zniknie, ani nie zniknie logowanie przez PZ.

Formalnie jest po prostu tak że PZ nie będzie już akceptował zewnętrznych aplikacji tak jak do tej pory (nie będą wydawane certyfikaty do komunikacji), trzeba się federować z WK.

Co do wydobycia maila z podpisu dokumentu, upewniłbym się że w modelu zwracanym z podpisanym dokumentem jest email. Według mnie mail był w modelu getTpUserInfo ale nie w getSignedDocument.

0

Cześć
Trochę się gubię w temacie. Proszę o podpowiedź. Dopiero co zarejestrowałem się na testowym ePUAP. Z tego co widzę będzie już możliwości logowania SSO

screenshot-20210811142502.png

Ponadto po wysłaniu zgłoszenia otrzymuję
screenshot-20210811143537.png

Chciałem wykorzystać projekt OldMusicBox.ePUAP.Client do logowania i przesyłania dokumentów ale po wejściu /Home/Signed mam błąd 401

Dlaczego?

Formalnie jest po prostu tak że PZ nie będzie już akceptował zewnętrznych aplikacji tak jak do tej pory (nie będą wydawane certyfikaty do komunikacji), trzeba się federować z WK.

Jak to zatem pogodzić z powyższym projektem?
W jaki sposób mógłbym wykorzystać projekt OldMusicBox.EIH.Client do logowania a następnie podpisywania dokumentów?

Dzięki z góry za wszelkie sugestie.

4

@JacekStawicki360: Po kolei.

  1. Żeby złożyć wniosek o certyfikat na środowisku integracyjnym, konto musi mieć uprawnienia podmiotu publicznego. Tego nie da się zrobić inaczej niż przez ręczną interwencję administratorów COI, trzeba wysłać maila na adres pomocy środowiska integracyjnego ePUAP i napisać w mailu że się chce takie a takie konto uczynić kontem o uprawnieniach podmiotu publicznego. Bez tego nie da się wysłać wniosku o certyfikat.

  2. jak już się ma wniosek o certyfikat, trzeba ten certyfikat dodać do uprawnionych do wysyłania dokumentow na skrzynki, jest to opisane w instrukcji https://int.epuap.gov.pl/wps/wcm/connect/e2afff00-418b-4770-93ed-49d18e973a04/Instrukcja+administratora+konta+podmiotu+publicznego+v.3.0.pdf?MOD=AJPERES na stronie 31.

  3. potem najlepiej utworzyć sobie w tej konsoli administracyjnej (opisanej w wyżej zalinkowanej instrukcji) dwie różne skrytki i sobie samemu wysyłać ze skrytki moje_konto/A na skrytkę moje_konto/B. Dopiero potem testować wysyłanie na skrytki innych podmiotów (najlepiej mieć dwa różne konta o uprawnieniach podmiotów publicznych)

Jak to zatem pogodzić z powyższym projektem?

Do podpisania dokumentu nie trzeba logować użytkownika.

Chodzi o to że przepływ logowania i przepływ podpisania dokumentu to dwa różne przepływy.

Ten pierwszy po zalogowaniu zwracał aplikacji imię/nazwisko/PESEL i pokazywał na epuap tylko stronę logowania. I ten już nie jest obsługiwany.
Ten drugi oznacza konieczność wysyłania z aplikacji dokumentu na webservice ePUAP a potem przekierowanie na adres https który zwraca ePUAP. Witryna ePUAP sama wymusi logowanie użytkownika, ale potem wyświetli interfejs do podpisania dokumentu. Do aplikacji wraca podpisany dokument, z którego można wyciągnać imie/nazwisko/PESEL.

Od biedy można użyć przepływu podpisania dokumentu do logowania, wystarczyłoby wymusić podpisanie trywialnego dokumentu XML (na przykład z treścią "...zgadzam się na zalogowanie i użycie moich danych w aplikacji ...") - niektóre systemy są projektowane tak celowo żeby użytkownik nie mógł się logować jeśli wcześniej nie podpisze takiego dokumentu "zgody", natomiast formalnie - do przepływu logowania jest teraz WK.

0

Rok temu próbowałem zintegrować PZ, DT i ePUAP w Javie, ale utknąłem na tym że generował się inny assertion niż powinien. Widzę że trochę się pozmieniało od tamtego momentu.
Przeczytałem forum, czytałem kiedyś dokumentację, ale czy mógłbym prosić kogoś kto ogarnia temat, jak wygląda sprawa jeśli chcę przeprowadzić np. rejestrację i logowanie użytkowników przy pomocy kont Profiu Zaufanego albo kontami bankowymi (tak jak na stronie z Profilem Zaufanym)?
Wcześniej potrzebna była integracja PZ i DT, a na ePUAP trzeba było się zarejestrować, wygenerować certyfikat i uzyskać status podmiotu publicznego, a następnie poprzez tpGetUserInfo (czy jakoś tak) uzyskiwało się dane użytkownika (od takie podpisanie byle jakiej koperty SOAP.

O ile integracja (fakt że testowa) z EWUŚ była banalna i przyjemna, o tyle z PZ i DT szła mocno pod górkę. Będę wdzięczny za podpowiedź :)

2

@Emil Konończuk: wielokrotnie padało już w tym wątku - aktualnie do logowania użytkowników służy Węzeł Krajowy. Zacząć należy od przestudiowania oficjalnej dokumentacji https://mc.bip.gov.pl/interoperacyjnosc-mc/wezel-krajowy-dokumentacja-dotyczaca-integracji-z-wezlem-krajowym.html Mogę tylko dodać, że jeżeli integracja z DT ePUAP "szła pod górkę" to tu nie jest łatwiej niestety.

0

@Wiktor Zychla: Mhm, no to będę próbował, dzięki za podpowiedź :) Własnie jestem w trakcie czytania tej dokumentacji

0

@Wiktor Zychla:

bardzo dziękuję za fachową pomoc.

Mam jeszcze pytanie dot. certyfikatów. Mam takowy z ePuap i w dokumentacji napisałeś:

When the application is submitted it is placed in your account's Elektroniczna Skrzynka Podawcza where you can review it.
After it's reviewed by the COI, you are emailed with the actual certificate that you put in the keystore again using the keytool.
The result is a keystore (a .p12 file) that contains both the certificate and the private key.

Właśnie mam tu problem. O ile umieściłem go w keystore o tyle plik p12 nie ma klucza prywatnego i ten fragment kodu się wykłada:

screenshot-20210901131348.png

signingCertificate.PrivateKey jest nullem
Jak poprawnie wygnerować p12 ?

Dziękuję z góry za pomoc.

0

@JacekStawicki360: Zasobnik .p12 z certyfikatem do komunikacji nie może nie zawierać klucza prywatnego. Jeżeli tak jest, to znaczy że niepoprawnie użyto **keytool **do połączenia żądania certyfikatu z wystawionym przez COI żądaniem. To co opisałem na github to tylko wycinek tego co jest opisane w dokumentacji (epuap.gov.pl, Strefa urzędnika, POMOC, Dla integratorów, Instrukcja generowania żądania certyfikatu .... To jest PDF z dokładną instrukcją krok po kroku.

0

@Wiktor Zychla:

Dziękuję. Twoja pomoc jest nieoceniona.

Wracam z kolejnym pytaniem.
Z demo chcę wykonać "Signing an XML document with Profil Zaufany"
Wszystko fajnie tylko, że na stronie epuap mam do dyspozycji jedynie "Podpisz podpisem kwalifikowanym".

screenshot-20210902105552.png

Nie wiem dlaczego nie ma opcji podpisu Profilem zaufanym i np. bankiem.
Może wiesz co jest tego powodem?

Druga sprawa. Wykonaując "Single Sign-on through Profil Zaufany" od razu wyrzuca błąd HTTP Error 401.0 - Unauthorized
zamiast przekierować na /Account/Logon

0

@JacekStawicki360: nie wiem dlaczego jest tylko ten kafelek do podpisu podpisem kwalifikowanym, mogę się tylko domyślać że czegoś brakuje na koncie użytkownika (może konto nie jest potwierdzone, nie wiem). U mnie na tej demo apce są normalnie dwa przyciski, ten niebieski do podpisu profilem zaufanym a niżej link do podpisu podpisem kwalifikowanym.

To środowisko produkcyjne czy testowe tak się zachowuje?

Co do drugiego, w web.config pod system.web dopisz coś czego tam najwyraźniej brakuje

    <authentication mode="Forms">
      <forms loginUrl="/Account/Logon" />
    </authentication>

Dokomituję to kiedyś.

0

Czy ktoś próbował zintegrować system z węzłem krajowym w springu?
Użyłem Spring-Security-Saml2 i większość komunikacji udało się ogarnąć ale utknąłem na odszyfrowaniu klucza asercji z odpowiedzi SOAP.

2021-09-29 09:24:13.356 DEBUG 3052 --- [ XNIO-2 task-29] o.a.xml.security.algorithms.JCEMapper    : Request for URI http://www.w3.org/2009/xmlenc11#aes256-gcm
2021-09-29 09:24:13.356 DEBUG 3052 --- [ XNIO-2 task-29] o.a.xml.security.encryption.XMLCipher    : JCE Key Algorithm: AES
2021-09-29 09:24:15.024 DEBUG 3052 --- [ XNIO-2 task-29] o.a.xml.security.algorithms.JCEMapper    : Request for URI http://www.w3.org/2001/04/xmlenc#kw-aes256
2021-09-29 09:24:15.024 DEBUG 3052 --- [ XNIO-2 task-29] o.a.xml.security.encryption.XMLCipher    : JCE Algorithm = AESWrap
2021-09-29 09:24:16.327 ERROR 3052 --- [ XNIO-2 task-29] org.opensaml.xml.encryption.Decrypter    : Error decrypting encrypted key

org.apache.xml.security.encryption.XMLEncryptionException: No installed provider supports this key: sun.security.ec.ECPrivateKeyImpl
	at org.apache.xml.security.encryption.XMLCipher.decryptKey(XMLCipher.java:1495)
	at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:708)
	at org.opensaml.xml.encryption.Decrypter.decryptKey(Decrypter.java:639)
	at org.opensaml.xml.encryption.Decrypter.decryptUsingResolvedEncryptedKey(Decrypter.java:794)
	at org.opensaml.xml.encryption.Decrypter.decryptDataToDOM(Decrypter.java:535)
	at org.opensaml.xml.encryption.Decrypter.decryptDataToList(Decrypter.java:453)
	at org.opensaml.xml.encryption.Decrypter.decryptData(Decrypter.java:414)
	at org.opensaml.saml2.encryption.Decrypter.decryptData(Decrypter.java:141)
	at org.opensaml.saml2.encryption.Decrypter.decrypt(Decrypter.java:69)
	at org.springframework.security.saml.websso.WebSSOProfileConsumerImpl.processAuthenticationResponse(WebSSOProfileConsumerImpl.java:235)
	at org.springframework.security.saml.SAMLAuthenticationProvider.authenticate(SAMLAuthenticationProvider.java:88)
	at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:174)
	at org.springframework.security.saml.SAMLProcessingFilter.attemptAuthentication(SAMLProcessingFilter.java:92)

Co robię źle?

0

Dzień dobry. Czy do podpisania dokumentu profilem zaufanym potrzebuję certyfikat z kluczem prywatnym? Gdyż od organizacji dostałem certyfikat bez klucza prywatnego. Czy należy go jakoś wygenerować?

0

@Wiktor Zychla:

Wiktorze,
może będziesz wiedział co jest przyczyną tego, że lokalnie kod działa a po przeniesieniu do chmury już nie :(

 _clientCertificate = new X509Certificate2(bytes, p12password,  X509KeyStorageFlags.Exportable );               

nawet po zmianie na

 _clientCertificate = new X509Certificate2(bytes, p12password, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);
               

nie działa. Otrzymujemy błąd:

Exception Details: System.Security.Cryptography.CryptographicException: The specified network password is not correct.

Do tej pory nie mogę znaleźć rozwiązania problemu.

0

@JacekStawicki360: spróbuj upewnić się, że LoadUserProfile na puli aplikacji jest ustawione na true. Rozliczne problemy w obsłudze certyfikatow sprowadzają się do tego że bez dostępu do proflu Crypto API zwyczajnie nie działa. Natomiast, po pierwsze Exportable nie jest potrzebne. Po drugie - PersistKeySet też. Samo MachineKeySet bym próbował.

0

@Wiktor Zychla: Dziękuję

Kolejne pytanie: czy po wywolaniu WSDoreczyciel_Dorecz_SendDocument można w jakiś sposób pobrać numer UPD w odpowiedzi?

W sumie mam identyfikatorDokumentu/sprawy ale chciałbym móc w jakiś sposób umożliwić użytkownikowi sprawdzenie statusu.
Te dwa identyfikatory nie mają obecnie zastosowania.

Mamy mechanizm do podpisu kwalifikowanego i wysyłki dokumentów za pomocą Szafir i tam zwracany jest numer UPO na podstawie, którego
odpytujemy https://e-dokumenty.mf.gov.pl/api/Storage/Status/ wiadomo jaki jest status.

0

@Ziotek: do wszystkich wywołań tj addDocumentToSigning czy getSignedDocument potrzebujesz klucza prywatnego i certyfikatu. Klucz prywatny generujesz na etapie żądania certyfikatu i wyviągniesz go z .p12

0

Hej, mam pytanie dotyczące aplikacji pozwalającej podpisać dokument profilem zaufanym w C#. Rozumiem, że do tego muszę używać opcji TpSigning5 z węzła krajowego, czy mogę jeszcze używać innych wersji?
Inne pytanie jest takie, czy jak serwer zwraca mi błąd 500 (dla addDocumentToSigning w TpSigning opisanym w dokumentacji PZ), to znaczy że źle podpisuję żądanie xml? Da się jakoś sprawdzić czy jest to problem z certyfikatem, czy z samym XML? Mam certyfikat z kluczem prywatnym odpowiednio wczytanym do programu.

1

Dzień dobry,
Po wywołaniu var response = client.AddDocumentToSigning(document, urlSuccess, urlFailed, additionalInfo, out fault);
response jest nullem. Po przejściu dalej wyświetlają się takie błędy:

screenshot-20211117190408.png

Co może być przyczyną?
Z góry dziękuję za pomoc

1

@Sasser: pamiętam taki błąd w sytuacji gdy certyfikat wygasł (data ważności w certyfikacie była wcześniejsza niż bieżąca). Ale przychodzi mi do głowy trochę innych możliwych powodów - np. wysyłanie żądania nie na to środowisko (int zamiast prod lub odwrotnie). Możliwe też że ceryfikat w ogóle nie jest zarejestrowany po stronie odbiorcy. Jeśli to nie jest nic co daje się samodzielnie zdiagnozować, trzeba utworzyć zgłoszenie na email pomocy technicznej PZ, opisać wszystko - adres na ktory się wysyła, treść żądania, datę i poprosić o informację "z drugiej strony".

0

@tomakor549: podobnie jak wyżej - najprecyzyjniej odpowie dostawca usługi. Natomiast 500 zwykle oznacza jakiś fundamentalny błąd, coś w stylu zły typ żądania, brak jakichś wymaganych nagłówków itd.

0

@Wiktor Zychla: Dziękuję bardzo. Jeszcze jedno pytanie. Istnieje możliwość podpisania dokumentu .pdf? Funkcja addDocumentToSigning potrzebuje w parametrze dokument w postaci XML.
screenshot-20220105140956.png

Konwersja z .pdf na XML a później podpisanego XML na .pdf nie jest skuteczną drogą. Czy po prostu nie da się tego zrobić przy pomocy integracji?

Z góry dziękuję za pomoc.

0

Moim zdaniem nie da się podpisać pdf. Da się zrobić szablon pisma ogólnego z załącznikiem pdf i podpisać to pismo ogólne.

0

@Sasser: Moim zdaniem nie da się podpisać pdf. Da się zrobić szablon pisma ogólnego z załącznikiem pdf i podpisać to pismo ogólne.

2

Ku pamięci - z uwagi na prawdopodobne oczekiwanie migracji TpSigning do TpSigning5, zostawiam poniższą informację. Otóż, dokumentacja techniczna na WK, w dokumencie dotyczącym migracji,Załącznik 8, mówi że jakoby

W celu przełączenia systemu zewnętrznego zintegrowanego z usługą TpSigning systemu PZ wystarczy zmienić adres do usługi WS. 

No więc, nie wystarczy, ponieważ

a) format XML zwracany przez usługi różni się w przypadku TpSiging i TpSiging5 (w skrócie: TpSigning zwraca SOAP response jako <body><XXXReturn><XXX>... a TpSigning5 jako <body><XXX>, bez dodatkowego węzła (deserializatory mogą być na to czułe)
b) format podpisu zwracanego w getSignedDocument i verifySignedDocument jest całkowicie inny, więc usługa z TpSigning5 która dostanie podpisany dokument i spróbuje odczytać podpis tak jakby to był TpSigning, zobaczy że podpis jest pusty

(wskazówka na temat tego czym różni się podpis znajduje się w w/w dokumencie, w opisie verifySIgnedDocument)

1 użytkowników online, w tym zalogowanych: 0, gości: 1