如何在 Indy 10 中启用完美前向保密?

2023-12-14

我在 Delphi 2010 中使用 OpenSSL 1.0.2o 和 Indy 10.6.2。

这是我到目前为止所做的:

procedure TServerForm.FormCreate(Sender: TObject);
var
  LEcdh: PEC_KEY;
  FSslCtx: PSSL_CTX;
  SSL: PSSL;
  FSSLContext: TIdSSLContext;
begin
  //mServer.Active := True;
  FSingle:=TCriticalSection.Create;
  appdir := ExtractFilePath(ParamStr(0));
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.RootCertFile := appdir + 'EccCA.pem';
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.KeyFile := appdir + 'EccSite.key';
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.CertFile := appdir + 'EccSite.pem';
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.DHParamsFile := appdir + 'dhparam.pem';
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.Method := sslvTLSv1_2;
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_2];
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.CipherList := 
    //'ECDHE-ECDSA-AES128-GCM-SHA256:' +
    'ECDHE-RSA-AES128-GCM-SHA256:' +
    //'ECDHE-RSA-AES256-GCM-SHA384:' +
    //'ECDHE-ECDSA-AES256-GCM-SHA384:' +
    //'DHE-RSA-AES128-GCM-SHA256:' +
    //'ECDHE-RSA-AES128-SHA256:' +
    //'DHE-RSA-AES128-SHA256:' +
    //'ECDHE-RSA-AES256-SHA384:' +
    //'DHE-RSA-AES256-SHA384:' +
    //'ECDHE-RSA-AES256-SHA256:' +
    //'DHE-RSA-AES256-SHA256:' +
    'HIGH:' +
    '!aNULL:' +
    '!eNULL:' +
    '!EXPORT:' +
    '!DES:' +
    '!RC4:' +
    '!MD5:' +
    '!PSK:' +
    '!SRP:' +
    '!CAMELLIA';

  MServer.IndyServer.IOHandler := IdServerIOHandlerSSLOpenSSL1;
  mServer.Active := True;
  //FSSLContext := TIdSSLContext(IdServerIOHandlerSSLOpenSSL1.SSLContext);
end;

This不起作用。

Failure

有人有好的建议吗?


首先,请确保将 Indy 版本更新到最新的 SVN 快照。之后之前的讨论我补充说,我在 Embarcadero 论坛上与 Roberto Frances 进行了交流SSL_CTRL_SET_ECDH_AUTO and SSL_CTX_set_ecdh_auto()去印地IdSSLOpenSSLHeaders unit.

因此,其他讨论中的代码中唯一缺少的部分是定义TMyIdSSLContext,我认为这很简单:

type
  TMyIdSSLContext = class(TIdSSLContext)
  end;

自从TIdSSLContext.fContext成员被声明为protected, 申报单位TMyIdSSLContext获得访问权TIdSSLContext的受保护成员。因此,您的代码可以如下所示:

type
  TMyIdSSLContext = class(TIdSSLContext)
  end;

procedure TServerForm.FormCreate(Sender: TObject);
var
  FSSLContext: TMyIdSSLContext;
