[О блоге]
[наверх]
[пред]
[2020-11-24 20:43:16+03:00]
[8bd5b5b9f5b8afcf94ce4a56d319237c36cbc141]
Темы: [crypto][dns][tip]
Свой CA
В Паутине тьма примеров как сваять свой CA на основе OpenSSL команд. Я
считаю OpenSSL команды чистым садизмом и издевательством над человеком.
Как и код их библиотеки и документации. Привожу пример как можно сделать
свой CA на certtool из GnuTLS-а:
* Генерируем приватный ключ CA:
$ certtool --generate-privkey --bits 512 --ecc --outfile ca.example.com.key.pem
* Создаём шаблон по которому будет создаваться сертификат. Это отдельный
файл, но очень простого формата:
$ cat > ca.example.com.tmpl <<EOF
dn = "cn=ca.example.com"
serial = 1
expiration_days = 3650
ca
cert_signing_key
EOF
где указывается только самое базовое (DN/CN/serial, срок годности, то
что это CA, который может подписывать сертификаты)
* создаём самоподписанный сертификат:
$ certtool \
--generate-self-signed \
--load-privkey ca.example.com.key.pem \
--template ca.example.com.tmpl \
--outfile ca.example.com.pem
* а дальше создаём ключи и сертификаты уже для конечных целей.
Генерируем ключ:
$ certtool --generate-privkey --bits 256 --ecc --outfile $domain.key.pem
* шаблон запроса на сертификат:
$ cat > $domain.tmpl <<EOF
dn = "cn=$domain"
expiration_days = 365
signing_key
dns_name = "$domain"
EOF
dns_name добавляется subjectAltName расширение, которое обязательно
например для Go x509 модуля. Не помешает
* выпуск сертификата, подписью CA:
$ certtool \
--load-ca-certificate ca.example.com.pem \
--load-ca-privkey ca.example.com.key.pem \
--generate-certificate \
--load-privkey $domain.key.pem \
--template $domain.tmpl \
--outfile $domain.pem
Этого достаточно чтобы софт с выпущенными сертификатами работал. Почему
ECC (ECDSA)? Потому что компактно, быстро, эффективно. На помойку тех
кто умеет только RSA. Я бы конечно предпочёл EdDSA, но это точно далеко
не всеми поддерживается.
[оставить комментарий]