如何在Visual Basic 6(vb6)中使用TLS 1.2-REST

如何在Visual Basic 6(vb6)中使用TLS 1.2-REST,rest,vb6,tls1.2,windows-server-2003,apigee,Rest,Vb6,Tls1.2,Windows Server 2003,Apigee,正在将请求迁移到TLS 1.2 操作系统:Windows Server 2003 我有一个用vb6开发的旧应用程序,但由于这次新的迁移,它停止了工作 这是我的密码 Public Function GetCustomerName(ByVal pCPFCliente As String) As String Dim xmlhttp As MSXML2.ServerXMLHTTP Set xmlhttp = New MSXML2.ServerXMLHTTP xmlhttp.

正在将请求迁移到TLS 1.2

操作系统:Windows Server 2003

我有一个用vb6开发的旧应用程序,但由于这次新的迁移,它停止了工作

这是我的密码

Public Function GetCustomerName(ByVal pCPFCliente As String) As String
    Dim xmlhttp As MSXML2.ServerXMLHTTP
    Set xmlhttp = New MSXML2.ServerXMLHTTP


    xmlhttp.Open "GET", const_URL & "/customer=" & pCPFCliente & "&identification.type=CPF", False
    xmlhttp.setRequestHeader "Content-Type", "application/json"
    xmlhttp.setRequestHeader "Authorization", const_TOKEN
    xmlhttp.send

    Dim objJson As Object
    Set objJson = JSON.parse(xmlhttp.responseText)
    Dim lacoRecord As Integer
    Dim customerName As String
    customerName = ""

    If xmlhttp.Status = 200 Then
        For lacoRecord = 1 To objJson.Item("records").Count
            customerName = objJson.Item("records")(lacoRecord).Item("name")
        Next
    ElseIf xmlhttp.Status = 404 Then
        If objJson.Item("errorCode") = 20023 Then
            Call WriteLogManual("CONSULTA CPF", "Cliente não encontrado! " & pCPFCliente, pPedido, 0, 0, 0, 0, 0)
        Else
            Call WriteLogManual("CONSULTA CPF", "Erro ao consultar CPF " & pCPFCliente & " - " & xmlhttp.responseText, pPedido, 0, 0, 0, 0, 0)
        End If
    ElseIf xmlhttp.Status = 503 Then
        MsgBox "Ocorreu um erro 503 ao buscar o CPF do Cliente na API. " & Chr(13) & xmlhttp.responseText
        Call WriteLogManual("CONSULTA CPF", "Erro ao consultar saldo na ApiGee - " & xmlhttp.responseText, pPedido, 0, 0, 0, 0, 0)
    Else
        MsgBox "Ocorreu um erro ao buscar o saldo do Cliente na API. " & Chr(13) & xmlhttp.responseText
        Call WriteLogManual("CONSULTA CPF", "Erro ao consultar saldo na ApiGee - " & xmlhttp.responseText, pPedido, 0, 0, 0, 0, 0)
    End If

    GetCustomerName = customerName
End Function

为了使用更新的TLS协议,需要更新Windows上的基础WinHTTP服务。这实际上并不特定于VB6,而是适用于所有在Windows上使用WinHTTP库的应用程序

Microsoft在中提供了将更新应用于Windows 7、Windows Server 2008 R2和Windows Server 2012的说明。还必须更新注册表中的DefaultSecureProtocols值,以默认启用TLS 1.2(和其他所需版本)


如果您使用的是较旧版本的Windows(并且由于您不再获得操作系统的安全更新,这可能是您最不担心的)。您需要使用其他一些HTTPS库,这些库不使用底层OS Schannel库来处理其加密,尽管我不知道有什么东西可以轻易地集成到VB6中。将服务器升级到受支持的Windows版本可能是最简单的方法。

您使用的对象是WinHttp包装器。在任何情况下,要通过WinHttp使用TLS 1.2,您必须在Windows 10上,或者安装了更新,然后通过注册表设置启用了较新的密码。这不是一个编程问题,而是一个系统管理问题,与VB6无关。@Bob77我的生产机器是Windows Server 2003Server 2003,它已经使用了好几年了!它不再得到任何更新。。。甚至没有关键的安全补丁,即使是已知的漏洞。继续使用它是危险和不负责任的。更新到受支持的服务器在这里是优先级#1。@Joel Coehoom这里很少有人会不知道MS不再支持2003。windows server 2003:(@LeonardoNascimentoCintra我刚刚添加了一段关于Windows早期版本如何完全不支持使用WinHTTP的TLS 1.2的内容。该应用程序使用了一个需要32位版本的依赖项。它确实不起作用,我们正在研究新的替代方案。Ty@Peter Cooper Jr.@LeonardoNascimentoCintra您可以升级到32位版本o虽然当我说升级“可能是最简单的方法”时,我并不是在暗示它会很容易,只是其他的选择可能会更复杂。