Сертификаты ГОСТ: CSR, X.509 и учебный удостоверяющий центр¶
В НАЙС.ОС запрос на сертификат и сам сертификат создаются стандартными командами OpenSSL. Сертификат X.509 содержит открытый ключ, идентификационные сведения и расширения; закрытый ключ хранится отдельно. Для действующих сервисов сертификат выпускается доверенным УЦ по согласованному профилю.
1. Создать рабочее пространство¶
2. Ключ и запрос на сертификат сервера¶
openssl genpkey -algorithm gost2012_256 \
-pkeyopt paramset:TCA -out server/server.key
openssl req -new -key server/server.key \
-subj '/C=RU/O=NiceSoft/OU=Lab/CN=server.example' \
-out server/server.csr
Имя server.example учебное. Для действующего сервера используется реальное имя в расширении SAN.
3. Просмотреть и проверить CSR¶
openssl req -in server/server.csr -noout -text
openssl req -in server/server.csr -noout -verify
openssl req -in server/server.csr -noout -subject
Проверка CSR подтверждает владение ключом, указанным в запросе; она не означает, что заявленные атрибуты организации уже кем-либо проверены.
4. Создать учебный корневой ключ и сертификат¶
Создайте закрытый ключ корневого УЦ и профиль расширений X.509. Здесь корневому УЦ разрешена подпись сертификатов, а другим задачам использование этого ключа не разрешается.
openssl genpkey -algorithm gost2012_256 \
-pkeyopt paramset:TCA -out ca/root.key
cat > ca/root.cnf <<'EOF'
[ req ]
distinguished_name = dn
x509_extensions = root_ext
prompt = no
[ dn ]
C=RU
O=NiceSoft
OU=Training
CN=NiceOS GOST Lab Root
[ root_ext ]
basicConstraints = critical,CA:TRUE,pathlen:0
keyUsage = critical,keyCertSign,cRLSign
subjectKeyIdentifier = hash
EOF
openssl req -new -x509 -key ca/root.key -days 365 \
-config ca/root.cnf -extensions root_ext \
-out ca/root.crt
Этот учебный корневой сертификат не должен устанавливаться в глобальное доверенное хранилище рабочих серверов.
5. Выпустить серверный сертификат¶
Создаём ограничения для серверного сертификата:
cat > server/server.ext <<'EOF'
basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature
extendedKeyUsage=serverAuth
subjectAltName=DNS:server.example
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
EOF
openssl x509 -req -in server/server.csr \
-CA ca/root.crt -CAkey ca/root.key -CAcreateserial \
-days 30 -extfile server/server.ext \
-out server/server.crt
6. Проверить цепочку и назначение¶
openssl verify -CAfile ca/root.crt server/server.crt
openssl x509 -in server/server.crt -noout -subject -issuer -dates
openssl x509 -in server/server.crt -noout -text \
| grep -E 'Signature Algorithm|Public Key Algorithm|DNS:|TLS Web Server'
Команда -CAfile ca/root.crt доверяет только указанному учебному корню. Доверие реального клиента зависит от того, какой корневой сертификат установлен в его доверенном хранилище.
7. Сверить сертификат с закрытым ключом¶
openssl pkey -in server/server.key -pubout -outform DER > key.pub.der
openssl x509 -in server/server.crt -pubkey -noout \
| openssl pkey -pubin -outform DER > cert.pub.der
cmp key.pub.der cert.pub.der && echo 'Ключ соответствует сертификату'
Эта проверка особенно важна после переноса PFX, перевыпуска сертификата или восстановления из резервной копии.
8. Сертификат клиента¶
openssl genpkey -algorithm gost2012_256 \
-pkeyopt paramset:TCA -out client/client.key
openssl req -new -key client/client.key \
-subj '/C=RU/O=NiceSoft/OU=Training/CN=Client Test' \
-out client/client.csr
cat > client/client.ext <<'EOF'
basicConstraints=critical,CA:FALSE
keyUsage=critical,digitalSignature
extendedKeyUsage=clientAuth
EOF
openssl x509 -req -in client/client.csr \
-CA ca/root.crt -CAkey ca/root.key -CAcreateserial \
-days 30 -extfile client/client.ext \
-out client/client.crt
Клиентский сертификат и серверный имеют разное назначение: clientAuth и serverAuth не взаимозаменяемы.
9. Показать отпечаток и срок действия¶
openssl x509 -in server/server.crt -noout -fingerprint -sha256
openssl x509 -in server/server.crt -noout -startdate -enddate
openssl x509 -in server/server.crt -checkend 604800 -noout
Отпечаток с -sha256 служит для сопоставления файлов сертификатов; алгоритм подписи X.509 при этом остаётся ГОСТ.
10. Эксплуатационная PKI¶
Для настоящего удостоверяющего центра дополнительно организуются: защищённый корневой ключ, отдельный выдающий УЦ, журналы выдачи, уникальные серийные номера, распределение корневых сертификатов, CRL/OCSP, резервирование, ротация, отзыв и регламент аварийного восстановления.
Продолжение: расширения сертификатов, PFX, TLS.