惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

M
MIT News - Artificial intelligence
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
J
Java Code Geeks
G
Google Developers Blog
美团技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
腾讯CDC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
The Blog of Author Tim Ferriss
月光博客
月光博客
B
Blog
WordPress大学
WordPress大学
云风的 BLOG
云风的 BLOG
博客园_首页
人人都是产品经理
人人都是产品经理
aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
Jina AI
Jina AI
S
SegmentFault 最新的问题
H
Help Net Security
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
Google DeepMind News
Google DeepMind News

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания
TLSS или portable pki service в кармане
addspin · 2026-05-11 · via Все публикации подряд на Хабре

Уровень сложностиПростой

Время на прочтение6 мин

Охват и читатели514

Обзор

Кому сертификат?

Кому сертификат?

Оглавление

Вступительная часть

Привет, меня зовут Денис Трофимов, и я работаю DevOps инженером.

Никогда не считал себя разработчиком, но всегда любил что‑нибудь написать для себя или других.

Сегодня я бы хотел рассказать о небольшом проекте, который тянется как спагетти‑код немного, немало около двух лет.

Я назвал проект TLSS, что то вроде TLS Service, или быть может как‑то иначе, не так важно.

Не знаю, стоит ли сказать спасибо за идею моему коллеге или проклянуть, но однажды он вскользь упомянул, что перед развертыванием нового стенда стоит подумать о генерации сертификатов и выбрать, чем пользоваться. Тут‑то я и подумал, зачем мне скрипты, которыми можно все сгенерировать, если я могу написать приложуху?!

Поискав в интернете минут десять и не найдя ничего подходящего, как часто со мной бывает, я просто забил, и пошел писать свое.

Конечно, говоря про скрипты сейчас этот вопрос не стоит так остро (не то чтобы он когда‑либо стоял), любая нейросеть генерирует скрипт за считанные секунды, но тогда, в те прекрасные времена... Ну вы поняли.

Приступая к делу, я определил основной концепт всего приложения: оно должно быть «карманным», то есть работать где угодно, просто переноситься и сохранять информацию.

Как итог можно выделить основные особенности:

  1. Все хранится в sqlite, почти (конфигурация генерируется отдельно).

  2. Все ключи\пароли в базе зашифрованы.

  3. Бэкапы и перенос данных не проблема - одно кольцо место хранения, что бы контролировать все данные как обычный файл со всеми вытекающими плюсами.

  4. Управляется через WEB UI.

  5. Есть API для автоматизации процессов.

  6. Насчет работы где угодно не уверен, собиралось и проверялось только на Linux\Mac.

Функционал

Корневые CA\Sub CA

Core CA

Core CA

В первый раз запустив приложение, вас встретит раздел Core CA — создания корневых сертификатов, логично, без них ничего работать не будет, или, если быть точным, выписать сертификаты не получится.

Корневой и промежуточный сертификат имеет ряд особенностей, которые стоит помнить, если вы выписываете сертификаты на сроки в пределах человеческой жизни.

Отзыв\пересоздание

Пересоздание корневого сертификата влечет за собой:

  • Пересоздание промежуточного сертификата.

  • Отзыв всех сертификатов, которые были подписаны промежуточным сертификатом.

  • Отзыв промежуточного сертификата.

  • Все отозванные ранее сертификаты удаляются.

  • Выписываются новые CA\Sub CA сертификаты.

Пересоздание промежуточного сертификата влечет за собой:

  • Отзыв всех сертификатов, которые были подписаны этим сертификатом.

  • Все отозванные ранее сертификаты удаляются.

  • Выписывается новый Sub CA сертификат.

Внешние CA

External CA

External CA

Если у вас по какой‑то причине уже имеется свой CA или цепочка из CA\Sub CA, сертификат\ключ, вы можете перейти в раздел External CA и создать сущность для вашего набора сертификатов для дальнейшей идентификации в подразделе Add CA entities, после чего в Add External CA закинуть ваши файлы.

Ключи, как при любой другой генерации, будут зашифрованы, а вы сможете выписывать новые сертификаты от имени этого CA\Sub CA.

Внешние CA используются независимо от внутренних CA приложения, проще говоря, они сами по себе, приложение за них не отвечает, не использует для генерации CRL, не пересоздает их и так далее

Серверные сертификаты

Add server certs

Add server certs

Самый часто используемый функционал, выписываем сертификаты с Extended Key Usage:

  • TLS Web Server Authentication

  • TLS Web Client Authentication

Изначально тут был только TLS Web Server Authentication, но я пока добавил оба признака, возможно, требуется добавить возможность выбора при генерации.

