【问题标题】:How to use TLS 1.2 in Visual Basic 6 (vb6) - REST如何在 Visual Basic 6 (vb6) 中使用 TLS 1.2 - REST
【发布时间】:2018-12-20 17:11:20
【问题描述】:

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.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

【问题讨论】:

  • 您使用的对象是一个 WinHttp 包装器。在任何情况下,要通过 WinHttp 使用 TLS 1.2,您必须在 Windows 10 上,否则已安装更新,然后通过注册表设置启用较新的密码。这不是编程问题,而是系统管理问题,与 VB6 无关。
  • @Bob77 我的生产机器是 Windows Server 2003
  • Server 2003 已生命终结,并且已经存在好几年了!它不再获得任何更新...甚至没有关键的安全补丁,甚至是已知漏洞。仍然使用它是危险和不负责任的。更新到受支持的服务器是这里的第一要务。
  • @Joel Coehoom 这里很少有人不知道 MS 不再支持 2003。
  • 你可以使用cHttRequest源兼容的替换类。使用 VB6+thunks TLS 后端,它支持从 NT 4.0 开始的每个 Windows 上的 TLS 1.3 和 TLS 1.2

标签: rest vb6 tls1.2 windows-server-2003 apigee


【解决方案1】:

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

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

如果您使用的是旧版本的 Windows,the WinHTTP library doesn't support TLS newer than 1.0(由于您不再获得操作系统的安全更新,这可能是您最不必担心的)。您需要使用其他一些不使用底层 OS Schannel 库来处理其加密的 HTTPS 库,尽管我不知道有任何东西可以轻松集成到 VB6 中。将服务器升级到受支持的 Windows 版本可能是最简单的方法。

【讨论】:

  • Windows 服务器 2003 :(
  • @LeonardoNascimentoCintra 我刚刚添加了一段关于早期版本的 Windows 如何根本不支持使用 WinHTTP 的 TLS 1.2。
  • 应用程序使用了需要 32 位版本的依赖项。它真的没有用,我们正在研究新的替代方案。 Ty @Peter Cooper Jr.
  • @LeonardoNascimentoCintra 您可以升级到受支持的 Windows 版本的 32 位版本。虽然当我说升级“可能是最简单的方法”时,我并不是要暗示它会容易,只是其他选项可能会更复杂。
猜你喜欢
  • 2012-05-08
  • 2012-11-11
  • 2010-09-06
  • 2015-12-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多