WinHTTP中的SSL
Microsoft Windows HTTP服务(WinHTTP)支持安全套接字层(SSL)事务,包括客户端证书。 本主题说明SSL事务中涉及的概念以及如何使用WinHTTP处理它们。
0x01.安全链路层
SSL
是确保安全HTTP
事务的成熟标准。 SSL
提供了一种机制,可对客户端和服务器之间的所有事务执行高达128位的加密。它使客户端能够通过使用服务器证书来验证服务器是否属于可信实体。它还使服务器能够使用客户端证书确认客户端的身份。
这些问题中的每一个(加密,服务器身份和客户端身份)都是在客户端首次从安全超文本传输协议(HTTPS
)服务器请求资源时发生的SSL
握手中协商的。基本上,客户端和服务器各自呈现所需和首选设置的列表。如果可以商定并满足一组公共要求,则建立SSL连接。
WinHTTP
提供了使用SSL
的高级接口。虽然SSL
握手和事务的详细信息在内部处理,WinHTTP
使您能够检索加密级别,指定安全协议,并与服务器和客户端证书交互。以下部分提供有关创建基于WinHTTP
的应用程序的详细信息,这些应用程序选择SSL
协议版本,检查服务器证书并选择要发送到HTTPS
服务器的客户端证书。
0x02.服务器证书
服务器证书从服务器发送到客户端,以便客户端可以获得服务器的公钥,并确保服务器已经由证书颁发机构验证。证书可以包含不同类型的数据。例如,X.509
证书包括证书的格式,证书的序列号,用于签署证书的算法,颁发证书的证书颁发机构(CA
)的名称,证书的名称和公钥请求证书的实体,以及CA
的签名。
当使用WinHTTP
应用程序编程接口(API
)时,您可以通过调用WinHttpQueryOption
并指定WINHTTP_OPTION_SECURITY_CERTIFICATE_STRUCT
标志来检索服务器证书。服务器证书以WINHTTP_CERTIFICATE_INFO
结构返回。如果您希望检索证书上下文,请改为指定WINHTTP_OPTION_SERVER_CERT_CONTEXT
标志。
如果服务器证书包含错误,则可以在状态回调函数中获取有关错误的详细信息。 WINHTTP_CALLBACK_STATUS_SECURE_FAILURE
通知指示服务器证书错误。 lpvStatusInformation
参数包含一个或多个详细错误标志。有关详细信息,请参阅WINHTTP_STATUS_CALLBACK
。
0x03.客户端证书
在SSL
握手期间,服务器可能需要身份验证。通过向服务器提供有效的客户端证书来认证客户端。 WinHTTP
使您能够从本地证书库中选择和发送证书。以下部分描述了在使用WinHTTP API
或WinHttpRequest
对象时提供客户端证书的过程。
0x04.WinHTTP API
WinHttpSendRequest
和WinHttpReceiveResponse
都可能无法指示请求不成功,因为HTTPS
服务器需要身份验证。在这些情况下,调用GetLastError
以返回ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED
。收到此错误时,请使