You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Delphi Indy-SSL的DH-Pem密钥读取迁移至.NET 6.0 C#?

问题解答

一、Indy OpenSSL的默认设置与自动检测

  • Indy的TIdSSLIOHandlerSocketOpenSSL基于OpenSSL封装,大部分底层默认行为继承自OpenSSL,自身也有部分默认配置:
    • SSLOptions.Mode:默认值为sslmUnassigned,实际连接时会自动根据角色切换——作为客户端(如SMTP客户端)时自动转为sslmClient,作为服务器时转为sslmServer。
    • 证书验证:SSLOptions.VerifyMode默认是空数组(不验证对方证书),VerifyDepth默认0(不限制证书链验证深度),如果需要验证服务器证书,需手动将VerifyMode设置为[sslvrfPeer]。
    • 加密套件与密钥交换:未手动指定时,OpenSSL会自动根据配置的SSL版本(你这里指定了sslvTLSv1_2)选择兼容的默认加密套件;若指定了DHParamsFile,OpenSSL会在需要DH密钥交换时自动加载该文件的参数,无需额外触发。
    • 自动检测限制:Indy不会自动检测DH参数文件,必须手动设置SSLOptions.DHParamsFile才会加载;SSL版本若未指定,部分Indy版本会尝试协商最高可用版本,但你已明确指定sslvTLSv1_2,会强制使用该版本。

二、.NET 6.0中读取dhparam.par文件的方法

首先注意:你的现有代码误用了ECDiffieHellmanCng——dhparam.par是传统Diffie-Hellman(DH)参数,而非椭圆曲线DH(ECDH)参数,两者算法不同,需改用DiffieHellman类处理。

方法1:使用BouncyCastle NuGet包(推荐)

BouncyCastle是成熟的密码学库,可直接读取OpenSSL兼容的PEM格式DH参数,类似Indy对OpenSSL的封装:

  1. 安装NuGet包:Org.BouncyCastle
  2. 示例代码:
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
using System.IO;

// 读取dhparam.par文件内容
string pemContent = File.ReadAllText("dhparam.par");
using var reader = new PemReader(new StringReader(pemContent));
DhParameters bcDhParams = (DhParameters)reader.ReadObject();

// 转换为.NET原生DiffieHellman参数
var dh = DiffieHellman.Create(new System.Security.Cryptography.DHParameters
{
    P = bcDhParams.P.ToByteArrayUnsigned(),
    G = bcDhParams.G.ToByteArrayUnsigned(),
    L = bcDhParams.L // 若参数中包含密钥长度则设置,否则为null
});

// 后续可使用dh对象进行密钥交换操作

方法2:手动解析PEM与DER格式(无第三方库)

如果不想依赖第三方库,需手动处理PEM解码和ASN.1结构解析:

  1. 读取文件内容,去除-----BEGIN DH PARAMETERS-----和-----END DH PARAMETERS-----头尾,解码Base64得到DER格式字节。
  2. 解析DER的ASN.1结构(DH参数是包含p(模数)和g(生成元)的SEQUENCE)。
  3. 将解析出的p和g导入DiffieHellman。

注:手动解析ASN.1需要处理字节流的结构,代码复杂度较高,不推荐除非有特殊需求。

关于类似Indy的NuGet包

Org.BouncyCastle就是最接近的选择,它提供了高层API来处理各种OpenSSL兼容的密码学格式(包括PEM参数、证书、密钥等),功能覆盖Indy OpenSSL的大部分场景。

内容的提问来源于stack exchange,提问作者mih

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:52:41