Перейти к содержанию

Сертификаты

Root CA

Для того что бы использовать Vault как центр сертификации нам нужно корневой CA сертификат. Основной CA сертифкат являяется главным в цепочке и на его основе будут завертся все остальные нижележащие сертификаты. Его нельзя хранить в самой системе для безопасности. Но выпускать сертификаты нам как то надо. По этому мы будем использовать цепочку сертификатов. На основе Root CA мы выпустим промежуточный (Intermediate) CA. Промежучтоный CA будет использоваться для выпуска сертификатов на основе корневого CA, но при его компроментации не пострадает вся цепочка. Используя Root CA мы сможем отозвать скомпроментирпованные сертификаты

flowchart TD
    RootCA["Root CA<br/>🔐 key + cert"]
    IntermediateCA["Intermediate CA<br/>🔐 key + cert"]

    Secret["Kubernetes Secret<br/>Intermediate CA<br/>key + cert"]

    CM["cert-manager<br/>ClusterIssuer"]

    Vault["Vault TLS"]
    Istio["Istio TLS"]
    Other["Other Services"]

    RootCA -->|signs| IntermediateCA
    IntermediateCA -->|imported| Secret
    Secret -->|uses CA| CM

    CM -->|issues / renews| Vault
    CM -->|issues / renews| Istio
    CM -->|issues / renews| Other

Создаём каталог:

mkdir -p ~/pki/vault
cd ~/pki/vault
chmod 700 .

Создаём Root CA key:
openssl genrsa -out root-ca.key 4096

Этот файл — самый важный секрет всей PKI.
Создаём Root CA:
openssl req -x509 -new -sha256 -key root-ca.key -out root-ca.crt -days 3650 -subj "/C=RU/O=Homelab/CN=Sailor lab Root CA"

Проверяем:
openssl x509 -in root-ca.crt -noout -subject -issuer -dates

Получим:
subject=C = DE, O = Homelab, CN = Homelab Root CA
issuer=C = DE, O = Homelab, CN = Homelab Root CA
Это нормально: Root CA подписан сам собой.

Intermediate CA

Создадим ключ для Intermediate CA

openssl genrsa -out vault-intermediate.key 4096

На его основе сделаем запрос на сертификат (csr)
openssl req -new -sha256 -key vault-intermediate.key -out vault-intermediate.csr -subj "/C=RU/O=Homelab/CN=Sailor Vault Intermediate CA"

Создадим конфиг для OpenSSL для выпуска Intermediate CA
nano intermediate-ext.cnf

basicConstraints = critical, CA:true, pathlen:0 
keyUsage = critical, keyCertSign, cRLSign
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer

basicConstraints - Определяет параметры сертификата.
critical - данный параметр отвечает за, то что данный контейнер настроек является обязательным. Клиент при чтении сертификата без этого параметра может проигнорировать блок настроек.
CA:true - указывает что данный сертификат является CA сертификатом
pathlen:0 - Промежуточный CA не может выпустить еще 1 промежуточный CA

keyUsage - Определяет, для каких криптографических операций можно использовать ключ сертификата.
keyCertSign - используется для подписания других сертификатов
cRLSign - может подписывать спсики отзыва Certificate Revocation List

subjectKeyIdentifier - Создаёт идентификатор публичного ключа сертификата. Параметр Hash указывает, что выпускаем в виде хеша

authorityKeyIdentifier - Указывает, какому CA принадлежит ключ, которым был подписан этот сертификат.
keyid - добавляем в сертфиикат информацию о ключе от Root CA
issuer - добовляем дополнительную инфромацию об Root CA

Подписываем Intermediate CA нашим Root CA

openssl x509 -req -sha256 -in vault-intermediate.csr -CA root-ca.crt -CAkey root-ca.key -CAcreateserial -out vault-intermediate.crt -days 1825 -extfile intermediate-ext.cnf

Проверяем цепочку. Должно быть vault-intermediate.crt: OK
openssl verify -CAfile root-ca.crt vault-intermediate.crt

Завершение

После выпуска промежуточного Intermediate CA нужно положить Root CA в безопасное место.