poniedziałek, 30 września 2013

Odrobina kryptografi

W przypadku, gdy zaistnieje potrzeba wykorzystania kryptografii, tj. zakodowania pewnych danych w aplikacji (z możliwością ich późniejszego odszyfrowania), powinno się unikać korzystania ze standardowych algorytmów szyfrujących dostępnych w .NET 2.0, ponieważ nie zapewniają one wystarczającego bezpieczeństwa.  W miarę bezpieczny, wydaje się algorytm  AES, jednak jak to w kryptografii bywa, skuteczna użyteczność poszczególnych algorytmów z biegiem czasu maleje.

Link, do działającego algorytmu w C#, można znaleźć na stackoverflow.com

Osobiście miałem okazję z niego korzystać w momencie, gdy jedynym skutecznym sposobem przekazania danych identyfikacyjnych z głównego okna aplikacji do popupa było wysłanie danych za pomocą querystringa (klient zażyczył sobie przeniesienie wszystkich plików typu BLOB z naszej bazy danych, do zewnętrznego syst. plików obsługiwanego przez firmę zewnętrzną z możliwością obsługi załączników do wniosku przez aplikacje trzecie).

Inne przydatne linki:
stackoverflow.com - how-to-start-learn-cryptography-with-c-sharp
http://stackoverflow.com - c-sharp-rsa-encryption-decryption-with-transmission



czwartek, 26 września 2013

Datatable to CSV (Excel)

Ost. zostałem poproszony o pomoc w pewnej sprawie. Sprawa dotyczyła... problemu z zapisem, a nast. odczytaniem dokumentu CSV na dysku. No cóż. Nie pozostało mi nic innego, jak zamienić FileStream na MemoryStream, a nast. przekazać go do obiektu klasy Attachment (pomijając zbędne zapisywanie załącznika na dysku). Przy okazji poprawiłem też metodę tworzenia samego załącznika (zapytanie SQL zwracało DataTable, który nast. był konwertowany na CSV). Całkiem sprytne i zgrabne rozwiązanie znalazłem na stackoverflow.com (convert-datatable-to-csv-stream).

Dlaczego więc piszę tutaj o tym? Ponieważ, w rozwiązaniu, które jest na stackoverflow, dokonałem kilku kosmetycznych zmian i postanowiłem je sobie tutaj zachować na przyszłość.

W klasie wywołującej kodowanie: "Windows-1250"
W klasie Extensions, w metodzie ToCSV znak oddzielający: ";"

środa, 25 września 2013

Konfiguracja IIS do hostowania aplikacji wykorzystującej SSL

Zgodnie z zapowiedzią, zaprezentowaną jakiś czas temu tutaj na blogu, po blisko 2 latach postanowiłem porzucić sharepointa i skoncentrować się na programowaniu w .NET. Jednym z zadań, jakie zostało mi postawionych, było stworzenie aplikacji webowej\web service, który jako swój element składowy będzie wykorzystywał inny web service zabezpieczony certyfikatem SSL.

Przystąpiłem więc do pracy. Pierwszą rzeczą, którą zrobiłem, to zainstalowałem certyfikat na komputerze (dwuklik na certyfikacie, a nast. 'next->next->wpisz hasło -> next->itd.').

Następnie stworzyłem aplikację webową, która wykorzystywała ten web service i wyświetlała odpowiednie dane na stronie .aspx. Pocz. visual studio nie chciało się u mnie podłączyć do web service (zapewne kwestia servera proxy w korpo), bo z 'iPlusa' wszystko chodziło tak jak należy.
Sposobem, aby zaczęło mi to działać w sieci korporacyjnej, okazało się włączenie programu Fiddler. Początkowo planowałem go użyć do zdiagnozowania problemu, natomiast... samo jego wykorzystanie rozwiązało mój problem na maszynie developerskiej (zapewne wynika to z faktu, że Fiddler w domyślnych ustawieniach wymusza autentykację).


Ok, aplikacja na maszynie developerskiej to jedno. Jeszcze trzeba to postawić na IIS, aby inni ludzie mieli do tego dostęp. O ile stworzenie puli aplikacji i wgranie tam strony było proste, o tyle sprawienie, aby nasza aplikacja mogą bez problemów wykorzystywać zewnętrzny web service z SSL przysporzyło mi nieco pracy (Error 403).


Rozwiązanie polega na tym, że należy stworzyć własny certyfikat i ustawić w ISS 'powiązania' (ang. 'bindings'). Jak to zrobić można przeczytać tutaj oraz tutaj (2 art. do czytania)


oraz upewnić się w ustawieniach puli aplikacji, że aplikacja będzie uruchamiana z konkretną tożsamością użytkownika (ponieważ ta konkretna aplikacja nie posiadała swojego typu 'logowania', to jest personifikowana jako konto admina w puli aplikacji).