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_AES、CALG_AES_128和 CALG_AES_256。
grbitEnabledProtocols
自选。 DWORD,该字符串包含一个位字符串,表示使用此结构获取的凭据的连接所支持的协议。 如果此成员为零,则 Schannel 会选择协议。 对于新的开发,应用程序应将 grbitEnabledProtocols 设置为零,并默认使用系统上启用的协议版本。
此成员仅由Microsoft统一安全协议提供程序 安全包使用。
全局系统注册表设置优先于此值。 例如,如果在注册表中禁用 SSL3,则无法使用此成员启用它。
此成员可以包含以下任何标志。
dwMinimumCipherStrength
允许连接的最小批量加密密码强度(以位为单位)。
如果此成员为零,则 Schannel 使用系统默认值。 如果此成员为 –1,则仅启用 SSL3/TLS MAC 密码套件(也称为 NULL 密码)。
dwMaximumCipherStrength
允许连接的最大批量加密密码强度(以位为单位)。
如果此成员为零,则 Schannel 使用系统默认值。
如果此成员为 –1,则仅启用 SSL3/TLS MAC 密码套件(也称为 NULL 密码)。 在这种情况下,dwMinimumCipherStrength 必须设置为 –1。
dwSessionLifespan
Schannel 在其会话缓存中保留会话的毫秒数。 此时间过后,客户端和服务器之间的任何新连接都需要新的 Schannel 会话。 将此成员的值设置为零,以使用默认值 360000000 毫秒(10 小时)。
dwFlags
包含控制 Schannel 行为的位标志。 此成员可以是零,也可以是以下值的组合。
价值 | 意义 |
---|---|
|
仅限客户端。
此标志与SCH_CRED_MANUAL_CRED_VALIDATION相反,是 Schannel 的默认行为的一部分。 |
|
在调用 AcquireCredentialsHandle (Schannel)时,指示 Schannel 将CERT_CHAIN_CACHE_ONLY_URL_RETRIEVAL标志传递给 CertGetCertificateChain 函数。
Windows Server 2003 和 Windows XP/2000:不支持 此标志。 |
|
仅限服务器。
如果设置了此标志,则使用此凭据执行的完全握手将不允许重新连接。 创建缓存项,以便稍后可以使用 applyControlToken 函数 |
|
检查吊销的证书时,请忽略CRYPT_E_NO_REVOCATION_CHECK错误。 有关其他限制,请参阅“备注”。 |
|
检查吊销的证书时,请忽略CRYPT_E_REVOCATION_OFFLINE错误。 有关其他限制,请参阅“备注”。 |
|
仅限客户端。
防止 Schannel 验证收到的服务器证书链。 |
|
仅限客户端。
防止 Schannel 尝试自动提供用于客户端身份验证的证书链。 |
|
仅限客户端。
防止 Schannel 将所提供的目标名称与 服务器证书中的使用者名称进行比较。 |
|
仅限服务器。
阻止 Schannel 使用内置系统证书映射函数将 客户端证书映射到用户帐户。 |
|
验证证书链时,请检查所有证书是否吊销。 有关其他限制,请参阅“备注”。 |
|
验证证书链时,请不要检查根目录是否存在吊销。 有关其他限制,请参阅“备注”。 |
|
验证证书链时,仅检查最后一个证书是否要吊销。 有关其他限制,请参阅“备注”。 |
|
仅限客户端。
Schannel 尝试自动提供用于客户端身份验证的证书链。 此值与SCH_CRED_NO_DEFAULT_CREDS相反。 |
|
指示 Schannel 将数据拆分为两个单独的记录,以对抗 SSL/TLS 协议中存在的弱点,当使用密码块链接模式与对称密码套件一起使用时。 有关详细信息,请参阅 SSL/TLS 中的 漏洞可能允许信息泄露。
Windows Server 2008 R2、Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP 和 Windows XP/2000:不支持 此标志。 |
|
Schannel 将根证书作为证书消息的一部分发送。
注意 Schannel 客户端或服务器通过网络发送的根证书不受信任。 应根据根证书的受信任哈希对其进行验证。
|
|
指示 Schannel 禁用已知的弱加密算法、密码套件和 SSL/TLS 协议版本,否则可能会启用这些版本以实现更好的互操作性。 |
|
指示 Schannel 仅选择 PSK 密码套件并禁用所有其他密码套件。 |
dwCredFormat
内核模式 Schannel 支持以下值。
Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP 和 Windows XP/2000:此标志不受支持,且必须为零。
价值 | 意义 |
---|---|
|
传入 SCHANNEL_CRED 结构的 paCred 成员必须是指向长度为 20 的字节数组的指针,其中包含证书指纹。 该证书假定位于本地计算机的“MY”存储中。 |
|
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) |