Using a Deferred Handshake
9/8/2008
Um handshake adiado permite que um aplicativo para criar uma conexão não segura e, posteriormente, convertê-lo para uma conexão com uma infra-estrutura de segurança.
Para implementar Seguro soquetes com um handshake adiado
Criar um Soquete com o Soquete função.
Definir a Soquete em Seguro modo com setsockopt.
Definir nível Para SOL_SOCKET, defina OptName SO_SECURE e conjunto optval Para um DWORD Defina como SO_SEC_SSL.
Especifique o função callback validação Certificado por chamado WSAIoctl Com o código de controle SO_SSL_SET_VALIDATE_CERT_HOOK.
Para verificar identidade do servidor durante o handshake, chamar WSAIoctl Com o código de controle SO_SSL_SET_PEERNAME.
Nome de servidor é verificado em relação o Certificado servidor após um bem-sucedido SSL handshake. Os resultados da verificação, em seguida, são indicados em callback de validação Certificado. Se o nome servidor especificado não coincide com indicada na cadeia de certificados do SSL Handshake, SSL_CERT_FLAG_ISSUER_UNKNOWN será definida no parâmetro dwFlags de SslValidateCertHook.
Se você não fizer isso executar essa etapa, nenhuma verificação é executada.
Definir a Soquete no modo handshake adiada com WSAIoctl. Codificar o controle deve ser definido para o sinalizador definido como SSL_FLAG_DEFER_HANDSHAKE e SO_SSL_SET_FLAGS.
Estabelecer um não seguro conexão com a parte remota usando conectar.
Transmitir e Receber dados unencoded.
Para alternar para Seguro modo, chamar WSAIoctl Com o código de controle SO_SSL_PERFORM_HANDSHAKE passando no nome do servidor destino.
O função callback Certificado é chamado automaticamente. O handshake é bem-sucedido somente se o função callback verifica o acceptability do Certificado, retornando SSL_ERR_OKAY.
Transmitir e Receber.
O Enviar e Recv funções codificar e decodificar os dados automaticamente.
Quando tiver terminado, fechar o Soquete com closesocket.