Ошибки проверки и игнорирования сертификатов при работе через прокси в Golang

Пишу скрипт на GO который проверяет прокси низкого качества путем выполнения GET запроса. Однако возникают ошибки с проверкой и игнорированием проверки сертификатов. Независимо к какому сайту выполняется запрос, ошибка сохраняется (сайт в коде для примера, пробовал и гугл и тд.).

import (
    "crypto/tls"
    "fmt"
    "io"
    "net"
    "net/http"
    "net/url"
    "os"
    "strings"
    "time"
)

/* ... */

func main() {
    proxyList, err := readProxyFile("https.txt")
    if err != nil {
        fmt.Println("Error reading proxy file:", err)
        return
    }

    for _, proxyStr := range proxyList {
        proxyURL, err := url.Parse("https://" + proxyStr)
        if err != nil {
            fmt.Println("Error parsing proxy URL:", err)
            continue
        }

        httpTransport := &http.Transport{
            Proxy: http.ProxyURL(proxyURL),
            DialContext: (&net.Dialer{
                Timeout:   30 * time.Second,
                KeepAlive: 30 * time.Second,
            }).DialContext,
            TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // Отключение проверки сертификатов

        }

        httpClient := &http.Client{
            Transport: httpTransport,
        }

        req, err := http.NewRequest("GET", "https://httpbin.org/get", nil)
        if err != nil {
            fmt.Println("Error creating request:", err)
            continue
        }

        resp, err := httpClient.Do(req)
        if err != nil {
            fmt.Println("Error making request with proxy", proxyStr, ":", err)
            continue
        }

        fmt.Println("Proxy", proxyStr, "is working.")

        defer resp.Body.Close()

        err = saveResponseToFile(resp.Body, "response.html")
        if err != nil {
            fmt.Println("Error writing response to file:", err)
            continue
        }
    }
}

Если включена проверка сертификатов TLSClientConfig: &tls.Config{InsecureSkipVerify: true} возникают следующие ошибки:

Error proxy 45.82.179.153:33354 : Get "https://httpbin.org/get": proxyconnect tcp: dial tcp 45.82.179.153:33354: connectex: No connection could be made because the target machine actively refused it.
Error proxy 3.127.62.252:80 : Get "https://httpbin.org/get": local error: tls: bad record MAC
Error proxy 52.16.232.164:3128 : Get "https://httpbin.org/get": local error: tls: bad record MAC
Error proxy 13.38.176.104:3128 : Get "https://httpbin.org/get": local error: tls: bad record MAC
Error proxy 44.204.37.158:8081 : Get "https://httpbin.org/get": local error: tls: bad record MAC
Error proxy 3.96.173.26:59878 : Get "https://httpbin.org/get": local error: tls: bad record MAC
Error proxy 20.111.54.16:80 : Get "https://httpbin.org/get": proxyconnect tcp: tls: first record does not look like a TLS handshake
Error proxy 20.111.54.16:8123 : Get "https://httpbin.org/get": proxyconnect tcp: tls: first record does not look like a TLS handshake

Если отключена проверка сертификатов TLSClientConfig: &tls.Config{InsecureSkipVerify: false} возникают следующие ошибки:

Error proxy 45.82.179.153:33354 : Get "https://httpbin.org/get": proxyconnect tcp: dial tcp 45.82.179.153:33354: connectex: No connection could be made because the target machine actively refused it.
Error proxy 3.127.62.252:80 : Get "https://httpbin.org/get": tls: failed to verify certificate: x509: certificate signed by unknown authority
Error proxy 52.16.232.164:3128 : Get "https://httpbin.org/get": tls: failed to verify certificate: x509: certificate signed by unknown authority
Error proxy 13.38.176.104:3128 : Get "https://httpbin.org/get": tls: failed to verify certificate: x509: certificate signed by unknown authority
Error proxy 44.204.37.158:8081 : Get "https://httpbin.org/get": tls: failed to verify certificate: x509: certificate signed by unknown authority
Error proxy 3.96.173.26:59878 : Get "https://httpbin.org/get": tls: failed to verify certificate: x509: certificate signed by unknown authority

Моя цель реализовать нормальную обработку исключений при работе с прокси, однако из-за этой проблемы с сертификатами не могу продолжить свой основной проект где и хотел реализовать работу с прокси.

Мне по сути без разницы будет ли проводиться проверка сертификатов (скрипт пишу для себя), главное что бы можно было нормально работать с прокси и выполнять запросы.

Вполне вероятно, что проблема связанна с прокси, однако тогда при отключенной проверке сертификатов запросы должны проходить нормально, но увы этого не происходит.

В данный момент я не нашел как не проводить проверку сертификатов и выполнять запрос через прокси или же как их проверять без ошибок. Я уже пробовал следующие с тем же результатом:

  • Получал копию пула системных сертификатов x509.SystemCertPool() и определял набор корневых сертификатов в tls.Config httpTransport.TLSClientConfig = &tls.Config{RootCAs:x509.NewCertPool()}
  • Добавлял клиентский сертификат сайта в копию пула системных сертификатов
  • Использовал не стандартный пакет для отправки запросов github.com/go-resty/resty/v2 и golang.org/x/net/proxy
  • Выполнял запросы на десяток разных сайтов.
  • Запускал скрипт на: виртуалке windows, другом пк Еще на стаке нашел как включали игнорирование следующим образом (то же не помогло):
insecureSSLCustom := flag.Bool("insecure-ssl", true, "Accept/Ignore all server SSL certificates")
flag.Parse()
config := &tls.Config{
    InsecureSkipVerify: *insecureSSLCustom,
    RootCAs:            rootCAs,
}

Использую:

  • go 1.21.3
  • Windows 11, Windows 10
  • Тип прокси HTTPS без авторизации

Ответы (0 шт):