v5.0.62: utls Chrome-120 TLS fingerprint (DDoS-Guard bypass)
This commit is contained in:
@@ -3,6 +3,7 @@ package provider
|
||||
import (
|
||||
"context"
|
||||
"crypto/tls"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
@@ -17,6 +18,7 @@ import (
|
||||
"github.com/hashicorp/terraform-plugin-framework/provider/schema"
|
||||
"github.com/hashicorp/terraform-plugin-framework/resource"
|
||||
"github.com/hashicorp/terraform-plugin-framework/types"
|
||||
utls "github.com/refraction-networking/utls"
|
||||
)
|
||||
|
||||
var _ provider.Provider = &NubesProvider{}
|
||||
@@ -123,15 +125,29 @@ func (p *NubesProvider) Configure(ctx context.Context, req provider.ConfigureReq
|
||||
// HTTP transport: клонируем DefaultTransport чтобы сохранить системные настройки (proxy, timeouts).
|
||||
transport := http.DefaultTransport.(*http.Transport).Clone()
|
||||
transport.TLSHandshakeTimeout = 60 * time.Second
|
||||
// Force HTTP/1.1: Nubes API не поддерживает HTTP/2, принудительно отключаем.
|
||||
// MinVersion TLS 1.2 — минимально безопасная версия TLS.
|
||||
transport.TLSClientConfig = &tls.Config{
|
||||
InsecureSkipVerify: insecureSkipVerify, // false в prod, true только для dev
|
||||
NextProtos: []string{"http/1.1"},
|
||||
MinVersion: tls.VersionTLS12,
|
||||
}
|
||||
transport.ForceAttemptHTTP2 = false
|
||||
|
||||
// utls: маскируем Go TLS под Chrome, чтобы пройти DDoS-Guard (JA3 fingerprint).
|
||||
// Стандартный crypto/tls блокируется на deck-api-*.ngcloud.ru.
|
||||
transport.DialTLSContext = func(ctx context.Context, network, addr string) (net.Conn, error) {
|
||||
dialer := &net.Dialer{Timeout: 30 * time.Second}
|
||||
conn, err := dialer.DialContext(ctx, network, addr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
host, _, _ := net.SplitHostPort(addr)
|
||||
uconn := utls.UClient(conn, &utls.Config{
|
||||
ServerName: host,
|
||||
InsecureSkipVerify: insecureSkipVerify,
|
||||
MinVersion: tls.VersionTLS12,
|
||||
}, utls.HelloChrome_120)
|
||||
if err := uconn.HandshakeContext(ctx); err != nil {
|
||||
conn.Close()
|
||||
return nil, err
|
||||
}
|
||||
return uconn, nil
|
||||
}
|
||||
|
||||
// Определяем уровень логирования операций: none (тихий) / info / debug.
|
||||
// none — дефолт, не засорять вывод terraform apply лишними строками.
|
||||
logLevel := "none"
|
||||
|
||||
Reference in New Issue
Block a user