SCHANNEL_CRED结构 (schannel.h)

注意

SCHANNEL_CRED 结构已弃用。 应改用 SCH_CREDENTIALS

SCHANNEL_CRED 结构包含 Schannel 凭据的数据。

语法

typedef struct _SCHANNEL_CRED {
  DWORD          dwVersion;
  DWORD          cCreds;
  PCCERT_CONTEXT *paCred;
  HCERTSTORE     hRootStore;
  DWORD          cMappers;
  _HMAPPER       **aphMappers;
  struct         _HMAPPER;
  DWORD          cSupportedAlgs;
  ALG_ID         *palgSupportedAlgs;
  DWORD          grbitEnabledProtocols;
  DWORD          dwMinimumCipherStrength;
  DWORD          dwMaximumCipherStrength;
  DWORD          dwSessionLifespan;
  DWORD          dwFlags;
  DWORD          dwCredFormat;
} SCHANNEL_CRED, *PSCHANNEL_CRED;

成员

dwVersion

设置为 SCHANNEL_CRED_VERSION。

cCreds

paCred 数组中的结构数。

paCred

指向 CERT_CONTEXT 结构的指针数组。 每个指针指定一个证书,其中包含用于对应用程序进行身份验证的 私钥 。 通常,此数组包含应用程序支持的每个密钥交换方法的一个结构。

客户端应用程序通常会传入一个空列表,并依赖于 Schannel 来查找适当的证书,或者稍后根据需要创建证书。

hRootStore

可选。 仅适用于服务器应用程序。 包含证书颁发机构自签名根证书的证书存储的句柄 (应用程序信任) CA。 此成员仅由需要客户端身份验证的服务器端应用程序使用。

cMappers

保留。

aphMappers

保留。

_HMAPPER

cSupportedAlgs

palgSupportedAlgs 数组中的算法数。

palgSupportedAlgs

可选。 指向 ALG_ID 算法标识符数组的指针,这些标识符表示使用此结构获取的凭据建立的连接所支持的算法。 如果 cSupportedAlgs 为零或 palgSupportedAlgsNULL,则 Schannel 使用系统默认值。

目前,不支持 算法标识符CALG_AESCALG_AES_128CALG_AES_256

grbitEnabledProtocols

可选。 包含位字符串的 DWORD ,该字符串表示使用此结构获取的凭据建立的连接所支持的协议。 如果此成员为零,则 Schannel 将选择协议。 对于新的开发,应用程序应将 grbitEnabledProtocols 设置为零,并使用默认情况下在系统上启用的协议版本。

此成员仅由 Microsoft 统一安全协议提供程序 安全包使用。

全局系统注册表设置优先于此值。 例如,如果在注册表中禁用 SSL3,则无法使用此成员启用 SSL3。

此成员可以包含以下任何标志。

含义
SP_PROT_PCT1_SERVER
0x00000001
专用通信技术 1.0 服务器端。
注意 过时。
 
SP_PROT_PCT1_CLIENT
0x00000002
专用通信技术 1.0 客户端。
注意 过时。
 
SP_PROT_SSL2_SERVER
0x00000004
安全套接字第 2.0 层服务器端。 被SP_PROT_TLS1_SERVER取代。
重要 安全套接字第 2.0 层和传输层安全性 1.2 标志互斥。
 
Windows 10版本 1607 和 Windows Server 2016.:支持结束。
SP_PROT_SSL2_CLIENT
0x00000008
安全套接字第 2.0 层客户端。 被SP_PROT_TLS1_CLIENT取代。
重要 安全套接字第 2.0 层和传输层安全性 1.2 标志互斥。
 
Windows 10版本 1607 和 Windows Server 2016.:支持结束。
SP_PROT_SSL3_SERVER
0x00000010
安全套接字第 3.0 层服务器端。
SP_PROT_SSL3_CLIENT
0x00000020
安全套接字第 3.0 层客户端。
SP_PROT_TLS1_SERVER
0x00000040
传输层安全性 1.0 服务器端。
SP_PROT_TLS1_CLIENT
0x00000080
传输层安全性 1.0 客户端。
SP_PROT_TLS1_0_SERVER
SP_PROT_TLS1_SERVER
传输层安全性 1.0 服务器端。
SP_PROT_TLS1_0_CLIENT
SP_PROT_TLS1_CLIENT
传输层安全性 1.0 客户端。
SP_PROT_TLS1_1_SERVER
0x00000100
传输层安全性 1.1 服务器端。
SP_PROT_TLS1_1_CLIENT
0x00000200
传输层安全性 1.1 客户端。
SP_PROT_TLS1_2_SERVER
0x00000400
传输层安全性 1.2 服务器端。
重要 安全套接字第 2.0 层和传输层安全性 1.2 标志互斥。
 
