Vault PKI Kubernetes the hard way v2 Root CA

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску


Создание Корневого СА (Root CA)

Эта страница - часть большой статьи про CA используемые в k8s: Vault_PKI_Kubernetes_the_hard_way_v2

Включить PKI для корневого сертификата

По сути тут создается путь (endpoint!) который реализует функционал PKI - как бы говорим Vault-у что бы по определенному пути работал определенным образом
В целом значение path может быть любым, но удобно давать осознанные имена

vault \
    secrets \
        enable \
            -path=k8s_pki_root_ca \
            -description="PKI k8s Root CA" \
            -max-lease-ttl="262800h" \
            pki
Success! Enabled the pki secrets engine at: k8s_pki_root_ca/

Проверить созданный endpoint

vault secrets list | grep k8s_pki
k8s_pki_root_ca/                                            pki          pki_8b6cae1e          PKI k8s Root CA

Создание корневого сертефиката (CA)

Конфигурация Vault

  • ВАЖНО: Тип определяет будет ли показан ключ от сертификата. В случае internal ключ показа не будет и сертификат можно будет использовать только в Vault
  • Эта команда вызывает генерацию самоподписаного сертификата, который будет использоваться в качестве корневого
  • тут не указываются ограничения налагаемые на сертификат - но Vault сам "знает" что нужно сделать - из пути root/generate/
TYPE="exported"
#TYPE="internal"

vault \
    write \
        -format=json k8s_pki_root_ca/root/generate/${TYPE} \
        common_name="Root Certificate Authority for Home Network v2" \
        country="Ukraine" \
        locality="Kharkov" \
        street_address="Lui Pastera St. 322, app. 131" \
        postal_code="61172" \
        organization="Home Network" \
        ou="IT" \
        ttl="262800h" > k8s_pki_root_ca.json

Просмотр результата

Результат работы команды (длинный вывод пропущен):

cat pki-root-ca.json
{
  "request_id": "a73f7190-acff-a3da-4a73-32c41546984c",
  "lease_id": "",
  "lease_duration": 0,
  "renewable": false,
  "data": {
    "certificate": "-----BEGIN CERTIFICATE-----\nMIIEdT29yaz ...
    "expiration": 2610802620,
    "issuing_ca": "-----BEGIN CERTIFICATE-----\nMIIEd29yazE ...
    "private_key": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpc ...
    "private_key_type": "rsa",
    "serial_number": "6c:90:eb:90:d4:5f:86:6d:d8:fb:f8:f8:a0:4d:07:f8:99:1e:62:02"
  },
  "warnings": null
}

Корневой сертефикат самоподписаный. Поля certificate и issuing_ca полностью совпадают.

Подготовка файлов с сертефикатом и ключем

cat k8s_pki_root_ca.json | jq -r .data.certificate > k8s_root_certificate.pem
cat k8s_pki_root_ca.json | jq -r .data.issuing_ca > k8s_root_issuing_ca.pem
cat k8s_pki_root_ca.json | jq -r .data.private_key > k8s_root_private_key.key

Просмотр в привычном формате

openssl  x509  -text -noout -in k8s_root_certificate.pem

На что тут обратить внимание:

  • Время жизни - 30 лет (должно хватить)
        Validity
            Not Before: Oct  2 14:56:32 2022 GMT
            Not After : Sep 24 14:57:00 2052 GMT
  • Информация об "Удостоверяющем центре" - верная
        Subject: C = Ukraine, L = Kharkov, street = app. 131 + street = Lui Pastera St. 322, postalCode = 61172, O = Home Network, OU = IT, CN = Root Certificate Authority for Home Network v2
  • Назначение сертефиката - CA, это видно из полей
    • X509v3 Key Usage: critical Certificate Sign, CRL Sign
    • X509v3 Basic Constraints: critical CA:TRUE
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier:
                02:F8:85:2B:75:F8:E1:1C:69:28:30:32:21:2D:86:71:AF:AB:EC:3C
            X509v3 Authority Key Identifier:
                keyid:02:F8:85:2B:75:F8:E1:1C:69:28:30:32:21:2D:86:71:AF:AB:EC:3C

URL для корневого CA

Публикуем URL’ы для корневого центра сертификации (этим функционалом я пока-что не пользовался)

vault \
  write \
    k8s_pki_root_ca/config/urls \
      issuing_certificates="http://vault.home:8200/v1/k8s_pki_root_ca/ca" \
      crl_distribution_points="http://vault.home:8200/v1/k8s_pki_root_ca/crl"
Success! Data written to: k8s_pki_root_ca/config/urls