begin
  FSingle := TCriticalSection.Create;
  appdir := ExtractFilePath(ParamStr(0));
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.RootCertFile := appdir + 'EccCA.pem';
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.KeyFile := appdir + 'EccSite.key';
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.CertFile := appdir + 'EccSite.pem';
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.DHParamsFile := appdir + 'dhparam.pem';
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.Method := sslvTLSv1_2;
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.SSLVersions := [sslvTLSv1_2];
  IdServerIOHandlerSSLOpenSSL1.SSLOptions.CipherList := 
    //'ECDHE-ECDSA-AES128-GCM-SHA256:' +
    'ECDHE-RSA-AES128-GCM-SHA256:' +
    //'ECDHE-RSA-AES256-GCM-SHA384:' +
    //'ECDHE-ECDSA-AES256-GCM-SHA384:' +
    //'DHE-RSA-AES128-GCM-SHA256:' +
    //'ECDHE-RSA-AES128-SHA256:' +
    //'DHE-RSA-AES128-SHA256:' +
    //'ECDHE-RSA-AES256-SHA384:' +
    //'DHE-RSA-AES256-SHA384:' +
    //'ECDHE-RSA-AES256-SHA256:' +
    //'DHE-RSA-AES256-SHA256:' +
    'HIGH:' +
    '!aNULL:' +
    '!eNULL:' +
    '!EXPORT:' +
    '!DES:' +
    '!RC4:' +
    '!MD5:' +
    '!PSK:' +
    '!SRP:' +
    '!CAMELLIA';

  MServer.IndyServer.IOHandler := IdServerIOHandlerSSLOpenSSL1;
  mServer.Active := True;

  FSSLContext := TMyIdSSLContext(IdServerIOHandlerSSLOpenSSL1.SSLContext);
  SSL_CTX_set_ecdh_auto(FSSLContext.fContext, 1);
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Indy 10 中启用完美前向保密? 的相关文章

  • 无法将 HAProxy 实现为 HTTPS 的转发代理

    我正在尝试使用 HAProxy 作为转发代理 它适用于 HTTP 但不适用于 HTTPS 下面是我的 HTTP HAProxy 配置 listen forward http proxy bind 80 http request do res
  • IE 未在 TLS 相互身份验证中发送客户端证书

    我正在尝试与第三方 API 建立 TLS 相互身份验证 客户端证书配置良好 当我尝试通过 Chrome 访问端点 url 时 它工作正常 Chrome 要求在消息框中确认证书 当我这样做时 页面会显示其内容 当我尝试使用 IE 执行同样的操
  • 更好的德尔福印地 2007

    使用 Delphi 2007 附带的默认 indy10 或将其升级到最新快照版本哪个更好 为什么 谢谢 始终保持最新版本 它包含错误修复 如果您报告 Delphi 提供的库存版本存在问题 您将得到的第一个建议是升级到最新版本 因为您的错误可
  • fiddler2无法生成证书

    我正在使用 Fiddler2 或尝试 捕获访问 https Web 服务的 Windows 桌面小工具的 SSL 流量 它曾经可以工作 然后几天前就停止了 总是出现以下错误 Unable to Generate Certificate Cr
  • 在 Windows 上向 Apache Bench 添加 https 支持

    我的 Windows 7 计算机上有 Apache 服务器 2 2 15 并且我想在使用 https 的服务器上运行 Bench 但当我跑步时ab myopts https example com https example com I g
  • 为什么 Nginx 以相反的顺序提供客户端 SSL DN?

    我很好奇为什么某些 Web 服务器 例如 Nginx 以相反的顺序提供客户端 SSL DN Web 应用程序将 DN 发布到 Java Web 服务 该服务尝试创建 Javajavax naming ldap LdapName http d
  • 为什么 PHP 中加密的内容与 Ruby 中加密的相同字符串不匹配?

    这是我的要求 我需要使用 AES 加密 包括随机 iv 对 PHP 中的字符串进行加密 对其进行 Base64 编码 然后对其进行 URL 编码 以便可以将其作为 URL 参数传递 我试图在 PHP 和 Ruby 中获得相同的结果 但我无法
  • 如何使用 OpenSSL 从 .cer 中提取 RSA 公钥并将其存储在 .pem 中?

    我需要从一个文件中提取公钥 RSA cer文件 我希望提取密钥并将其存储在 pem文件 这样我就可以使用它的值来加密值js加密 https github com travist jsencrypt 以下命令将转换 cer to pem op
  • 使用 Ruby OpenSSL 库时公钥无效

    我正在尝试在 Ruby 中生成 RSA 密钥对 主要使用来自这篇博文 http stuff things net 2009 12 11 generating rsa key pairs in ruby 这是我稍微修改过的代码 def gen
  • Mechanize 收到“Errno::ECONNRESET:连接由对等方重置 - SSL_connect”

    我无法让 Mechanize 加载曾经正常工作的页面 它确实失败了 并显示Errno ECONNRESET Connection reset by peer SSL connect信息 关于我应该尝试什么或我应该查看的细节有什么建议吗 请参
  • Lion:RVM 安装 rubies 时出现问题 - 与 openssl 相关的问题

    我很绝望 现在两天 天都在摆弄以下问题 但没有解决方案 更新 Lion 后 我想使用最新版本的 rvm 安装额外的 rubies 这是我之后调用捆绑器时发生的情况 Users felix rvm rubies ruby 1 9 2 p290
  • 从 X.509 证书中提取 PEM 公钥

    我已经创建了一个包含公钥 DER 文件的证书 但我现在需要 PEM 格式的公钥用于不同的平台 目的是使用相同的公钥 我使用创建它iOS 中的 RSA 加密并使用 PHP 解密 http jslim net blog 2013 01 05 r
  • 使用 Android Volley 发出 HTTPS 请求

    我正在尝试使用以下代码发出 https 请求 RequestQueue queue Volley newRequestQueue getApplicationContext request new Request
  • PHP - 如何查看服务器是否支持 TLS 1.0?

    我正在编写一个简单的检查器 您可以在其中输入一个 URL 该检查器将检查输入的 URL 是否使用 TLS 1 0 1 1 或 1 2 本质上 我想显示一条消息 Yoursite com 正在使用 TLS 1 0 建议禁用此功能 问题是 只有
  • 当建立 TLS / LDAP 或 TLS / HTTP 连接时,线路上会发生什么?

    我正在重新表述我的问题 希望能得到更好的答复 我问了类似的问题这里服务器故障 https serverfault com questions 178561 what are the exact protocol level differen
  • 使用openssl从服务器获取证书

    我正在尝试获取远程服务器的证书 然后可以将其添加到我的密钥库中并在我的 Java 应用程序中使用 一位高级开发人员 正在度假 告诉我我可以运行这个 openssl s client connect host host 9999 获取转储的原
  • 如何修改s_client的代码?

    我正在玩apps s client c in the openssl源代码 我想进行一些更改并运行它 但是在保存文件并执行操作后 我的更改没有得到反映make all or a make 例如 我改变了sc usage函数为此 BIO pr
  • 提高批量请求的野兽内存使用率

    我运行这个boost beast 客户端 异步 ssl http www boost org doc libs develop libs beast example http client async ssl http client asy
  • 使用node.js/Express从HTTP重定向到HTTPS

    有什么方法可以更改我的 Web 应用程序以侦听 HTTPS 而不是 HTTP 我正在使用node js express 我需要它来侦听 HTTPS 因为我正在使用地理定位 而 Chrome 不再支持地理定位 除非从 HTTPS 等安全上下文
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在