SP_PROT_TLS1_2_CLIENT
0x00000800
传输层安全性 1.2 客户端。
重要 安全套接字第 2.0 层和传输层安全性 1.2 标志互斥。
 
SP_PROT_TLS1_3_SERVER
0x00001000
传输层安全性 1.3 服务器端。
重要 安全套接字第 2.0 层和传输层安全性 1.2 标志互斥。
 
SP_PROT_TLS1_3_CLIENT
0x00002000
传输层安全性 1.3 客户端。
重要 安全套接字第 2.0 层和传输层安全性 1.3 标志互斥。
 
SP_PROT_DTLS_SERVER
0x00010000
数据报传输层安全服务器端。

Windows 8和Windows Server 2012:添加了支持。

SP_PROT_DTLS_CLIENT
0x00020000
数据报传输层安全性客户端。

Windows 8和Windows Server 2012:添加了支持。

SP_PROT_DTLS1_0_SERVER
SP_PROT_DTLS1_SERVER
数据报传输层安全性 1.0 服务器端。

Windows 8和Windows Server 2012:添加了支持。

SP_PROT_DTLS1_0_CLIENT
SP_PROT_DTLS1_CLIENT
数据报传输层安全性 1.0 客户端。

Windows 8和Windows Server 2012:添加了支持。

SP_PROT_DTLS1_2_SERVER
0x00040000
数据报传输层安全性 1.2 服务器端。

Windows 10版本 1607 和 Windows Server 2016.:添加了支持。

SP_PROT_DTLS1_2_CLIENT
0x00080000
数据报传输层安全性 1.2 客户端。

Windows 10版本 1607 和 Windows Server 2016.:添加了支持。

SP_PROT_DTLS1_X_SERVER
数据报传输层安全性所有受支持的服务器端版本。

Windows 10版本 1607 和 Windows Server 2016.:添加了支持。

SP_PROT_DTLS1_X_CLIENT
数据报传输层安全性所有支持的客户端版本。

Windows 10版本 1607 和 Windows Server 2016.:添加了支持。

dwMinimumCipherStrength

允许连接的最小批量加密密码强度(以位为单位)。

如果此成员为零,则 Schannel 使用系统默认值。 如果此成员为 –1,则仅启用仅限 SSL3/TLS MAC 的密码套件 (也称为 NULL 密码) 。

dwMaximumCipherStrength

允许连接的最大批量加密密码强度(以位为单位)。

如果此成员为零,则 Schannel 使用系统默认值。

如果此成员为 –1,则仅启用仅限 SSL3/TLS MAC 的密码套件 (也称为 NULL 密码) 。 在这种情况下, dwMinimumCipherStrength 必须设置为 –1。

dwSessionLifespan

Schannel 在其会话缓存中保留会话的毫秒数。 经过此时间后,客户端与服务器之间的任何新连接都需要新的 Schannel 会话。 将此成员的值设置为零,以使用默认值 36000000 毫秒 (十小时) 。

dwFlags

包含控制 Schannel 行为的位标志。 此成员可以是零,也可以是以下值的组合。

含义
SCH_CRED_AUTO_CRED_VALIDATION
0x00000020
仅限客户端。

此标志与SCH_CRED_MANUAL_CRED_VALIDATION相反,是 Schannel 默认行为的一部分。

SCH_CRED_CACHE_ONLY_URL_RETRIEVAL_ON_CREATE
0x00020000
在调用 AcquireCredentialsHandle 期间验证指定的凭据时,指示 Schannel 将 CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL 标志传递给 CertGetCertificateChain 函数, (Schannel) 。

Windows Server 2003 和 Windows XP/2000: 不支持此标志。

SCH_CRED_DISABLE_RECONNECTS
0x00000080
仅限服务器。

如果设置了此标志,则使用此凭据执行的完全握手将不允许重新连接。 创建了一个缓存条目,以便稍后可以使用 ApplyControlToken 函数恢复会话。

