我对在Delphi webservice中使用OpenSSL与HTTPS连接的可用密码有点混淆。
设定:
问题:我的网络服务(与OpenSSL结合使用)是否必须做/可以影响应用程序和网络服务之间的TLS握手的可用密码?是否还需要使用OpenSSL设置其他内容?
我认为答案是“没有”,即只是服务器设置(通过Android / iOS与应用程序握手)确定从可用服务器使用哪个密码。这是正确的假设吗?或者我会错过什么?
(事实上,我实际上并不想限制或扩展可用的密码,但是客户坚持认为应该在webservice / OpenSSL中进行某些事情以便进行通信"安全"与应用程序.SSLLabs测试显示他们的域仅支持TLS 1.0和密码与RSA密钥交换机制,所以例如没有完美的前向保密。对我来说,这看起来像什么无论如何都需要修复。)
注意:
This SO question建议我可能要做点什么,但没有答案。
我发布了an earlier somewhat related question,但没有答案。
This SO post状态 OpenSSL在SSL握手期间尊重客户端的密码首选项,而不是服务器,这再次暗示我有些事情可以做?
我怀疑这个问题是否在这里适当的地方(也是因为Why we are not customer support),但由于这可能与更多的程序员有关,所以我决定把它放在SO上。
答案 0 :(得分:4)
您可以通过TIdServerIOHandlerSSLOpenSSL.SSLOptions.CipherList指定可用的密码(以及通过TIdServerIOHandlerSSLOpenSSL.SSLOptions.SSLVersions的SSL / TLS版本)。
如果您需要Perfect Forward Secrecy,必须使用openssl.exe创建DHParam密钥(按结果文件名填写TIdServerIOHandlerSSLOpenSSL.SSLOptions.DHParamsFile)。如果您不仅需要DHE,还需要ECDHE密码,则需要调用一些额外的openssl api,例如,请参阅a Support for Perfect Forward Secrecy in SSL with indy 10。