Сертификаты
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 в безопасное место.