Минималистичный инструмент и библиотека на C99 для генерации X.509 сертификатов и CSR. Использует BearSSL для декодирования ключей и вычисления подписей. Не выполняет динамических аллокаций, использует только несколько libc-функций. В пентесте: быстрое создание PKI для лаборатории, генерация самоподписанных сертификатов для HTTPS C2, тестирование проверки TLS-клиентами, аудит mTLS-конфигурации. Поддерживает SAN (subjectAltName), кастомные сроки действия, клиентские и серверные сертификаты.
# Требования: BearSSL (libbearssl), C99 компилятор git clone https://git.sr.ht/~mcf/x509cert cd x509cert make sudo make install # Создать самоподписанный сертификат (нужен ключ) # Генерация ECDSA P-256 ключа (через openssl) openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P-256 -out server.key # Выдать сертификат с SAN x509cert -a DNS:c2.example.com -a IP:192.168.1.100 -d 365 server.key "CN=c2.example.com" > server.crt # Генерация CSR x509cert -r -a DNS:client.local server.key "CN=client" > client.csr # Выдать клиентский сертификат подписав CSR CA-ключом x509cert -c ca.crt -k ca.key -d 90 client.key "CN=pentest-client" > client.crt # Опции: # -r -- генерировать CSR (PKCS#10), не сертификат # -a altname -- добавить SAN (DNS:host или IP:addr) # -c cert -- сертификат издателя (CA) # -k key -- ключ издателя (CA key) # -d days -- срок действия в днях # -s serial -- серийный номер
x509cert — это инструмент и библиотека для генерации сертификатов X.509 и запросов на сертификат. Он написан на C99 и использует BearSSL для декодирования ключей и вычисления подписей.
Как и BearSSL, библиотека libx509cert минимально использует стандартную библиотеку. Она не выполняет динамического выделения памяти и использует лишь несколько базовых функций libc.
x509cert [-C] [-a altname]... [-c issuercert] [-k issuerkey] [-b notbefore] [-d duration] [-s serial] key [subject]
x509cert -r [-a altname]... key [subject]
Если используется флаг -r, создается сертификат запроса PKCS#10. В противном случае создается сертификат X.509. В обоих случаях структура кодируется в формате PEM и записывается в стандартный вывод. Для более подробной информации смотрите x509cert(1).
Смотрите x509cert(3).