Não é possível usar HTTPS com o objeto ServerXMLHTTP [closed]

2

Eu estou apoiando um aplicativo ASP clássico que se conecta a um gateway de pagamento via HTTPS. Até recentemente, não houve problemas. Alguns dias atrás, isso quebrou sem o código, a configuração do IIS ou qualquer alteração local. Sua quebrado em pelo menos 3 servidores separados. A última execução das atualizações do Windows ocorreu no final de novembro, mas a atualização das atualizações dos servidores não resolveu o problema. Um trecho de código está abaixo.

Dim oHttp
Dim strResult
Set oHttp = CreateObject("MSXML2.ServerXMLHTTP")
oHttp.setOption 2, 13056
oHttp.open "POST", SOAP_ENDPOINT, false
oHttp.setRequestHeader "Content-Type", "application/soap+xml; charset=utf-8"
oHttp.setRequestHeader "SOAPAction", SOAP_NS + "/" & SOAP_FUNCTION
oHttp.send SOAP_REQUEST

Abaixo está um dump do objeto de erro: -

Number: -2147012852
Description: A certificate is required to complete client authentication 
Message: A certificate is required to complete client authentication

Inicialmente postei a pergunta no Stackoverflow ( link ) pensando que era um problema de código, mas uma investigação mais aprofundada parece apontar para um problema no servidor.

    
por Imraan 13.02.2012 / 16:13

1 resposta

0

Este é realmente um longo tiro, mas desde que você não tenha declarado a versão do MSXML instalado no servidor, aqui vai:

  1. Abra o MMC de Certificados para a loja de computadores local
  2. Navegue até Pessoal - > Certificados
  3. Anote os certificados que possam ter expirado recentemente

Se algum certificado expirou recentemente, isso pode ter causado o problema.

O problema é que, como o SSL é mal implementado na versão 3.0 do analisador MSXML (msxml2.lib), o objeto ServerXMLHTTP espera que qualquer conexão SSL exija autenticação de servidor e de certificado de cliente, mesmo que o servidor solicitado não exija autenticação de certificado de cliente.

Se o analisador xml não puder apresentar um certificado de cliente válido (inválido por expiração, por exemplo), ele simplesmente emitirá um erro.

Este é um bug REALMENTE antigo (corrigido no MSXML 3.0 SP2, novembro de 2005), e este artigo kb descreve uma solução alternativa: link

    
por 17.02.2012 / 01:42