Расширения X.509: SAN, KeyUsage и профили сертификатов¶
ГОСТ-сертификат должен быть не только корректно подписан, но и соответствовать задаче: TLS-сервер, VPN-клиент, сервисная подпись, промежуточный или корневой УЦ. Профиль задаётся расширениями X.509.
Шпаргалка по назначению¶
| Поле | Пример | Значение |
|---|---|---|
basicConstraints |
CA:FALSE |
Конечный сертификат, не УЦ |
basicConstraints |
CA:TRUE,pathlen:0 |
УЦ, запрещены подчинённые УЦ |
keyUsage |
digitalSignature |
Использование для подписей |
keyUsage |
keyCertSign,cRLSign |
Полномочия УЦ |
extendedKeyUsage |
serverAuth |
TLS-сервер |
extendedKeyUsage |
clientAuth |
TLS-клиент |
subjectAltName |
DNS:app.example |
Имя сервера, проверяемое клиентом |
authorityKeyIdentifier |
keyid,issuer |
Ссылка на ключ издателя |
subjectKeyIdentifier |
hash |
Идентификатор ключа субъекта |
Серверный профиль¶
basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature
extendedKeyUsage=serverAuth
subjectAltName=DNS:server.example,DNS:api.server.example
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
Для действующего домена замените .example своими DNS-именами. Современный TLS-клиент проверяет прежде всего SAN, а не только CN.
Клиентский профиль¶
Профиль корневого УЦ¶
basicConstraints=critical,CA:TRUE,pathlen:0
keyUsage=critical,keyCertSign,cRLSign
subjectKeyIdentifier=hash
Нельзя выставлять CA:TRUE у конечного сертификата только ради устранения ошибки валидации цепочки.
Посмотреть расширения в выпущенном сертификате¶
Проверить сертификат относительно задачи¶
openssl verify -purpose sslserver -CAfile root.crt server.crt
openssl verify -purpose sslclient -CAfile root.crt client.crt
Параметр -purpose помогает обнаружить неподходящее использование ключа. Итоговая совместимость зависит также от криптопрофиля TLS, выбранного сервером.
Как подготовить CSR с SAN¶
cat > server-req.cnf <<'EOF'
[ req ]
prompt = no
distinguished_name = subject
req_extensions = ext
[ subject ]
C=RU
O=NiceSoft
CN=server.example
[ ext ]
subjectAltName=DNS:server.example,DNS:api.server.example
EOF
openssl req -new -key server.key \
-config server-req.cnf -out server.csr
openssl req -in server.csr -noout -text
Наличие SAN в CSR не гарантирует, что УЦ автоматически перенесёт его в сертификат: выдающий УЦ применяет свою политику.
Продолжение: создание УЦ, TLS.