Vault PKI Kubernetes the hard way v2 Root CA: различия между версиями
Материал из noname.com.ua
Перейти к навигацииПерейти к поискуSirmax (обсуждение | вклад) (Новая страница: «Категория:K8s Категория:Hashicorp_Vault Категория:Vault Категория:Linux Категория:Kubernetes the ha...») |
Sirmax (обсуждение | вклад) |
||
(не показано 9 промежуточных версий этого же участника) | |||
Строка 5: | Строка 5: | ||
[[Категория:Kubernetes the hard way v2]] |
[[Категория:Kubernetes the hard way v2]] |
||
− | =Создание СА |
+ | =Создание Корневого СА (Root CA)= |
Эта страница - часть большой статьи про CA используемые в k8s: [[Vault_PKI_Kubernetes_the_hard_way_v2]] |
Эта страница - часть большой статьи про CA используемые в k8s: [[Vault_PKI_Kubernetes_the_hard_way_v2]] |
||
<BR> |
<BR> |
||
+ | ==Включить PKI для корневого сертификата== |
||
+ | По сути тут создается путь (endpoint!) который реализует функционал PKI - как бы говорим Vault-у что бы по определенному пути работал определенным образом |
||
+ | <br> |
||
+ | В целом значение path может быть любым, но удобно давать осознанные имена |
||
+ | <PRE> |
||
+ | vault \ |
||
+ | secrets \ |
||
+ | enable \ |
||
+ | -path=k8s_pki_root_ca \ |
||
+ | -description="PKI k8s Root CA" \ |
||
+ | -max-lease-ttl="262800h" \ |
||
+ | pki |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | Success! Enabled the pki secrets engine at: k8s_pki_root_ca/ |
||
+ | </PRE> |
||
+ | |||
+ | ==Проверить созданный endpoint== |
||
+ | <PRE> |
||
+ | vault secrets list | grep k8s_pki |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | k8s_pki_root_ca/ pki pki_8b6cae1e PKI k8s Root CA |
||
+ | </PRE> |
||
+ | |||
+ | =Создание корневого сертефиката (CA)= |
||
+ | ==Конфигурация Vault== |
||
+ | * ВАЖНО: Тип определяет будет ли показан ключ от сертификата. В случае <B> internal</B> ключ показа не будет и сертификат можно будет использовать только в Vault |
||
+ | * Эта команда вызывает генерацию самоподписаного сертификата, который будет использоваться в качестве корневого |
||
+ | * тут не указываются ограничения налагаемые на сертификат - но Vault сам "знает" что нужно сделать - из пути '''root/generate/''' |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | * ttl="262800h" - 30 лет |
||
+ | * В теории возможно использовать пре-созданный CA или даже цепочку - смотреть тут: https://groups.google.com/g/vault-tool/c/y4IcgiLBG4c |
||
+ | |||
+ | ==Просмотр результата== |
||
+ | Результат работы команды (длинный вывод пропущен): |
||
+ | <PRE> |
||
+ | 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 |
||
+ | } |
||
+ | </PRE> |
||
+ | Корневой сертефикат самоподписаный. Поля certificate и issuing_ca полностью совпадают. |
||
+ | |||
+ | ==Подготовка файлов с сертефикатом и ключем== |
||
+ | <PRE> |
||
+ | cat k8s_pki_root_ca.json | jq -r .data.certificate > k8s_root_certificate.pem |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | cat k8s_pki_root_ca.json | jq -r .data.issuing_ca > k8s_root_issuing_ca.pem |
||
+ | </PRE> |
||
+ | |||
+ | <PRE> |
||
+ | cat k8s_pki_root_ca.json | jq -r .data.private_key > k8s_root_private_key.key |
||
+ | </PRE> |
||
+ | ==Просмотр в привычном формате== |
||
+ | <PRE> |
||
+ | openssl x509 -text -noout -in k8s_root_certificate.pem |
||
+ | </PRE> |
||
+ | {{#spoiler:show=Root CA (Подробно, full output)| |
||
+ | <PRE> |
||
+ | Certificate: |
||
+ | Data: |
||
+ | Version: 3 (0x2) |
||
+ | Serial Number: |
||
+ | 6c:90:eb:90:d4:5f:86:6d:d8:fb:f8:f8:a0:4d:07:f8:99:1e:62:02 |
||
+ | Signature Algorithm: sha256WithRSAEncryption |
||
+ | Issuer: 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 |
||
+ | 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 |
||
+ | Subject Public Key Info: |
||
+ | Public Key Algorithm: rsaEncryption |
||
+ | RSA Public-Key: (2048 bit) |
||
+ | Modulus: |
||
+ | 00:c7:6f:7d:85:e1:7d:71:ae:cd:e2:a6:85:2d:36: |
||
+ | 85:c4:31:22:c8:bc:11:1c:c5:bd:10:ec:68:76:5d: |
||
+ | 16:e1:fe:b6:00:de:4f:c4:23:48:d4:2a:97:84:64: |
||
+ | 88:80:23:bd:63:3c:ba:40:b7:66:f6:6f:0f:b5:b7: |
||
+ | 10:88:84:d8:6e:19:08:9c:a0:54:7b:ba:ee:c2:88: |
||
+ | 99:61:fb:e9:43:22:61:bd:01:fe:f2:b0:33:56:3b: |
||
+ | 51:ad:63:57:b9:00:cf:61:38:98:12:94:f2:71:b3: |
||
+ | 39:9a:b0:d1:df:20:5e:39:3f:39:fd:bc:47:92:02: |
||
+ | 7e:83:c5:7b:9a:98:2c:b4:0f:48:6c:33:59:0c:49: |
||
+ | a0:e5:e7:28:d0:78:30:9f:f2:c2:e1:13:3c:d7:9c: |
||
+ | 7e:98:95:77:40:36:f6:98:d7:05:21:c9:35:fe:de: |
||
+ | 7c:17:c4:f4:19:0f:8e:a2:d8:50:7c:ec:02:ee:d0: |
||
+ | be:d6:ab:e5:26:36:f7:e5:13:fe:43:70:91:68:9e: |
||
+ | 46:dd:d1:53:0e:a4:db:d2:1f:31:63:80:7a:e7:07: |
||
+ | 1e:3a:79:e4:38:7e:ee:c1:60:86:a4:7c:26:d3:f2: |
||
+ | 87:c9:f2:3b:f6:c1:af:33:3e:d2:fa:62:5e:47:ca: |
||
+ | f1:2b:93:45:4b:30:47:98:7b:f8:cd:a2:19:e7:8a: |
||
+ | c4:67 |
||
+ | Exponent: 65537 (0x10001) |
||
+ | 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 |
||
+ | |||
+ | Signature Algorithm: sha256WithRSAEncryption |
||
+ | a6:1f:70:a7:f6:3e:0a:5c:ec:11:f7:a4:df:da:c5:bb:42:c3: |
||
+ | 5a:14:f2:ae:29:e7:f2:a4:c9:3e:90:e5:75:71:4a:f9:0e:e8: |
||
+ | 64:67:d5:5f:ae:a2:ea:1f:16:1b:ab:8a:e7:5b:c8:1d:1e:42: |
||
+ | 8e:d7:e7:3d:be:02:e1:37:fa:3b:b3:df:0f:d8:19:41:49:53: |
||
+ | f7:c6:b7:ed:56:7a:60:6e:c5:fd:ea:b4:f7:43:e8:7b:72:1c: |
||
+ | b1:7a:4a:70:93:87:53:a5:66:92:0b:89:73:cd:17:ac:c7:31: |
||
+ | 7a:b8:7d:14:55:c8:45:56:9a:40:74:39:b4:57:12:ad:33:e4: |
||
+ | 5a:b4:34:75:54:f5:cc:b1:3f:ae:e1:f7:d5:7a:f8:dd:c8:2c: |
||
+ | db:24:10:69:83:a8:6c:02:b4:3c:ab:ef:17:ac:77:ad:fc:a8: |
||
+ | de:f1:39:34:28:fb:63:34:7a:a0:95:ea:73:9d:c3:a6:75:c4: |
||
+ | 69:95:2b:dd:64:a8:46:04:6c:53:20:18:b0:42:ab:9d:c0:9f: |
||
+ | b1:60:fc:7e:38:ca:d8:b3:b4:9a:8a:22:0c:6d:ff:36:36:3d: |
||
+ | 6b:97:04:f2:b4:9e:cb:10:e4:3f:3b:09:62:f5:54:34:08:21: |
||
+ | 51:d8:2d:2f:31:3d:0d:40:3d:64:c5:e4:ce:77:bb:88:7a:b7: |
||
+ | d9:ab:33:f5 |
||
+ | -----BEGIN CERTIFICATE----- |
||
+ | MIIEdTCCA12gAwIBAgIUbJDrkNRfhm3Y+/j4oE0H+JkeYgIwDQYJKoZIhvcNAQEL |
||
+ | BQAwgcAxEDAOBgNVBAYTB1VrcmFpbmUxEDAOBgNVBAcTB0toYXJrb3YxLTAPBgNV |
||
+ | BAkTCGFwcC4gMTMxMBoGA1UECRMTTHVpIFBhc3RlcmEgU3QuIDMyMjEOMAwGA1UE |
||
+ | ERMFNjExNzIxFTATBgNVBAoTDEhvbWUgTmV0d29yazELMAkGA1UECxMCSVQxNzA1 |
||
+ | BgNVBAMTLlJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGZvciBIb21lIE5ldHdv |
||
+ | cmsgdjIwIBcNMjIxMDAyMTQ1NjMyWhgPMjA1MjA5MjQxNDU3MDBaMIHAMRAwDgYD |
||
+ | VQQGEwdVa3JhaW5lMRAwDgYDVQQHEwdLaGFya292MS0wDwYDVQQJEwhhcHAuIDEz |
||
+ | MTAaBgNVBAkTE0x1aSBQYXN0ZXJhIFN0LiAzMjIxDjAMBgNVBBETBTYxMTcyMRUw |
||
+ | EwYDVQQKEwxIb21lIE5ldHdvcmsxCzAJBgNVBAsTAklUMTcwNQYDVQQDEy5Sb290 |
||
+ | IENlcnRpZmljYXRlIEF1dGhvcml0eSBmb3IgSG9tZSBOZXR3b3JrIHYyMIIBIjAN |
||
+ | BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx299heF9ca7N4qaFLTaFxDEiyLwR |
||
+ | HMW9EOxodl0W4f62AN5PxCNI1CqXhGSIgCO9Yzy6QLdm9m8PtbcQiITYbhkInKBU |
||
+ | e7ruwoiZYfvpQyJhvQH+8rAzVjtRrWNXuQDPYTiYEpTycbM5mrDR3yBeOT85/bxH |
||
+ | kgJ+g8V7mpgstA9IbDNZDEmg5eco0Hgwn/LC4RM815x+mJV3QDb2mNcFIck1/t58 |
||
+ | F8T0GQ+OothQfOwC7tC+1qvlJjb35RP+Q3CRaJ5G3dFTDqTb0h8xY4B65wceOnnk |
||
+ | OH7uwWCGpHwm0/KHyfI79sGvMz7S+mJeR8rxK5NFSzBHmHv4zaIZ54rEZwIDAQAB |
||
+ | o2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU |
||
+ | AviFK3X44RxpKDAyIS2Gca+r7DwwHwYDVR0jBBgwFoAUAviFK3X44RxpKDAyIS2G |
||
+ | ca+r7DwwDQYJKoZIhvcNAQELBQADggEBAKYfcKf2Pgpc7BH3pN/axbtCw1oU8q4p |
||
+ | 5/KkyT6Q5XVxSvkO6GRn1V+uouofFhuriudbyB0eQo7X5z2+AuE3+juz3w/YGUFJ |
||
+ | U/fGt+1WemBuxf3qtPdD6HtyHLF6SnCTh1OlZpILiXPNF6zHMXq4fRRVyEVWmkB0 |
||
+ | ObRXEq0z5Fq0NHVU9cyxP67h99V6+N3ILNskEGmDqGwCtDyr7xesd638qN7xOTQo |
||
+ | +2M0eqCV6nOdw6Z1xGmVK91kqEYEbFMgGLBCq53An7Fg/H44ytiztJqKIgxt/zY2 |
||
+ | PWuXBPK0nssQ5D87CWL1VDQIIVHYLS8xPQ1APWTF5M53u4h6t9mrM/U= |
||
+ | -----END CERTIFICATE----- |
||
+ | </PRE> |
||
+ | }} |
||
+ | На что тут обратить внимание: |
||
+ | * Время жизни - 30 лет (должно хватить) |
||
+ | <PRE> |
||
+ | Validity |
||
+ | Not Before: Oct 2 14:56:32 2022 GMT |
||
+ | Not After : Sep 24 14:57:00 2052 GMT |
||
+ | </PRE> |
||
+ | * Информация об "Удостоверяющем центре" - верная |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | * Назначение сертефиката - CA, это видно из полей |
||
+ | ** X509v3 Key Usage: critical Certificate Sign, CRL Sign |
||
+ | ** X509v3 Basic Constraints: critical CA:TRUE |
||
+ | <PRE> |
||
+ | 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 |
||
+ | </PRE> |
||
+ | |||
+ | ==URL для корневого CA== |
||
+ | Публикуем URL’ы для корневого центра сертификации |
||
+ | (этим функционалом я пока-что не пользовался) |
||
+ | <PRE> |
||
+ | 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" |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | Success! Data written to: k8s_pki_root_ca/config/urls |
||
+ | </PRE> |
Текущая версия на 11:10, 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
- ttl="262800h" - 30 лет
- В теории возможно использовать пре-созданный CA или даже цепочку - смотреть тут: https://groups.google.com/g/vault-tool/c/y4IcgiLBG4c
Просмотр результата
Результат работы команды (длинный вывод пропущен):
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