Rozpocząłem prace zmierzające do wsparcia Węzła Krajowego w bibliotece klienckiej SAML2/ePUAP. Podstawą pracy jest dokument Instrukcja integratora DU opublikowany przez COI.
Po rozwiązaniu problemów z SAML2 przy integracji z ePUAP, integracja z WK wnosi kolejny poziom wyzwania. W szczególności:
Węzeł Krajowy wymusza kryptografię opartą na certyfikatach eliptycznych (ECDSA). Problem jest taki że o ile biblioteka standardowa .NET obsługuje szyfrowanie/deszyfrowanie na takich certyfikatach, SignedXml już nie - w metodzie ComputeSignature można wprost podejrzeć if-a, który sprawdza typ certyfikatu i jeśli to nie jest RSA, wyrzuca wyjątek. Jest to poważne zaniedbanie!, z którym niełatwo sobie poradzić (kto ma ochotę na napisanie samodzielnie implementacji podpisywania XMLi, która obsługuje wszystkie niuanse, transformaty, itd. i przy okazji dodaje obsługę certyfikatów eliptycznych?)
Węzeł Krajowy upraszcza komunikację bo nie wymaga dodatkowego kroku z wołaniem usługi, ale za to - asercje o użytkowniku zwraca w postaci zaszyfrowanej. Problem w tym że na tę chwilę nie mam pojęcia jak to chwycić w C#
Na dzień dzisiejszy jest kawałeczek sukcesu, taki pierwszy set z trzech. Mianowicie, potrafię wygenerować sygnaturę tak żeby AuthnRequest był poprawnie obsłużony. Jeśli to komuś pomoże, to używam Bouncy Castle i uwaga - wbrew intuicji nie można używać signera SHA256WITHECDSA tylko SHA-256withPLAIN-ECDSA - straciłem na tym kilka godzin.
W kolejnych dniach dalsza część pojedynku...