我想找到一些使用 PSK(预共享 key 密码套件)的 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();
}
我找不到任何可以设置或传递 psk_server_cb/psk_client_cb 函数指针的 API。
最佳答案
Is it possible to support PSK SSL/TLS? if yes, how can I do this? or is there any hint?
是的,它可能与 SSL/TLS 相关。
这是在 OpenSSL 中使用预共享 key 的方法。您可以在 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 源。
关于c++ - Poco SSLManager 和 SecureStreamSocket 可以支持 SSL/TLS PSK(预共享 key 密码套件)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43716012/