O servidor ASP / IIS6 / Win2003 clássico não pode se comunicar com o servidor TLS

Hoje, a Sage Pay encerrou sua isenção para sites usarem SSL3 ao se comunicar com seus servidores de pagamento / autorização. TLSv1 agora é necessário.

Temos uma caixa do Windows Server 2003 executando o IIS6 e dois sites escritos (infelizmente) no ASP clássico. A caixa foi corrigida / com as chaves do registro atualizadas para atenuar o POODLE, e vários verificadores online fazem o backup. O servidor deve estar usando apenas TLS.

No entanto, ao tentar autorizar uma transação do Sage Pay usando WinHttp.WinHttpRequest.5.1 e um POST, a tentativa falha imediatamente. O único erro realimentado pelo WinHttpRequest é "-2147483638 - WinHttp.WinHttpRequest - Os dados necessários para concluir esta operação ainda não estão disponíveis."

O Internet Explorer no mesmo servidor também não pode acessar as interfaces de administração do Sage Pay hospedadas nos mesmos URLs. Isso, apesar do SSLv2 e SSLv3 estarem desativados nas Opções da Internet. Novamente, TLSv1 deve ser a única opção disponível para QUALQUER COISA na caixa.

Não importa quais tempos limite ou opções eu coloquei no objeto WinHttp - ele falha tão rapidamente que é quase como se nem tivesse tentado.

Eu verifiquei que o servidor em questão PODE se comunicar com os servidores do Sage Pay usando curl. O curl funciona sem um protocolo especificado (usa TLS) ou especificando manualmente - e não quando o SSL2 ou 3 for especificado - conforme o esperado.

Se isso funcionar, por que não fará mais nada - quando cada parte da configuração do servidor diz que deve?

Aqui está uma pequena amostra de código que retorna o erro WinHttpRequest mencionado acima:

<%
VSPServer = "https://test.sagepay.com/showpost/showpost.asp"

Set objHTTP = Server.CreateObject("WinHttp.WinHttprequest.5.1")
On Error Resume Next
objHTTP.Open "POST",CStr(VSPServer),False
objHTTP.Send "Hello"

If Err.Number <> 0 Then
    Response.Write "Status: " & objHTTP.Status & "<p>"
    Response.Write Err.Number & " - " & Err.Source & " - " & Err.Description
End If

On Error Goto 0
Set objHTTP = Nothing
%>

Se False for alterado para True (para executar este assíncrono) na linha objHTTP.Open, o script não retornará nada. Esse script funcionou antes de Sage Pay desligar as coisas esta tarde.

questionAnswers(2)

yourAnswerToTheQuestion