随机推荐

  • 从 URL 中提取 TLD,并对每个 TLD 文件的域和子域进行排序

    我有一个包含数百万个网址的列表 我需要提取每个网址的 TLD 并为每个 TLD 创建多个文件 例如 收集所有以 com 作为 tld 的 url 并将其转储到 1 个文件中 将 edu tld 转储到另一个文件中 依此类推 此外 在每个文件
  • SignalR 无法启动连接

    我有一个 Angular 应用程序以及使用 SignalR 的 ASP NET Core 2 2 后端 启动连接时 我收到错误 Error Failed to complete negotiation with the server Err
  • 如何使用VBA获取google搜索的第一个搜索结果链接?

    在我的日常任务中 我目前必须搜索大量产品并收集有关这些产品的信息 所以我的想法是在谷歌上搜索产品 并通过从产品标题部分提取数据来从第一个搜索结果中获取信息 并对许多产品进行循环 到目前为止 我的代码如下 Sub SkuAutomation
  • 将 div 隐藏在其父项后面? [复制]

    这个问题在这里已经有答案了 div class content wrapper div class popup div class close div div div content wrapper 是相对定位的 包含所有页面内容 不仅仅是
  • grep 文件匹配特定列

    我只想保留其中的行results txt与中的 ID 匹配uniq txt基于第 3 列中的匹配results txt 通常我会使用grep f uniq txt results txt 但这并没有指定第 3 列 uniq txt 9606
  • CSS 中的 SVG DataURI 在 Firefox 中不起作用

    body background url data image svg xml utf8
  • 拉入 Mercurial 之前自动搁置(使用 TortoiseHG)?

    我不想提交一些已更改的文件 例如 web config 在拉取并更新到新的变更集之前 我必须将它们搁置起来 拉取和更新后 我必须取消搁置它们 我目前正在使用 TortoiseHG 有没有任何扩展可以自动执行此操作 我建议其他一些东西 您可以
  • 创建数组变量

    我想创建这种输出 var s1 Sony 7 Samsung 5 LG 8 这样我就可以用它来将我的图表作为变量传递 从我的ajax结果中得出 success function data code to extract the data v
  • C# 为所有可选参数提供值

    我正在读一本 C 书籍 正在阅读命名参数和可选参数一章 我读过一个项目符号 上面写着 如果存在多个可选参数并且指定了一个值 一 所有前面的可选参数也必须提供值 您能给我一个例子吗 因为我无法从代码中重现上述语句 以此方法签名为例 publi
  • 从使用 JWS 下载的 jar 文件中提取一些内容

    我试图从使用 java webstart 下载的 jar 文件中提取一些文件 下面的代码用于定位 jar 并启动文件系统 1 final ProtectionDomain domain this getClass getProtection
  • 如何在 UIView 中加载 xib 文件

    我一直在到处寻找 但到目前为止没有任何对我有用的东西 基本上我想要一个名为 rootView xib 的 xib 文件 在其中我想要一个 UIView 让我们称之为 containerView 它只占据屏幕的一半 所以会有常规视图和新视图
  • iframe 和父站点之间如何通信?

    iframe 中的网站不在同一个域中 但两者都是我的 我想在iframe和父站点 是否可以 对于不同的域 无法直接调用方法或访问 iframe 的内容文档 你必须使用跨文档消息传递 父级 gt iframe 例如在顶部窗口中 myIfram
  • Laravel 集团按月记录和总价

    您好 我正在尝试按月份对记录进行分组并对订单中的价格进行求和 我尝试过这样的事情 order Order select DB raw sum price as sums gt groupBy function date return Car
  • 带有 Tomcat 9 的 jakarta.servlet - 未找到问题 [重复]

    这个问题在这里已经有答案了 我有一个使用 eclipse 和 tomcat 9 服务器运行的应用程序 当我运行应用程序时 它会在浏览器中打开 index html 页面 但在索引页面内调用的 API 会出现 404 状态错误 我尝试了各种
  • 通过鼠标点击删除节点,networkX,python 2.7

    我用Python 2 7用networkX编写了一个程序 它绘制了一棵带有黑白节点的树 这是一个最小的例子 import networkx as nx import matplotlib pyplot as plt import numpy
  • 如何立即调用 C++ lambda?

    我继承的类的构造函数需要传入一个重要的对象 与此类似 MyFoo MyFoo SomeBase complexstuff return The complexstuff没有什么关系MyFoo 所以我不想将其传递进去 而不是编写某种返回的一次
  • 更改 HTML 文本框:覆盖而不是插入为用户类型

    我正在开发一项允许编辑文本的服务 为了在此过程中帮助用户 我想允许用户将文本字段设置为覆盖模式 就像在 Word 等中一样 如何将 HTML 文本框的行为更改为覆盖而不是插入文本当用户输入时 例如 如果文本框包含以下文本 This is a
  • 有什么方法可以根据类模板类型初始化此变量吗?

    我有课stats带有模板 这样就可以灵活使用 不过 我对模板很陌生 我认为它们的重点是使其在用户周围灵活 所以我觉得我做错了什么 因为我撞到了一堵小墙 include
  • SQL,关于连接的问题

    我在 sql 2012 中有两个表 名称和产品 其结构 name id int increment name1 nvarchar 50 prod id int increment products nvarchar 50 id name i
  • 如何在 Indy 10 中启用完美前向保密?

    我在 Delphi 2010 中使用 OpenSSL 1 0 2o 和 Indy 10 6 2 这是我到目前为止所做的 procedure TServerForm FormCreate Sender TObject var LEcdh PE