РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1292 of 1593 menu

Тип tls.Certificate

Тип tls.Certificate из пакета crypto/tls представляет собой сертификат X.509 и соответствующий ему закрытый ключ. Он используется для аутентификации сервера или клиента при установлении TLS-соединения. Структура содержит поля Certificate (слайс байтовых срезов с цепочкой сертификатов), PrivateKey (закрытый ключ) и Leaf (распарсенный сертификат).

Загрузка сертификата из файлов

Функция tls.LoadX509KeyPair загружает пару сертификат-ключ из файлов. Первый параметр — путь к файлу сертификата (в формате PEM), второй — путь к файлу закрытого ключа (в формате PEM).

package main import ( "crypto/tls" "fmt" "log" ) func main() { cert, err := tls.LoadX509KeyPair("server.crt", "server.key") if err != nil { log.Fatal(err) } fmt.Printf("Loaded certificate: %d bytes\n", len(cert.Certificate[0])) }

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

"Loaded certificate: 1234 bytes"

Загрузка сертификата из строк

Функция tls.X509KeyPair создает сертификат из строк PEM. В первый параметр передается строка с сертификатом, во второй — строка с закрытым ключом.

package main import ( "crypto/tls" "fmt" "log" ) func main() { certPEM := `-----BEGIN CERTIFICATE----- MIIDXTCCAkWgAwIBAgIJA... -----END CERTIFICATE-----` keyPEM := `-----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhki... -----END PRIVATE KEY-----` cert, err := tls.X509KeyPair([]byte(certPEM), []byte(keyPEM)) if err != nil { log.Fatal(err) } fmt.Printf("Certificate loaded: %s\n", cert.Leaf.Subject.CommonName) }

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

"Certificate loaded: example.com"

Использование в конфигурации TLS

Загруженный сертификат используется в структуре tls.Config для настройки TLS-сервера или клиента. Поле Certificates принимает слайс сертификатов.

package main import ( "crypto/tls" "log" ) func main() { cert, err := tls.LoadX509KeyPair("server.crt", "server.key") if err != nil { log.Fatal(err) } cfg := &tls.Config{ Certificates: []tls.Certificate{cert}, MinVersion: tls.VersionTLS12, } ln, err := tls.Listen("tcp", ":443", cfg) if err != nil { log.Fatal(err) } defer ln.Close() log.Println("TLS server started on :443") }

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

"TLS server started on :443"

Проверка сертификата на срок действия

Поле Leaf содержит распарсенный сертификат, позволяя проверить его срок действия до использования в соединении.

package main import ( "crypto/tls" "fmt" "log" "time" ) func main() { cert, err := tls.LoadX509KeyPair("server.crt", "server.key") if err != nil { log.Fatal(err) } if cert.Leaf == nil { log.Fatal("Leaf certificate is nil") } now := time.Now() if now.Before(cert.Leaf.NotBefore) { fmt.Println("Certificate is not yet valid") } else if now.After(cert.Leaf.NotAfter) { fmt.Println("Certificate has expired") } else { fmt.Println("Certificate is valid") } }

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

"Certificate is valid"

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

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