首页 > 解决方案 > SSPI Schannel API 返回 0xAE06 或 CALG_ECDH_EPHEM 的未记录值

问题描述

我正在使用以下代码查询当前的 TLS 连接:

SecPkgContext_ConnectionInfo data;
QueryContextAttributes(&myHandle, SECPKG_ATTR_CONNECTION_INFO, &data);

它返回所有字段的正确结构:

typedef struct _SecPkgContext_ConnectionInfo {
  DWORD  dwProtocol;
  ALG_ID aiCipher;
  DWORD  dwCipherStrength;
  ALG_ID aiHash;
  DWORD  dwHashStrength;
  ALG_ID aiExch;
  DWORD  dwExchStrength;
} SecPkgContext_ConnectionInfo, *PSecPkgContext_ConnectionInfo;

根据 MSDN 文档:https ://docs.microsoft.com/en-us/windows/win32/api/schannel/ns-schannel-secpkgcontext_connectioninfo

但是,该字段aiExch的值为 0xAE06 我猜(来自 wincrypt.h 文件)定义为CALG_ECDH_EPHEM,但文档只提到了两个可能的值:

CALG_RSA_KEYX 0xA400   // RSA key exchange
CALG_DH_EPHEM 0xAA02   // Diffie-Hellman key exchange.

现在的问题:

  1. 0xAE06 / CALG_ECDH_EPHEM 是什么意思?
  2. 该字段aiExch还可以具有哪些其他值?

标签: sslwinapisspischannel

解决方案


ALG_ID

CALG_ECDH_EPHEM | 0x0000ae06 | 临时椭圆曲线 Diffie-Hellman 密钥交换算法。

[!Note]
仅通过 Cryptography API: Next Generation 支持此算法

Windows Server 2003 和 Windows XP:不支持此算法。

我不能告诉你还会出现什么。


推荐阅读