Тип tls.Config

Тип tls.Config представляет конфигурацию для TLS-соединений. Он позволяет настроить сертификаты, версии протокола, шифры, проверку сертификатов и другие параметры безопасности. Экземпляр tls.Config используется при создании как серверных, так и клиентских TLS-соединений.

Синтаксис

gotype Config struct {
  Certificates []Certificate
  NameToCertificate map[string]*Certificate
  RootCAs *x509.CertPool
  InsecureSkipVerify bool
  MinVersion uint16
  MaxVersion uint16
  CipherSuites []uint16
  ClientAuth ClientAuthType
  ClientCAs *x509.CertPool
  ServerName string
}

Пример

Создадим базовую конфигурацию для клиентского TLS-соединения с отключенной проверкой сертификата (для тестирования):

gopackage main

import (
  "crypto/tls"
  "fmt"
)

func main() {
  config := &tls.Config{
    InsecureSkipVerify: true,
  }

  fmt.Printf("Config: %+v\n", config)
}

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

go"Config: &{Certificates:[] NameToCertificate:map[] RootCAs:<nil> InsecureSkipVerify:true MinVersion:0 MaxVersion:0 CipherSuites:[] ClientAuth:0 ClientCAs:<nil> ServerName:}"

Пример

Создадим конфигурацию с указанием минимальной и максимальной версии TLS:

gopackage main

import (
  "crypto/tls"
  "fmt"
)

func main() {
  config := &tls.Config{
    MinVersion: tls.VersionTLS12,
    MaxVersion: tls.VersionTLS13,
  }

  fmt.Printf("MinVersion: %d, MaxVersion: %d\n", config.MinVersion, config.MaxVersion)
}

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

go"MinVersion: 771, MaxVersion: 772"

Пример

Настроим серверную конфигурацию с требованием клиентского сертификата:

gopackage main

import (
  "crypto/tls"
  "fmt"
)

func main() {
  config := &tls.Config{
    ClientAuth: tls.RequireAndVerifyClientCert,
  }

  fmt.Printf("ClientAuth: %d\n", config.ClientAuth)
}

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

go"ClientAuth: 4"

Пример

Загрузим сертификат и ключ для серверной конфигурации:

gopackage main

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

func main() {
  cert, err := tls.LoadX509KeyPair("server.crt", "server.key")
  if err != nil {
    log.Fatal(err)
  }

  config := &tls.Config{
    Certificates: []tls.Certificate{cert},
  }

  fmt.Printf("Loaded certificate: %s\n", cert.Leaf.Subject)
}

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

go"Loaded certificate: CN=localhost"

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

  • функцию tls.Listen,
    которая создает TLS-сервер
  • функцию tls.Dial,
    которая создает TLS-клиент
  • тип tls.Certificate,
    представляющий TLS-сертификат
  • функцию tls.LoadX509KeyPair,
    которая загружает пару сертификат/ключ из файлов