2017-05-01 49 views
1

我想找到一些與PSK(Pre-Shared Key Ciphersuites)相關的Poco SSL連接代碼片段。 但是我發現了一些總是使用證書(私鑰/公鑰)的例子。 是否可以支持PSK SSL/TLS?如果是的話,我該怎麼做? 還是有任何提示?Poco SSLManager和SecureStreamSocket支持SSL/TLS PSK(Pre-Shared Key Ciphersuites)嗎?

在此先感謝。

增加了一些CERT代碼片段供參考。 我可以用CERT(和privkey)來做到這一點,但我不知道如何爲PSK做到這一點。 這是我的CERT代碼片段。代碼爲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(); 
} 

我不覺得我可以設置或通過在psk_server_cb/psk_client_cb函數指針的任何API。

回答

0

是否有可能支持PSK SSL/TLS?如果是的話,我該怎麼做?或者有什麼提示?

是的,它可能與SSL/TLS有關。

這是如何在OpenSSL中使用預共享密鑰。你可以使用,比如說這個技術,TLS Client

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

從字符串創建的密碼列表是:

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

你可以殺死過弱者/傷員密碼:

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

導致:

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

我不知道如何在波科做同樣的事情。我似乎記得Poco中有一個源文件可以處理所有SSL/TLS。您應該能夠毫不費力地將上述更改應用於Poco資源。

+0

你好,jww 我確實使它與CERT(和privkey)一起工作。 我只是不知道如何用PSK做到這一點。 查看我的評論添加。 – zhengfish