我想找到一些与PSK(预共享密钥密码套件)的Poco SSL连接的代码片段。 但是我发现了一些总是使用证书(私钥/公钥)的例子。 是否可以支持PSK SSL / TLS?如果是的话,我该怎么做? 还是有任何提示?
提前致谢。
添加了一些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();
}
我找不到任何我可以设置的API或传递psk_server_cb / psk_client_cb函数指针。
答案 0 :(得分: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中做同样的事情。我似乎记得曾经在Poco中处理过所有SSL / TLS的源文件。您应该可以毫不费力地将上述更改应用于Poco源。