我目前正在修补什么是有效的聊天服务器。由于我不想过多地暴露我的用户,我使用 LibreSSL 的 OpenSSL 库的分支为其添加了 TLS 加密。其余代码似乎工作正常,但我认为我没有正确地做证书。
我在服务器上有一个私有/公共证书,它不仅应该用于加密通信,还可以确保服务器确实是客户端想要与之交谈的对象。这是我无法弄清楚的部分:
如何将服务器的公钥提供给客户端?它需要它来验证它正在与正确的服务器通信。还是我应该做其他事情,可能涉及根 CA 的证书?有 API 可以提供吗?我可以将公钥与可执行文件打包为
.pem
,但我找不到告诉 OpenSSL 用于客户端请求的公共服务器密钥或根 CA 的 API。如何获取客户端的系统证书?现在我只是在一个
.pem
文件中创建了一个,但我真的不想为每个下载客户端的用户构建一个具有唯一证书的新下载。当然有一种方法可以通过一些 OpenSSL API 获取“当前用户的证书”或自动生成一个用于此用途的证书?
如果有人能指出我要使用的正确 API,那就太好了!我还会提供线索、指向类似问题的链接、教程、针对 OpenSSL-crypto-beginners 的书籍的指针、答案或示例代码。
目前,我同时使用SSL_CTX_use_certificate_file()
和SSL_CTX_use_PrivateKey_file()
在客户端和服务器程序中设置证书。您可以在上面链接的 Github 聊天服务器存储库中看到代码,在eleven_session.cpp