2017-05-01 5 views
1

Je veux trouver un code d'extrait de connexion SSL Poco avec PSK (Pre-Shared Key Ciphersuites). Cependant j'ai trouvé quelques exemples qui ont toujours utilisé le certificat (Privé/Clé Publique). Est-il possible de supporter PSK SSL/TLS? Si oui, comment puis-je faire cela? ou y a-t-il un indice?Poco SSLManager et SecureStreamSocket peuvent-ils prendre en charge SSL/TLS PSK (suites de clés pré-partagées)?

Merci d'avance.

Ajout d'un fragment de code CERT pour référence. Je peux le faire avec CERT (et privkey), mais je ne sais pas comment le faire pour PSK. Voici mon extrait de code pour CERT.

Code ======================= pour ==================== CERT =============

try 
{ 
    initializeSSL(); 
    SharedPtr<InvalidCertificateHandler> ptrHandler = new AcceptCertificateHandler(false); 
    Context::Ptr ptrContext = new Context(Context::CLIENT_USE, "certs/client01.key", "certs/client01.crt", "", Context::VERIFY_RELAXED, 9, true, "ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH"); 
    SSLManager::instance().initializeClient(0, ptrHandler, ptrContext); 

    SocketAddress sa(host, port); 
    SecureStreamSocket socket(sa); 

    socket.connect(sa); 

    std::string data("hello, world"); 
    socket.sendBytes(data.data(), (int)data.size()); 

    cout << "Message successfully sent" << endl; 

    uninitializeSSL(); 
} 

Je ne trouve aucune API que je peux définir ou passer le pointeur de fonction psk_server_cb/de psk_client_cb dans.

Répondre

0

Est-il possible de soutenir PSK SSL/TLS? Si oui, comment puis-je faire cela? ou y a-t-il un indice?

Oui, c'est possible avec SSL/TLS.

Comment utiliser les clés pré-partagées dans OpenSSL. Vous pouvez utiliser cette technique, disons, un TLS Client:

const char* const PREFERRED_CIPHERS = "PSK"; 
res = SSL_set_cipher_list(ssl, PREFERRED_CIPHERS); 
if(res != 1) handleFailure(); 

La liste de chiffrement créée à partir de la chaîne est:

$ openssl ciphers 'PSK' 
PSK-AES256-CBC-SHA:PSK-AES128-CBC-SHA:PSK-RC4-SHA:PSK-3DES-EDE-CBC-SHA 

Vous pouvez tuer-off les chiffrements faibles/blessés avec:

const char* const PREFERRED_CIPHERS = "PSK:!3DES:!RC4"; 
res = SSL_set_cipher_list(ssl, PREFERRED_CIPHERS); 
if(res != 1) handleFailure(); 

qui se traduit par:

$ openssl ciphers 'PSK:!3DES:!RC4' 
PSK-AES256-CBC-SHA:PSK-AES128-CBC-SHA 

Je ne sais pas comment faire la même chose dans Poco. Il me semble me souvenir qu'il y a déjà un fichier source dans Poco qui gère tous les SSL/TLS. Vous devriez être capable d'appliquer le changement ci-dessus aux sources Poco sans trop d'effort.

+0

Bonjour, jww Je l'ai fait fonctionner avec CERT (et privkey). Je ne sais tout simplement pas comment le faire avec PSK. Voir mes commentaires ajoutés. – zhengfish