SCH_CRED_IGNORE_NO_REVOCATION_CHECK
0x00000800
检查吊销的证书时,请忽略CRYPT_E_NO_REVOCATION_CHECK错误。 有关其他限制,请参阅备注。
SCH_CRED_IGNORE_REVOCATION_OFFLINE
0x00001000
检查吊销的证书时,请忽略CRYPT_E_REVOCATION_OFFLINE错误。 有关其他限制,请参阅备注。
SCH_CRED_MANUAL_CRED_VALIDATION
0x00000008
仅限客户端。

阻止 Schannel 验证收到的服务器证书链。

SCH_CRED_NO_DEFAULT_CREDS
0x00000010
仅限客户端。

阻止 Schannel 尝试自动提供用于客户端身份验证的证书链。

SCH_CRED_NO_SERVERNAME_CHECK
0x00000004
仅限客户端。

阻止 Schannel 将提供的目标名称与 服务器证书中的使用者名称进行比较。

SCH_CRED_NO_SYSTEM_MAPPER
0x00000002
仅限服务器。

阻止 Schannel 使用内置系统证书映射函数将 客户端证书 映射到用户帐户。

SCH_CRED_REVOCATION_CHECK_CHAIN
0x00000200
验证证书链时,检查所有证书进行吊销。 有关其他限制,请参阅备注。
SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT
0x00000400
验证证书链时,不要检查根目录进行吊销。 有关其他限制,请参阅备注。
SCH_CRED_REVOCATION_CHECK_END_CERT
0x00000100
验证证书链时,仅检查吊销的最后一个证书。 有关其他限制,请参阅备注。
SCH_CRED_USE_DEFAULT_CREDS
0x00000040
仅限客户端。

Schannel 尝试自动提供用于客户端身份验证的证书链。 此值与SCH_CRED_NO_DEFAULT_CREDS相反。

SCH_SEND_AUX_RECORD
0x00200000
指示 Schannel 将要加密的数据拆分为两个单独的记录,以在使用密码块链接模式与对称密码套件一起使用时,以对抗 SSL/TLS 协议中存在的弱点。 有关详细信息,请参阅 上的 http://support.microsoft.com/kb/2643584帮助和支持知识库中的“SSL/TLS 中的漏洞可能允许信息泄露”。

Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP 和 Windows XP/2000: 不支持此标志。

SCH_SEND_ROOT_CERT
0x00040000
Schannel 将根证书作为证书消息的一部分发送。
注意 Schannel 客户端或服务器通过网络发送的根证书不受信任。 应根据根证书的受信任哈希对其进行验证。
 
SCH_USE_STRONG_CRYPTO
0x00400000
指示 Schannel 禁用已知的弱加密算法、密码套件和 SSL/TLS 协议版本,否则可能会启用这些算法,以提高互操作性。
SCH_USE_PRESHAREDKEY_ONLY
0x00800000
指示 Schannel 仅选择 PSK 密码套件并禁用所有其他密码套件。

dwCredFormat

内核模式 Schannel 支持以下值。

Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP 和 Windows XP/2000: 此标志不受支持,必须为零。

含义
SCH_CRED_FORMAT_CERT_HASH
0x00000001
传入的 SCHANNEL_CRED 结构的 paCred 成员必须是指向包含证书指纹的长度为 20 的字节数组的指针。 假定证书位于本地计算机的“MY”存储中。
SCH_CRED_FORMAT_CERT_HASH_STORE
0x00000002
SCHANNEL_CRED 结构的 paCred 成员指向SCHANNEL_CERT_HASH_STORE结构。

注解

以下证书吊销标志互斥。

  • SCH_CRED_REVOCATION_CHECK_CHAIN
  • SCH_CRED_REVOCATION_CHECK_END_CERT
  • SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT

若要自定义 Schannel 的证书吊销错误报告,请使用以下标志:

  • SCH_CRED_IGNORE_NO_REVOCATION_CHECK
  • SCH_CRED_IGNORE_REVOCATION_OFFLINE

当 Schannel 检查证书链的吊销状态时,这些标志指示它分别忽略任何CRYPT_E_NO_REVOCATION_CHECK和CRYPT_E_REVOCATION_OFFLINE错误。 如果未设置证书吊销标志,则忽略这些标志。

要求

要求
最低受支持的客户端 Windows 8.1 [仅限桌面应用]
最低受支持的服务器 Windows Server 2012 R2 [仅限桌面应用]
标头 schannel.h (包括 Schnlsp.h)

另请参阅

QuerySecurityContextToken