我正在使用Indy TIdHTTP(随XE2一起提供)和OpenSSL库DLL V1.0.1m在通过HTTPS连接时验证证书.我已经为组件的OnVerifyPeer事件实现了一个事件处理程序TIdSSLIOHandlerSocketOpenSSL.
function TForm1.IdSSLIOHandlerSocketOpenSSL1VerifyPeer(Certificate: TIdX509;
AOk: Boolean; ADepth, AError: Integer): Boolean;
begin
(...)
end;
Run Code Online (Sandbox Code Playgroud)
根据RFC 2818第3.1章,如果客户端可以使用主机名,客户端必须根据服务器证书消息中提供的服务器身份进行检查,以防止中间人攻击.
现在我有一个问题是验证服务器证书的主机名:
虽然服务器证书(*.google.com)中"主题"字段的"公用名"(CN)字段中存在通配符,但Certificate.Subject.OneLine该OnVerifyPeer事件的参数将返回没有任何通配符的CN(即google.com而不是*.google .COM).
如RFC 2818第3.1章所述.通配符*用于匹配任何单个域名组件或组件片段.
任何人都可以确认Indy或OpenSSL库删除了通配符,尽管有必要验证主机名吗?
有没有人想在这些情况下验证主机名?
任何帮助是极大的赞赏.谢谢阅读.