Vault PKI Kubernetes the hard way v2 Root CA: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 36: Строка 36:
 
==Конфигурация Vault==
 
==Конфигурация Vault==
 
* ВАЖНО: Тип определяет будет ли показан ключ от сертификата. В случае <B> internal</B> ключ показа не будет и сертификат можно будет использовать только в Vault
 
* ВАЖНО: Тип определяет будет ли показан ключ от сертификата. В случае <B> internal</B> ключ показа не будет и сертификат можно будет использовать только в Vault
  +
* Эта команда вызывает генерацию самоподписаного сертификата, который будет использоваться в качестве корневого
 
  +
* тут не указываются ограничения налагаемые на сертификат - но Vault сам "знает" что нужно сделать - из пути '''root/generate/'''
 
<PRE>
 
<PRE>
 
TYPE="exported"
 
TYPE="exported"
 
#TYPE="internal"
 
#TYPE="internal"
   
  +
vault \
vault write -format=json pki_root_ca/root/generate/${TYPE} \
 
  +
write \
common_name="Root Certificate Authority for Home Network" \
 
 
-format=json k8s_pki_root_ca/root/generate/${TYPE} \
country="Ukraine" \
 
 
common_name="Root Certificate Authority for Home Network v2" \
locality="Kharkov" \
 
 
country="Ukraine" \
street_address="Lui Pastera St. 322, app. 131" \
 
postal_code="61172" \
+
locality="Kharkov" \
 
street_address="Lui Pastera St. 322, app. 131" \
organization="Home Network" \
 
ou="IT" \
+
postal_code="61172" \
 
organization="Home Network" \
ttl="262800h" > pki-root-ca.json
 
  +
ou="IT" \
 
ttl="262800h" > k8s_pki_root_ca.json
 
</PRE>
 
</PRE>
 
* ttl="262800h" - 30 лет
 
* ttl="262800h" - 30 лет
 
* В теории возможно использовать пре-созданный CA или даже цепочку - смотреть тут: https://groups.google.com/g/vault-tool/c/y4IcgiLBG4c
 
* В теории возможно использовать пре-созданный CA или даже цепочку - смотреть тут: https://groups.google.com/g/vault-tool/c/y4IcgiLBG4c
   
===Просмотр результата===
+
==Просмотр результата==
 
Результат работы команды (длинный вывод пропущен):
 
Результат работы команды (длинный вывод пропущен):
 
<PRE>
 
<PRE>

Версия 11:00, 3 октября 2022


Создание Корневого СА (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 pki-root-ca.json | jq -r .data.certificate > rootCA.pem
cat pki-root-ca.json | jq -r .data.issuing_ca > rootCA_issuing_ca.pem
cat pki-root-ca.json | jq -r .data.private_key > rootCA_private_key.pem

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

openssl  x509 -in rootCA.pem -text -noout

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

  • Время жизни - 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