SCH_CREDENTIALS结构(schannel.h)

SCH_CREDENTIALS结构包含 Schannel 凭据的初始化信息。

语法

typedef struct _SCH_CREDENTIALS {
  DWORD           dwVersion;
  DWORD           dwCredFormat;
  DWORD           cCreds;
  PCCERT_CONTEXT  *paCred;
  HCERTSTORE      hRootStore;
  DWORD           cMappers;
  _HMAPPER        **aphMappers;
  struct          _HMAPPER;
  DWORD           dwSessionLifespan;
  DWORD           dwFlags;
  DWORD           cTlsParameters;
  PTLS_PARAMETERS pTlsParameters;
} SCH_CREDENTIALS, *PSCH_CREDENTIALS;

成员

dwVersion

设置为SCH_CREDENTIALS_VERSION。

dwCredFormat

内核模式 Schannel 支持以下值。

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

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

cCreds

paCred 数组中的结构数。

paCred

指向CERT_CONTEXT结构的指针数组。 每个指针指定一个证书,其中包含用于对应用程序进行身份验证的私钥。

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

hRootStore

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

cMappers

保留。

aphMappers

保留。

_HMAPPER

dwSessionLifespan

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

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)时,指示 Schannel 将CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL标志传递给 CertGetCertificateChain 函数。

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 协议中存在的弱点,当使用密码块链接模式与对称密码套件一起使用时。 有关详细信息,请参阅 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 密码套件并禁用所有其他密码套件。

cTlsParameters

pTlsParameters 数组中的条目计数。

指定多个SCH_CRED_MAX_SUPPORTED_PARAMETERS是错误的。

pTlsParameters

指向指示 TLS 参数限制(如果有)的 TLS_PARAMETERS 结构的指针数组。 如果未指定任何限制,则使用系统默认值。 建议应用程序依赖于系统默认值。

使用 cAlpnIds == 0 和 rgstrAlpnIds == NULL 包含多个 TLS_PARAMETERS 结构是错误的。

言论

若要使用SCH_CREDENTIALS结构,请定义SCHANNEL_USE_BLACKLISTS以及UNICODE_STRING和PUNICODE_STRING。 或者,包括 Ntdef.h、SubAuth.h 或 Winternl.h。

要求

要求 价值
最低支持的客户端 Windows 10 1809 [仅限桌面应用]
支持的最低服务器 Windows Server 1809 [仅限桌面应用]
标头 schannel.h

另请参阅

CRYPTO_SETTINGS

TLS_PARAMETERS