Поддерживается 3 алгоритма:

  • RSA

  • ECDSA

  • ED25519

Для генерации сертификатов вам потребуется создать сущность, которая бывает двух вариантов:

  1. непривязанная сущность, раздел Add entities — просто некая абстрактная единица, на которую можно выписывать сертификаты.

  2. внешний сервер, раздел Add servers — реально существующий сервер, для подключения к которому используется пароль или ssh‑ключ (создается в Add ssh key, о нем ниже). Требует указания пути хранения сертификата. После создания порт сервера всегда проверяется на доступность.

Add ssh key

В рамках подключения к удаленному серверу рассмотрим раздел Add ssh key, выполняющий роль хранилища ключей для подключения по ssh и имеющий следующий функционал:

  • При первичном запуске приложения — создается Default ключ.

  • При наличии уже существующих ключей просто загрузите их, если используете Passphrase передайте его в соответствующем поле.

Как итог TLSS может выступать в роли хранилища всех ваших SSH ключей.

App type

Пункт App type дает на выбор два варианта сохранения на удаленный сервер и разделены условно (требует дальнейшего развития и более логичного разделения):

  • haproxy — сохраняет сертификат как bundle

  • nginx — сохраняет как отдельные файлы.

Независимо от способа, рядом выгружаются CA.

Отзыв сертификата

При отзыве серверного сертификата и последующего роллбека сертификат не перезаписывает существующий, если такой был сгенерирован, то есть каждый сертификат уникален и существует автономно. Поведение при создании сертификата аналогично.

Клиентские сертификаты

Add client certs

Add client certs

Логически раздел задумывался для выпуска персонализированных сертификатов.

Сертификат выписывается с Extended Key Usage:

  • TLS Web Client Authentication

В отличии от серверных сертификатов в раздел добавлены пункты:

  • OID — создается в разделе Add OIDs и, возможно, вам потребуется для дополнительной идентификации вашего сертификата

  • Password — для создания запароленного контейнера pkcs12

OID

OID — Object IDentifier древовидный цифровой код, к примеру — 1.3.6.1.5.5.7.3.1, что расшифровывается как:

  • 1 — ISO assigned

  • 3 — ISO Identified Organization

  • 6 — US Department of Defense

  • 1 — Internet

  • 5 — Security

  • 5 — Mechanisms

  • 7 — PKIX

  • 3 — id‑kp, arc for extended key purpose OIDS

  • 1 — id_kp_serverAuth

Расписывать подробно можно на целую статью, по этому оставлю только ссылку на wiki

Добавлю лишь, что для себя вы без каких‑либо проблем можете зарегистрировать свой OID через официальную страницу IANA, никаких проблем при указании отечественной почты не вызвало, ребята быстро взяли в работу и выдали в течение недели.

Password

Поле с Password как уже упоминалось, служит для генерации закрытого контейнера pkcs12 и без этого сертификат не создать.

Выгрузить сертификат можно 3-мя способами:

  1. zip — архив

  2. pkcs12 (PKCS12 Modern) — современная реализация (не работает на macOS и других древних ОС, Google упоминает в примерах win 7, java и так далее) встроенное хранилище ключей на macOS выдает ошибку и не принимает контейнер.

  3. pkcs12-legacy (PKCS12 Legacy) — старая реализация (версия для macOS)

Отзыв сертификата

Работает аналогично серверным сертификатам.

CRL

Информация о списке отзыва добавляется как url к каждому выпущенному сертификату и берется из конфигурационного файла.

Обновляется как через заданный интервал, так и через API запрос, больше сказать особо нечего.

Для внутренних контуров кажется логично было бы использовать ocsp протокол, но я посчитал его излишне замороченным, напротив CRL на мой взгляд являет собой более прозрачную и универсальную реализацию.

API

Add API keys

Add API keys

API построено на API ключах, генерируется в разделе API keys и пока принимает несколько значений:

  • write API

  • read API

  • admin — full access

В разделе API examples можно посмотреть доступные url и содержимое для отправки.

API Examples

API Examples

Tools

Tools - Certificate info

Tools — Certificate info

В разделе пока содержится только Certificate Info, следуя из названия, предоставляет возможность быстро проверить содержимое сертификата.

Overview

Overview

Overview

Раздел призван пользователям просматривать различную статистику. Находится в зачаточном состоянии, так как пока не придумал, что и как должно там отображаться.

Заключение

В заключении хотелось бы поблагодарить вас за уделенное время, буду благодарен за комментарии и предложения. Если кому то пригодится, будет совсем хорошо, засим откланиваюсь.

Ссылка на github тут.