Vault PKI Intermediate ca etcd Roles and permissions Kubernetes the hard way v2: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
Строка 648: | Строка 648: | ||
done. |
done. |
||
</PRE> |
</PRE> |
||
+ | |||
+ | После этого curl может подключиться без ошибок верефикации |
||
+ | <PRE> |
||
+ | curl -v https://vault.example.home:8203 |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | * successfully set certificate verify locations: |
||
+ | * CAfile: none |
||
+ | CApath: /etc/ssl/certs |
||
+ | * TLSv1.3 (OUT), TLS handshake, Client hello (1): |
||
+ | * TLSv1.3 (IN), TLS handshake, Server hello (2): |
||
+ | * TLSv1.2 (IN), TLS handshake, Certificate (11): |
||
+ | * TLSv1.2 (IN), TLS handshake, Server key exchange (12): |
||
+ | * TLSv1.2 (IN), TLS handshake, Server finished (14): |
||
+ | * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): |
||
+ | * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): |
||
+ | * TLSv1.2 (OUT), TLS handshake, Finished (20): |
||
+ | * TLSv1.2 (IN), TLS handshake, Finished (20): |
||
+ | * SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 |
||
+ | * ALPN, server accepted to use http/1.1 |
||
+ | * Server certificate: |
||
+ | * subject: C=Ukraine; L=Kharkov; street=Lui Pastera st 322 app. 311; postalCode=61172; O=Home Network; OU=IT; CN=vault.example.home |
||
+ | * start date: Oct 6 11:41:54 2022 GMT |
||
+ | * expire date: Oct 5 11:42:20 2027 GMT |
||
+ | * subjectAltName: host "vault.example.home" matched cert's "vault.example.home" |
||
+ | * issuer: C=Ukraine; L=Kharkov; street=Lui Pastera st. 322 app. 131; postalCode=61172; O=K8s The Hardest Way Labs; OU=IT; CN=Intermediate CA for service ETCd |
||
+ | * SSL certificate verify ok. |
||
+ | > GET / HTTP/1.1 |
||
+ | > Host: vault.example.home:8203 |
||
+ | > User-Agent: curl/7.64.0 |
||
+ | > Accept: */* |
||
+ | > |
||
+ | < HTTP/1.1 404 Not Found |
||
+ | < Server: nginx/1.14.2 |
||
+ | < Date: Fri, 07 Oct 2022 17:22:22 GMT |
||
+ | < Content-Type: text/plain; charset=utf-8 |
||
+ | < Content-Length: 19 |
||
+ | < Connection: keep-alive |
||
+ | < Cache-Control: no-store |
||
+ | < X-Content-Type-Options: nosniff |
||
+ | </PRE> |
||
+ | Код 404 тут ожидаем так как нет задачи получить данные, а только проверить правильность настройки SSL |
||
==Получение клиентского сертефиката== |
==Получение клиентского сертефиката== |
Версия 20:42, 7 октября 2022
Работа с PKI
Создание пользователей и ролей не относится непосредсвенно к настройке PKI но добавлено для полноты так как все равно надо настроить =)
Эта страница - часть большой статьи про CA используемые в k8s: Vault_PKI_Kubernetes_the_hard_way_v2
Упрощение работы
Путь к PKI (k8s_pki_intermediate_ca_for_service_etcd) встречается многократно, и он вынесен в переменную
cat 00_env
export PKI_NAME="k8s_pki_intermediate_ca_for_service_etcd"
Роли
По сути роли здесь - это ПУТЬ к которому нужно будет дать доступ с помощью политик
Тестовая роль для серверных сертификатов
- example-dot-home-server-server-crt - имя роли
- allowed_domains - разрешенный домен для этой роли example.home (настройка работает совместно с allow_subdomains и allow_bare_domains)
- allow_subdomains - разрешить саб-домены к домену определенному в allowed_domains
- allow_any_name - могут ли клиенты запрашивать любой CN. (выглядит небезопасным)
- allow_bare_domains - можно ли запрашивать сертификаты для самого домена из allowed_domains - в примере это example.home
- allow_glob_domain - Позволяет именам, указанным в allow_domains, содержать шаблоны подстановок (например, ftp*.example.home в примере ). Клиентам будет разрешено запрашивать сертификаты с именами, соответствующими шаблонам.
- allow_ip_sans - указывает, могут ли клиенты запрашивать альтернативные имена субъектов IP. Проверка не выполняется, за исключением проверки того, что заданные значения являются допустимыми IP-адресами.
- allow_localhost
- client_flag
- server_flag
- enforce_hostnames
- key_usage
- DigitalSignature
- KeyEncipherment
- ext_key_usage
- ServerAuth
- require_cn
vault\ write \ ${PKI_NAME}/roles/example-dot-home-server-crt \ country="Ukraine" \ locality="Kharkov" \ street_address="Lui Pastera st 322 app. 311"\ postal_code="61172" \ organization="Home Network" \ ou="IT" \ allowed_domains="example.home" \ allow_subdomains=true \ max_ttl="87600h" \ key_bits="2048" \ key_type="rsa" \ allow_any_name=false \ allow_bare_domains=false \ allow_glob_domain=false \ allow_ip_sans=true \ allow_localhost=false \ client_flag=false \ server_flag=true \ enforce_hostnames=true \ key_usage="DigitalSignature,KeyEncipherment" \ ext_key_usage="ServerAuth" \ require_cn=true
Success! Data written to: k8s_pki_intermediate_ca_for_service_etcd/roles/example-dot-home-server-crt
Тестовая роль для клиентских сертификатов
vault \ write \ ${PKI_NAME}/roles/example-dot-home-client-crt \ country="Ukraine" \ locality="Kharkov" \ street_address="Lui Pastera st. 322 app. 131" \ postal_code="61172" \ organization="Home Network" \ ou="IT" \ allow_subdomains=true \ max_ttl="87600h" \ key_bits="2048" \ key_type="rsa" \ allow_any_name=true \ allow_bare_domains=false \ allow_glob_domain=false \ allow_ip_sans=false \ allow_localhost=false \ client_flag=true \ server_flag=false \ enforce_hostnames=false \ key_usage="DigitalSignature" \ ext_key_usage="ClientAuth" \ require_cn=true
Success! Data written to: k8s_pki_intermediate_ca_for_service_etcd/roles/example-dot-home-client-crt
Просмотр ролей
Список ролей (применительно к конкретному инстансу PKI)
vault \ list \ ${PKI_NAME}/roles
Keys ---- example-dot-home-client-crt example-dot-home-server-crt
Просмотр роли
vault \ read \ ${PKI_NAME}/roles/example-dot-home-server-crt
Key Value --- ----- allow_any_name false allow_bare_domains false allow_glob_domains false allow_ip_sans true allow_localhost false allow_subdomains true allow_token_displayname false allowed_domains [example.home] allowed_domains_template false allowed_other_sans [] allowed_serial_numbers [] allowed_uri_sans [] basic_constraints_valid_for_non_ca false client_flag false code_signing_flag false country [Ukraine] email_protection_flag false enforce_hostnames true ext_key_usage [ServerAuth] ext_key_usage_oids [] generate_lease false key_bits 2048 key_type rsa key_usage [DigitalSignature KeyEncipherment] locality [Kharkov] max_ttl 87600h no_store false not_before_duration 30s organization [Home Network] ou [IT] policy_identifiers [] postal_code [61172] province [] require_cn true server_flag true street_address [Lui Pastera st 322 app. 311] ttl 0s use_csr_common_name true use_csr_sans true
Политики
- По сути политики определяют права доступа ТОКЕНА к определнному пути.
Токен же выдается при логине - т.е. в простейшем случае политики должны назначаться на пользователя (авторизация по логину/паролю)
Для доступа к ролям создаем 2 файла с политиками:
Политика для серверных сертефикатов
Политики создаются из файлов, причем удобнее это делать в хашикорповском формате - hlc
Тут к сожалению не получится использовать переменные и нужно вставлять имя PKI вручную
example-dot-home-server-crt-policy.hlc
path "k8s_pki_intermediate_ca_for_service_etcd/issue/example-dot-home-server-crt" { capabilities = ["read", "create", "list", "update"] }
Политика для клиентских сертефикатов
example-dot-home-client-crt-policy.hlc
path "k8s_pki_intermediate_ca_for_service_etc/issue/example-dot-home-client-crt" { capabilities = ["read", "create", "list", "update"] }
Создание политик из файлов
Политика серверных сертификатов
vault policy write example-dot-home-server-crt-policy example-dot-home-server-crt-policy.hlc
Success! Uploaded policy: example-dot-home-server-crt-policy
Политика клиентских сертификатов
vault policy write example-dot-home-client-crt-policy example-dot-home-client-crt-policy.hlc
Success! Uploaded policy: example-dot-home-client-crt-policy
Проверка созданных политик
Список политик
vault policy list
default example-dot-home-client-crt-policy example-dot-home-server-crt-policy root
Просмотр политики example-dot-home-server-crt-policy
vault policy read example-dot-home-server-crt-policy path "pki_intermediate_ca/issue/example-dot-home-server-crt" { capabilities = ["read", "create", "list", "update"] }
Просмотр политики example-dot-home-client-crt-policy
vault policy read example-dot-home-client-crt-policy
path "pki_intermediate_ca/issue/example-dot-home-client-crt" { capabilities = ["read", "create", "list", "update"] }
Привязка политик к пользователям
- Пользователи с логином и паролем хорошо подходят для тестирования
- Включить авторизацию по логину/паролю нужно заранее (https://noname.com.ua/mediawiki/index.php/Vault)
Просмотр пользователей
Этот шаг нужен что бы проверить что пользователей которые будем создавать пока не существует
vault \ list \ auth/userpass/users
Создание пользователей
- Политики перечисляются через запятую (что не очевидно из документации, возможно уже исправлено)
- Имена пользователей "говорят" о их назначении
- Пароли простые для тестирования но разные у разных пользователей (для того что бы не допустить ошибок при тестировании и не перепутать пользователя)
Пользователь для получения серверных сертификатов
vault \ write auth/userpass/users/example-dot-home-server-crt-user \ password=server \ policies="example-dot-home-server-crt-policy,default"
Пользователь для получения клиентских сертификатов
vault \ write auth/userpass/users/example-dot-home-client-crt-user \ password=client \ policies="example-dot-home-client-crt-policy,default"
Пользователь для получения и серверных и клиентских сертификатов
vault \ write auth/userpass/users/example-dot-home-any-crt-user \ password=any \ policies="example-dot-home-server-crt-policy,example-dot-home-client-crt-policy,default"
Просмотр созданных пользователей
Список пользователей
vault \ list \ auth/userpass/users
Keys ---- example-dot-home-any-crt-user example-dot-home-client-crt-user example-dot-home-server-crt-user
Просмотр пользователя для создания клиентских и серверных сертификатов
vault \ read \ auth/userpass/users/example-dot-home-any-crt-user
Key Value --- ----- policies [default example-dot-home-client-crt-policy example-dot-home-server-crt-policy] token_bound_cidrs [] token_explicit_max_ttl 0s token_max_ttl 0s token_no_default_policy false token_num_uses 0 token_period 0s token_policies [default example-dot-home-client-crt-policy example-dot-home-server-crt-policy] token_ttl 0s token_type default
Просмотр пользователя для создания серверныхсертификатов
vault \ read \ auth/userpass/users/example-dot-home-server-crt-user
Key Value --- ----- policies [default example-dot-home-server-crt-policy] token_bound_cidrs [] token_explicit_max_ttl 0s token_max_ttl 0s token_no_default_policy false token_num_uses 0 token_period 0s token_policies [default example-dot-home-server-crt-policy] token_ttl 0s token_type default
Просмотр пользователя для создания клиентских сертификатов
vault \ read \ auth/userpass/users/example-dot-home-client-crt-user
Key Value --- ----- policies [default example-dot-home-client-crt-policy] token_bound_cidrs [] token_explicit_max_ttl 0s token_max_ttl 0s token_no_default_policy false token_num_uses 0 token_period 0s token_policies [default example-dot-home-client-crt-policy] token_ttl 0s token_type default
Проверка получения сертефикатов
- Получить сертификат для тестового домена
- Проверить что пользователь с правами на серверные сертификаты не может получить клиентские и то что пользователь с правами на серверные сертификаты не может получить клиентские
Получение серверного сертефиката
Авторизация с логином и паролем
vault \ login \ -method=userpass \ username=example-dot-home-server-crt-user \ password=server
Key Value --- ----- token s.Wiy7YVCrte88i0QIHc4jmvQP token_accessor ptB7o9d6yOq5w4Ra5Q44W1FF token_duration 768h token_renewable true token_policies ["default" "example-dot-home-server-crt-policy"] identity_policies [] policies ["default" "example-dot-home-server-crt-policy"] token_meta_username example-dot-home-server-crt-user
Получение сертефиката
- Получаем сертификат для тестового домена - vault.example.home и Alt Name pki.example.home
vault \ write \ -format=json \ ${PKI_NAME}/issue/example-dot-home-server-crt \ common_name="vault.example.home" \ alt_names="pki.example.home" \ ttl="43800h" > vault.example.home.crt
Проверка полученного сертефиката
Результат в файле:
cat vault.example.home.crt
Сокращенный вывод:
{ "request_id": "d2ff6e16-1bf6-730a-f4d1-2aefa2fcbb3e", "lease_id": "", "lease_duration": 0, "renewable": false, "data": { "ca_chain": [ "-----BEGIN CERTIFICATE-----rCdewvVGkgifREEGI2GltrDrH6rMugtVjuNAWzW40pVLKl/+0/Jv87wAv\nfITqQgiqa0FjitvfYQO2qIxSCJkt+kD3Vg==\n-----END CERTIFICATE-----" ], "certificate": "-----BEGIN CERTIFICATE-----m35waa9ld+hkNIcf/1qR4Gvwae9w0\n-----END CERTIFICATE-----", "expiration": 1822736540, "issuing_ca": "-----BEGIN CERTIFICATE-----rCdewvVGkgifREEGI2GltrDrH6rMugtVjuNAWzW40pVLKl/+0/Jv87wAv\nfITqQgiqa0FjitvfYQO2qIxSCJkt+kD3Vg==\n-----END CERTIFICATE-----", "private_key": "-----BEGIN RSA PRIVATE KEY-----vNhpK6RKn2b4EExuuZTRAcPEV3ddhOOoZpyy48WVEF5Iq3s+7/NZOq66poZUz17z\nwhRJIuic/EzYBnmKy0T4wdCyhkqLVGHIvH+412cJ5eqyHeMQbzG+oA==\n-----END RSA PRIVATE KEY-----", "private_key_type": "rsa", "serial_number": "28:ac:20:32:fe:46:b2:78:61:11:f0:46:da:e7:d2:cf:02:fc:4f:f1" }, "warnings": null }
Из JSON можно выделить отдельные поля
cat vault.example.home.crt | jq -r .data.ca_chain[] > vault.example.home.ca_chain.pem cat vault.example.home.crt | jq -r .data.certificate > vault.example.home.certificate.pem cat vault.example.home.crt | jq -r .data.issuing_ca > vault.example.home.issuing_ca.pem
Сертификат сервера
Наиболее интересные поля - ожидаемые значения:
- CN = vault.example.home
- X509v3 Subject Alternative Name: DNS:pki.example.home, DNS:vault.example.home
- IP адреса в AltNames не присутвуют
openssl x509 -in vault.example.home.certificate.pem -text -noout
Certificate: Data: Version: 3 (0x2) Serial Number: 28:ac:20:32:fe:46:b2:78:61:11:f0:46:da:e7:d2:cf:02:fc:4f:f1 Signature Algorithm: sha256WithRSAEncryption Issuer: C = Ukraine, L = Kharkov, street = Lui Pastera st. 322 app. 131, postalCode = 61172, O = K8s The Hardest Way Labs, OU = IT, CN = Intermediate CA for service ETCd Validity Not Before: Oct 6 11:41:54 2022 GMT Not After : Oct 5 11:42:20 2027 GMT Subject: C = Ukraine, L = Kharkov, street = Lui Pastera st 322 app. 311, postalCode = 61172, O = Home Network, OU = IT, CN = vault.example.home Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:ad:4e:38:25:33:11:b0:aa:ab:1a:17:7f:8e:df: ... e5:80:12:b9:d2:68:29:5e:85:d3:7a:3e:06:e8:e7: e6:27 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication X509v3 Subject Key Identifier: 4C:4C:22:C1:44:68:25:D0:6B:AA:7F:AB:5C:8E:16:F5:B7:BC:DF:AF X509v3 Authority Key Identifier: keyid:60:41:31:79:58:90:A9:63:62:C2:26:FD:8F:02:B6:07:1A:1D:5C:50 Authority Information Access: CA Issuers - URI:http://vault.home:8200/v1/k8s_pki_intermediate_ca_for_service_etcd/ca X509v3 Subject Alternative Name: DNS:pki.example.home, DNS:vault.example.home X509v3 CRL Distribution Points: Full Name: URI:http://vault.home:8200/v1/k8s_pki_intermediate_ca_for_service_etcd/crl Signature Algorithm: sha256WithRSAEncryption 7a:ee:f9:5a:88:dc:ed:0d:b1:f7:26:97:d9:fa:98:e7:b3:43: ...
Промежуточный CA
openssl x509 -in vault.example.home.issuing_ca.pem -text -noout
- Видно CN = Intermediate CA for service ETCd, другими словами это промежуточный сертификат удостоверяющего центра (СА) для ETCd
Certificate: Data: Version: 3 (0x2) Serial Number: 35:0e:d5:7b:85:55:57:d3:99:ed:2c:35:c7:db:d3:99:ac:9b:a3:01 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 3 15:53:05 2022 GMT Not After : Sep 28 15:53:35 2042 GMT Subject: C = Ukraine, L = Kharkov, street = Lui Pastera st. 322 app. 131, postalCode = 61172, O = K8s The Hardest Way Labs, OU = IT, CN = Intermediate CA for service ETCd Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:c3:04:35:f0:29:59:33:db:a3:8a:88:f6:44:b0: ... 58:4a:d6:3d:3c:5d:3f:42:a0:d8:5b:65:5f:71:ba: 3e:57 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Key Identifier: 60:41:31:79:58:90:A9:63:62:C2:26:FD:8F:02:B6:07:1A:1D:5C:50 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 Authority Information Access: CA Issuers - URI:http://vault.home:8200/v1/k8s_pki_root_ca/ca X509v3 CRL Distribution Points: Full Name: URI:http://vault.home:8200/v1/k8s_pki_root_ca/crl Signature Algorithm: sha256WithRSAEncryption 65:f8:9d:6c:6d:6a:14:d3:37:32:ae:c1:de:26:f3:c8:9f:e6: ... 42:08:aa:6b:41:63:8a:db:df:61:03:b6:a8:8c:52:08:99:2d: fa:40:f7:56
Верефикация
Окончательная проверка цепочки доверия
Корневой Сертификат → Промежуточный для СА Etcd → Тестовый Сертификат
- Корневой сертификат не является секретным (в отличие от ключа!) и его всегда можно скачать с Vault:
echo "-----BEGIN CERTIFICATE-----" > k8s_pki_root_ca.pem && \ curl "http://vault.home:8200/v1/k8s_pki_root_ca/ca" | base64 >> k8s_pki_root_ca.pem && \ echo "-----END CERTIFICATE-----" >> k8s_pki_root_ca.pem
- Указать промежуточный как untrusted (или добавить в доверенные)
openssl \ verify \ -verbose \ -CAfile k8s_pki_root_ca.pem \ -untrusted vault.example.home.issuing_ca.pem \ vault.example.home.certificate.pem
vault.example.home.certificate.pem: OK
Однако в этой команде меня смущает слово -untrusted
Второй способ - это создание "бандла" (те поместить в один файл промежуточный CA а за ним сертификат)
cat vault.example.home.issuing_ca.pem > vault.example.home.ca_bundle cat vault.example.home.certificate.pem >> vault.example.home.ca_bundle
Теперь верификация проходит без беспокоящего -untrusted
openssl \ verify \ -verbose \ -CAfile k8s_pki_root_ca.pem \ vault.example.home.ca_bundle
vault.example.home.ca_bundle: OK
Верефикация c nginx
Для полноты картины создадим тестовый web-сервер и используем подписанный сертификат
- Пример виртуалхоста
- Путь к ключу и сертификату (ключ можно получить из оригинального вывода Vault при создании сертификата,
ssl_certificate /etc/nginx/certs/vault.example.home.ca_bundle; ssl_certificate_key /etc/nginx/certs/vault.example.home.key;
Формат в nginx отличается - в файле /etc/nginx/certs/vault.example.home.ca_bundle СНАЧАЛА идет сертификат сервера, а потом - промежуточный сертификат
* Полный конфиг server { listen 8203 default_server ssl; root /var/www/html; server_name vault.example.home; access_log /var/log/nginx/vault.example.home-access.log postdata; error_log /var/log/nginx/vault.example.home-error.log; ssl_certificate /etc/nginx/certs/vault.example.home.ca_bundle; ssl_certificate_key /etc/nginx/certs/vault.example.home.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!aNULL:!MD5; location / { client_body_buffer_size 64k; client_body_in_single_buffer on; proxy_pass http://127.0.0.1:8200; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_request_buffering off; } }
Для того что бы проверить, нужно на том хосте откуда делается запрос добавить сертификат СА в доверенные
- в /usr/local/share/ca-certificates/extra положить СА (его всегда можно скачать)
- запустить update-ca-certificates
# update-ca-certificates
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... Adding debian:k8s_pki_root_ca.pem done. done.
После этого curl может подключиться без ошибок верефикации
curl -v https://vault.example.home:8203
* successfully set certificate verify locations: * CAfile: none CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.2 (IN), TLS handshake, Certificate (11): * TLSv1.2 (IN), TLS handshake, Server key exchange (12): * TLSv1.2 (IN), TLS handshake, Server finished (14): * TLSv1.2 (OUT), TLS handshake, Client key exchange (16): * TLSv1.2 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.2 (OUT), TLS handshake, Finished (20): * TLSv1.2 (IN), TLS handshake, Finished (20): * SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384 * ALPN, server accepted to use http/1.1 * Server certificate: * subject: C=Ukraine; L=Kharkov; street=Lui Pastera st 322 app. 311; postalCode=61172; O=Home Network; OU=IT; CN=vault.example.home * start date: Oct 6 11:41:54 2022 GMT * expire date: Oct 5 11:42:20 2027 GMT * subjectAltName: host "vault.example.home" matched cert's "vault.example.home" * issuer: C=Ukraine; L=Kharkov; street=Lui Pastera st. 322 app. 131; postalCode=61172; O=K8s The Hardest Way Labs; OU=IT; CN=Intermediate CA for service ETCd * SSL certificate verify ok. > GET / HTTP/1.1 > Host: vault.example.home:8203 > User-Agent: curl/7.64.0 > Accept: */* > < HTTP/1.1 404 Not Found < Server: nginx/1.14.2 < Date: Fri, 07 Oct 2022 17:22:22 GMT < Content-Type: text/plain; charset=utf-8 < Content-Length: 19 < Connection: keep-alive < Cache-Control: no-store < X-Content-Type-Options: nosniff
Код 404 тут ожидаем так как нет задачи получить данные, а только проверить правильность настройки SSL
Получение клиентского сертефиката
Проверка прав
С "серверным" пользователем - нет прав
URL: PUT http://vault.home:8200/v1/pki_intermediate_ca/issue/example-dot-home-client-crt Code: 403. Errors: * 1 error occurred: * permission denied
Получение клиентского сертификата c правильным пользователем
vault \ login \ -method=userpass \ username=example-dot-home-client-crt-user \ password=client vault write -format=json pki_intermediate_ca/issue/example-dot-home-client-crt \ common_name="vault.example.home" \ alt_names="pki.example.home" \ ttl="43800h" > vault.example.home.CLIENT.json
Ожидаемый результат:
X509v3 Extended Key Usage: TLS Web Client Authentication
openssl x509 -noout -text -in certificate_client.pem Certificate: Data: Version: 3 (0x2) Serial Number: 29:02:a3:28:8e:fc:48:bd:1a:5b:f9:46:e1:bf:87:27:e0:80:79:c3 Signature Algorithm: sha256WithRSAEncryption Issuer: C = Ukraine, L = Kharkov, street = Lui Pastera st. 322 app. 131, postalCode = 61172, O = Home Network, OU = IT, CN = Intermediate CA Validity Not Before: Oct 11 12:31:10 2021 GMT Not After : Oct 10 12:31:37 2026 GMT Subject: C = Ukraine, L = Kharkov, street = Lui Pastera st. 322 app. 131, postalCode = 61172, O = Home Network, OU = IT, CN = vault.example.home Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature X509v3 Extended Key Usage: TLS Web Client Authentication X509v3 Subject Key Identifier: 4A:1E:33:0C:03:E0:91:6D:17:1E:2B:4A:9F:53:98:7D:4C:80:43:83
Проверка прав для пользователя any
- работает каки ожидалось - можно получить сертификаты как для сервера так и для клиента
vault \ login \ -method=userpass \ username=example-dot-home-any-crt-user \ password=any vault write -format=json pki_intermediate_ca/issue/example-dot-home-client-crt \ common_name="vault.example.home" \ alt_names="pki.example.home" \ ttl="43800h" > vault.example.home.CLIENT_by_any_user.json vault write -format=json pki_intermediate_ca/issue/example-dot-home-server-crt \ common_name="vault.example.home" \ alt_names="pki.example.home" \ ttl="43800h" > vault.example.home.SERVER_by_any_user.json