我对在 Delphi Web 服务中使用 OpenSSL 与 HTTPS 连接的可用密码有点困惑。
设置:
- 我的网络服务在客户端服务器上运行。 OpenSSL 已安装在那里。 Web 服务使用 Indy(TIdHTTPWebBrokerBridge)和 OpenSSL DLL(带有 TIdServerIOHandlerSSLOpenSSL)来加载客户端的证书
- 我们的 Android/iOS 应用通过 HTTPS 连接到此网络服务
- 客户端已配置应用程序用户可以连接并访问我的网络服务的域和 IP。如果我们使用例如测试该域the SSLLabs server test我们获得了受支持的密码和协议(protocol)的概述(SSLLabs 甚至模仿设备和浏览器的握手并显示协商的密码)。
问题:我的网络服务(与 OpenSSL 结合)必须/可以做些什么来影响应用程序和网络服务之间 TLS 握手的可用密码?使用 OpenSSL 是否还需要设置任何其他内容?
我认为答案是“否”,也就是说,服务器设置(在通过 Android/iOS 与应用程序握手时)决定使用可用服务器密码中的哪个密码。这是一个正确的假设吗?或者我错过了什么?
(事实上,我实际上对限制或扩展可用的密码并不感兴趣,但客户坚持认为在 Web 服务/OpenSSL 中“应该做一些事情”,以使其与应用程序“安全”地通信。 SSLLabs 测试表明,他们的域仅支持 TLS 1.0 和具有 RSA key 交换机制的密码,因此没有完美的前向保密。对我来说,这看起来无论如何都需要修复)。
注释:
This SO question表明我可能必须做点什么,但它没有答案。
我发布了an earlier somewhat related question ,但这没有答案。
This SO post状态OpenSSL 在 SSL 握手期间尊重客户端的密码首选项,而不是服务器的密码首选项,这再次表明我可以做一些事情?
我有些怀疑这个问题是否在这里合适的位置(也是因为 Why we are not customer support ),但由于这可能与更多程序员相关,所以我决定将其放在 SO 上。
<
最佳答案
您可以通过 TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList 指定可用密码(以及通过 TIdServerIOHandlerSSLOpenSSL.SSLOptions.SSLVersions 指定 SSL/TLS 版本)。
如果您想要完美的前向保密,您必须使用 openssl.exe 创建 DHParam key (按结果文件名填写 TIdServerIOHandlerSSLOpenSSL.SSLOptions.DHParamsFile)。如果您不仅需要 DHE,还需要 ECDHE 密码,您需要调用一些额外的 openssl api,请参阅 a Support for Perfect Forward Secrecy in SSL with indy 10例如。
关于web-services - 在 Delphi Web 服务中使用 OpenSSL - 可用协议(protocol)和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35916691/