Witam, piszę właśnie aplikację serwerową (taką małą bazę danych). Niestety napotkałem mały problem podczas pisania obsługi połączenia szyfrowanego (używam biblioteki Crypto++).
Otóż, gdy klient prześle serwerowi pakiet "rsakey <tutaj_klucz_publiczny_klienta>" serwer rozpoczyna z tymże klientem połączenie szyfrowane (odpowiada oczywiście swoim kluczem publicznym). Gdy klient przesyła zaszyfrowane dane w trakcie takiej właśnie sesji zaszyfrowanej wszystko przebiega ok. Niestety gdy klient podczas połączenia szyfrowanego prześle serwerowi NIEZASZYFROWANE dane (co może się zdarzyć przez jakiś błąd w aplikacji klienta) to wywala mi cały serwer!
Próbowałem zamknąć procedurę deszyfrującą pakiety klienta w bloki try... catch lecz aplikacja nie łapie wyjątku tylko po prostu się wywala. Zna ktoś może jakiś sposób na zapobiegnięcie takiemu wywalaniu się?
Oto kod deszyfrujący pakiet:
std::string DecryptData(const std::string& data)
{
std::string ret;
try
{
CryptoPP::RSAES_OAEP_SHA_Decryptor decryptor(decryptionKey);
CryptoPP::StringSource(data, true,
new CryptoPP::PK_DecryptorFilter(CryptoPP::AutoSeededRandomPool(), decryptor,
new CryptoPP::StringSink(ret)));
}
catch(...)
{
return ""; //Tego wyjątku właśnie nie mogę złapać :(
}
return ret;
}