在 Delphi 网络服务中使用 OpenSSL - 可用的协议和密码
Using OpenSSL in Delphi webservice - available protocols and ciphers
我对在我的 Delphi 网络服务中使用 OpenSSL 与 HTTPS 连接的可用密码有关感到有点困惑。
设置:
- 我的网络服务运行在客户的服务器上。 OpenSSL 安装在那里。 Web 服务使用 Indy(TIdHTTPWebBrokerBridge)和 OpenSSL DLL(带有 TIdServerIOHandlerSSLOpenSSL)来加载客户端的证书
- 我们的 Android/iOS 应用程序通过 HTTPS 连接到此网络服务
- 客户端已配置应用程序用户可以连接并访问我的网络服务的域和 IP。如果我们使用例如测试该域the SSLLabs server test 我们得到了受支持的密码和协议的概述(SSLLabs 甚至模仿来自设备和浏览器的握手并显示协商了哪些密码)。
问题:我的网络服务(结合 OpenSSL)是否必须do/can做任何事情来影响应用和网络服务之间 TLS 握手的可用密码?是否需要使用 OpenSSL 设置任何其他内容?
我认为答案是 'no',即只是服务器设置(在通过 Android/iOS 与应用程序握手时)确定使用可用服务器密码中的哪个密码。这是一个正确的假设吗?还是我错过了什么?
(事实上 ,我实际上对限制或扩展可用密码并不感兴趣,但客户坚持认为 "should be done" in/with webservice/OpenSSL 可以使其通信 "safely" 与应用程序。SSLLabs 测试表明他们的域 only 支持 TLS 1.0 和具有 RSA 密钥交换机制的密码,因此例如没有完美前向保密。对我来说,这看起来像无论如何都需要修复)。
备注:
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密钥(按结果文件名填写TIdServerIOHandlerSSLOpenSSL.SSLOptions.DHParamsFile)。如果您不仅需要 DHE,还需要 ECDHE 密码,您需要调用一些额外的 openssl api,例如参见 [=10=]。
我对在我的 Delphi 网络服务中使用 OpenSSL 与 HTTPS 连接的可用密码有关感到有点困惑。
设置:
- 我的网络服务运行在客户的服务器上。 OpenSSL 安装在那里。 Web 服务使用 Indy(TIdHTTPWebBrokerBridge)和 OpenSSL DLL(带有 TIdServerIOHandlerSSLOpenSSL)来加载客户端的证书
- 我们的 Android/iOS 应用程序通过 HTTPS 连接到此网络服务
- 客户端已配置应用程序用户可以连接并访问我的网络服务的域和 IP。如果我们使用例如测试该域the SSLLabs server test 我们得到了受支持的密码和协议的概述(SSLLabs 甚至模仿来自设备和浏览器的握手并显示协商了哪些密码)。
问题:我的网络服务(结合 OpenSSL)是否必须do/can做任何事情来影响应用和网络服务之间 TLS 握手的可用密码?是否需要使用 OpenSSL 设置任何其他内容?
我认为答案是 'no',即只是服务器设置(在通过 Android/iOS 与应用程序握手时)确定使用可用服务器密码中的哪个密码。这是一个正确的假设吗?还是我错过了什么?
(事实上 ,我实际上对限制或扩展可用密码并不感兴趣,但客户坚持认为 "should be done" in/with webservice/OpenSSL 可以使其通信 "safely" 与应用程序。SSLLabs 测试表明他们的域 only 支持 TLS 1.0 和具有 RSA 密钥交换机制的密码,因此例如没有完美前向保密。对我来说,这看起来像无论如何都需要修复)。
备注:
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密钥(按结果文件名填写TIdServerIOHandlerSSLOpenSSL.SSLOptions.DHParamsFile)。如果您不仅需要 DHE,还需要 ECDHE 密码,您需要调用一些额外的 openssl api,例如参见 [=10=]。