Функция tls.Dial

Функция tls.Dial устанавливает TLS-соединение с указанным сетевым адресом. В первый параметр передается сеть (например, "tcp"), во второй параметр передается адрес сервера (например, "example.com:443"), в третий параметр передается конфигурация TLS (*tls.Config). Функция возвращает соединение типа *tls.Conn и ошибку.

Синтаксис

goconn, err := tls.Dial(network, address, config)

Пример

Давайте установим TLS-соединение с сервером "example.com" через порт 443 и выведем информацию о соединении:

gopackage main

import (
  "crypto/tls"
  "fmt"
  "log"
)

func main() {
  // Создаем конфигурацию TLS
  config := &tls.Config{
    InsecureSkipVerify: true, // Только для примера
  }

  // Устанавливаем соединение
  conn, err := tls.Dial("tcp", "example.com:443", config)
  if err != nil {
    log.Fatal(err)
  }
  defer conn.Close()

  // Выводим состояние соединения
  state := conn.ConnectionState()
  fmt.Printf("TLS version: %d\n", state.Version)
  fmt.Printf("Cipher suite: %d\n", state.CipherSuite)
}

Результат выполнения кода:

go"TLS version: 771"
"Cipher suite: 4865"

Пример

Давайте установим TLS-соединение с проверкой сертификата сервера на домене "google.com" и выполним простой HTTP-запрос:

gopackage main

import (
  "crypto/tls"
  "fmt"
  "log"
  "time"
)

func main() {
  // Настраиваем конфигурацию
  config := &tls.Config{
    ServerName: "google.com",
  }

  // Устанавливаем соединение
  conn, err := tls.Dial("tcp", "google.com:443", config)
  if err != nil {
    log.Fatal(err)
  }
  defer conn.Close()

  // Отправляем GET-запрос
  request := "GET / HTTP/1.1\r\n" +
    "Host: google.com\r\n" +
    "Connection: close\r\n" +
    "\r\n"
  
  _, err = conn.Write([]byte(request))
  if err != nil {
    log.Fatal(err)
  }

  // Читаем ответ с таймаутом
  conn.SetReadDeadline(time.Now().Add(5 * time.Second))
  buffer := make([]byte, 1024)
  n, err := conn.Read(buffer)
  if err != nil {
    log.Fatal(err)
  }

  fmt.Println(string(buffer[:n]))
}

Результат выполнения кода:

go"HTTP/1.1 200 OK"
"Content-Type: text/html"
"Date: ..."

Смотрите также

  • функцию tls.Listen,
    которая создает TLS-сервер для приема соединений
  • структуру tls.Config,
    которая содержит настройки TLS-соединения
  • функцию tls.LoadX509KeyPair,
    которая загружает сертификат и ключ из файлов
  • функцию tls.X509KeyPair,
    которая создает пару ключей из байтовых данных