Функция tls.X509KeyPair

Функция tls.X509KeyPair загружает и парсит сертификат X.509 и соответствующий ему приватный ключ из байтовых срезов. В первый параметр мы передаем байтовый срез с PEM-кодированным сертификатом, во второй параметр мы передаем байтовый срез с PEM-кодированным приватным ключом. Функция возвращает структуру tls.Certificate и ошибку, если парсинг не удался.

Синтаксис

gotls.X509KeyPair(certPEM, keyPEM []byte) (tls.Certificate, error)

Пример с самоподписанным сертификатом

Давайте создадим пару сертификата и ключа в памяти с помощью функции X509KeyPair:

gopackage main

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

func main() {
  // PEM-кодированный сертификат (пример)
  certPEM := []byte(`-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMjQwMTAxMDAwMDAwWhcNMjUwMTAxMDAwMDAwWjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAu7q5n4P5x8q7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9
m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7
n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9
m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7
n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9
m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7
n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9
QIDAQABo1AwTjAdBgNVHQ4EFgQUx8n7v9m7n8v9m7n8v9m7n8v9m7n8wHwYDVR0j
BBgwFoAUx8n7v9m7n8v9m7n8v9m7n8v9m7n8wDAYDVR0TBAUwAwEB/zANBgkqhkiG
9w0BAQsFAAOCAQEAx8n7v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
-----END CERTIFICATE-----`)

  // PEM-кодированный приватный ключ (пример)
  keyPEM := []byte(`-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAu7q5n4P5x8q7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7
n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m
7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8
-----END RSA PRIVATE KEY-----`)

  // Загружаем пару сертификат-ключ
  cert, err := tls.X509KeyPair(certPEM, keyPEM)
  if err != nil {
    log.Fatal(err)
  }

  // Проверяем, что сертификат загружен
  fmt.Printf("Certificate loaded: %v\n", cert.Certificate != nil)
}

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

go"Certificate loaded: true"

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

Давайте используем загруженную пару в структуре tls.Config для настройки HTTPS-сервера:

<~show~> <+go+> package main import ( "crypto/tls" "fmt" "log" ) func main() { // PEM-кодированный сертификат certPEM := []byte(`-----BEGIN CERTIFICATE----- MIIDXTCCAkWgAwIBAgIJAJC1HiIAZAiUMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX aWRnaXRzIFB0eSBMdGQwHhcNMjQwMTAxMDAwMDAwWhcNMjUwMTAxMDAwMDAwWjBF MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50 ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAu7q5n4P5x8q7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8 v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9 m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7 n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8 v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9 m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7 n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8 v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9 m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7 n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8 v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9 QIDAQABo1AwTjAdBgNVHQ4EFgQUx8n7v9m7n8v9m7n8v9m7n8v9m7n8wHwYDVR0j BBgwFoAUx8n7v9m7n8v9m7n8v9m7n8v9m7n8wDAYDVR0TBAUwAwEB/zANBgkqhkiG 9w0BAQsFAAOCAQEAx8n7v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9 7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8 v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m 7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8 v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m 7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8 -----END CERTIFICATE-----`) keyPEM := []byte(`-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAu7q5n4P5x8q7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7 n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8 v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m 7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9m7n8v9
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить