2010-01-09 15 views
7

Jak opisano tutaj http://www.ddj.com/cpp/184401688compilable kodu C++ do wdrożenia bezpiecznego klienta SLL/TLS przy użyciu MS SSPI

nie mam czasu na pisanie to od podstaw.

zadawane i nie odpowiedział https://stackoverflow.com/questions/434961/implementing-ssl

pytanie brzmi:

szukam jakiegoś compilable pracy kod źródłowy, który implementuje MS SSPI (jak wspomniałem w wątku powyżej), proceduralne nie preferowane OOP.

Mam spojrzał na próbie projektów kod tutaj:

http://www.codeproject.com/KB/IP/sslclasses.aspx

Ale to jest C# OOP. Przekształcenie tego w kod C++ nie jest trywialne.

OpenSSL

rozmowy SCHANNEL śledzić GSS standardów API. Istnieją oczywiście pewne alternatywy - na przykład OpenSSL. Ten pakiet jest kompletną i dokładną implementacją protokołu, a dla kogoś, kto zna system UNIX, jest niewątpliwie najlepszym wyborem. Pakiet pierwotnie był przeznaczony dla społeczności UNIX, a jego skompilowanie opierało się na środowisku wykonawczym Perl, więc wymagana jest krzywa uczenia się dla programistów Windows, którzy nigdy nie pracowali z systemami typu UNIX.

Oprócz tego OpenSLL robi jakieś bardzo nietypowe rzeczy

Nikolai Po contibuted dużo kodu źródłowego compilable (www.coastrd.com) Miałem nadzieję znaleźć kogoś chętnego wykonać podobnie.

+1

Ty nie znajdzie tutaj odpowiedzi ... może tylko żart odpowiada kodem do pisania zakodowanego strumienia ssl zera do/dev/null – Frunsi

+1

Jakie jest pytanie? –

+1

Bump, złapałeś drugi głos w dół. Zadaj lepsze pytanie. Nie chcesz OpenSSL, to w porządku. Następnie użyj MS SSPI. Lub napisz własną implementację SSL/TLS. – Frunsi

Odpowiedz

22

Ten SSPI SChannel SMTPS przykład powinien skompilować i uruchomić w Visual Studio 2008 jak

http://www.coastrd.com/c-schannel-smtp

SChannel jest wdrożenie Microsoft API GSS że owija SSL/Protokół TLS.

Zalety wykorzystywania SChannel:

  • gory szczegóły są ekranowane od wywoływacza pod SSPI.
  • Bez dodatkowych ustawień jest wymagane do uruchomienia ostatecznej aplikacji:
  • SChannel jest integralną częścią systemu operacyjnego
  • W systemie Windows Me/2000/XP/... Platformy, SChannel jest zainstalowany i skonfigurowany domyślnie
  • Połączenia SChannel są zgodne ze standardami interfejsu API GSS.
  • Nie trzeba utworzyć/zainstalować wszystkie certyfikaty
  • BRAK INNYCH dll (1MB lub większy), aby statek i zainstalować

Kod powinien produkować sesję, która wygląda tak:

----- SSPI zainicjowany
----- WinSock przygotowanej
----- Poświadczenia przygotowanej
----- connectd Aby Server
70 bajtów uzgadniania da TA wysłany
974 bajtów danych uzgadniania otrzymał
182 bajtów danych uzgadniania wysłany
43 bajtów danych uzgadniania otrzymał
Handshake powiodła
----- Client Handshake Wykonywane
----- poświadczenia serwera uwierzytelniony

Server Temat: c = US, S = California, L = Mountain View, O = Google Inc, CN = smtp.gmail.com
Server emitenta: C = ZA, S = Western Cape, L = Cape Town, O = Thawte Consulting cc, OU = Dział usług certyfikacyjnych, CN = Thawte Premium Server CA, E = premia [email protected]

----- Łańcuch certyfikatów Wyświetlany
----- Server Certificate Verified
----- kontekst certyfikat serwera wydany

Protokół: TLS1
Cipher : RC4
Cipher siła: 128
Hash: MD5
siła Hash: 128
wymiana kluczy RSA
wymiana Key s trength: 1024
----- bezpieczne połączenie informacji
64 bajtów (szyfrowanie) danych aplikacyjnych otrzymanych
Odszyfrowane dane: 43 220 bajtów
mx.google.com ESMPT 6sm17740567yxg.66

Przesyłanie 7 bajtów tekstu jawnego:
ehlo

28 bajtów zaszyfrowanych danych przesyłanych
169 bajtów (szyfrowanie) danych aplikacyjnych otrzymanych
Odszyfrowane dane: 148 bajtów
250-mx.google. com w usłudze [22.33.111.222]
250 SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 Pipelining

Przesyłanie 7 bajtów tekstu jawnego:
QUit

28 bajtów zaszyfrowanych danych wysyłanych
69 bajtów (szyfrowanie) danych aplikacyjnych otrzymanych
odszyfrowanych danych: 48 bajtów
221 2.0.0 zamknięcie połączenia 6sm17740567yxg.66

----- Sesja SMTP Complete
Wysyłanie zamknij Powiadom
23 bajtów danych uzgadniania wysłany
----- odłączony od serwera
----- Rozpocznij Cleanup
----- Wszystko Sporządzono -----

+0

Jak wysłać duże za pomocą Schannel. próbowaliśmy, ale jeśli dane wzrosną ponad 16432, to się nie uda –

5

Powtórz po mnie: "Chcę użyć OpenSSL".

Ten problem jest stanowczo zbyt poważny i zbyt łatwy do zerwania, aby można go było za każdym razem rozwiązywać. Jeśli masz problem z OpenSSL, spróbuj zaadresować to poprzez dialog i łatki do OpenSSL.

(Nikt nie jest odporny na przykręcenie go, nawet Microsoft, czy rzeczywiście, OpenSSL. Użyj czegoś, którego źródłem może przeglądać i który zostanie załatana, gdy istnieją problemy. Za pomocą OpenSSL.)

+2

errr Nie, dziękuję. –

+3

Jeśli jesteś przyklejony do systemu Windows, to z pewnością musisz mieć konto MSDN i/lub umowę rozwojową. Jeśli tak, wydaje się, że jest to dokładnie to pytanie, na które płacimy Microsoftowi. –

+0

Prawie, to jest pytanie, na które ktoś, kto rzeczywiście opracował * rozwiązanie *, prawdopodobnie udzieli odpowiedzi. Zobacz moje komentarze OpenSLL powyżej –

0

Ile płacisz za taki kompilacyjny działający kod źródłowy? A może spodziewałeś się, że ktoś ci to da? Faceci OpenSSL już to zrobili. To brzydkie, ale cena jest właściwa.

+0

zobacz komentarz powyżej –

+0

Mój kod jest już dostępny. To ta sama cena, ale mam nadzieję, że uważasz ją za mniej brzydką. –

5

Być może this link to dobry punkt wyjścia. Zawiera faktycznie działający kod przykładowy wykorzystujący MS SSPI (choć wygląda na bardzo specyficzny dla MSVC, ale ok, jego okna tylko i tak). Zignoruj ​​przykłady OpenSSL ;-)

+0

Dziękuję. Zapomniałem o tym wspomnieć. Zobacz powyżej –

+0

Cóż, nie mogę tu dłużej pomóc. Ale nie powinno być zbyt trudno przekształcić je w imperatywny kod. – Frunsi