[about] [index] [prev] [2020-11-24 20:43:16+03:00] [8bd5b5b9f5b8afcf94ce4a56d319237c36cbc141]
Topics: [crypto]

Свой 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, но это точно далеко
не всеми поддерживается.

[leave comment]