c++ - Poco SSLManager 和 SecureStreamSocket 可以支持 SSL/TLS PSK(预共享 key 密码套件)吗?

标签 c++ ssl openssl poco

我想找到一些使用 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/

相关文章:

线程中的C++方法。传递之间的区别:对象、对象的地址、对象的 std::ref

c++ - MySQL++ 的代码页相关问题

java - Google App Engine 和 HTTPS 策略

node.js - Nginx 反向代理 + ExpressJS + Angular + SSL 配置问题

ssl - Squeak-5.2 无法连接到 https ://github. com/

c - OpenSSL 上的 AES CTR 256 加密操作模式

c++ - EGL 在第一次 opengl 函数调用时崩溃

c++ - 检查 C++ 模板实例化

ssl - 使用SubjectAltName 'OtherName"在 openSSL 中创建 CSR 时出错

windows - openssl.exe不安装也能用吗?