<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Иван Волынкин</title><subtitle>Эксперт в разработке ПО, основатель envrouter.io</subtitle><author><name>Иван Волынкин</name></author><id>https://teletype.in/atom/ivolynkin</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/ivolynkin?offset=0"></link><link rel="alternate" type="text/html" href="https://ivolynkin.ru/?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ivolynkin"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/ivolynkin?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-23T12:42:25.710Z</updated><entry><id>ivolynkin:k8s-containers</id><link rel="alternate" type="text/html" href="https://ivolynkin.ru/k8s-containers?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ivolynkin"></link><title>Kubernetes. Контейнеры</title><published>2024-04-03T05:35:55.918Z</published><updated>2024-04-05T08:30:54.859Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/99/24/9924baed-e71b-4bdd-8afe-a08b04797b48.png"></media:thumbnail><category term="kubernetes" label="Kubernetes"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/f9/8b/f98bda79-fe82-4183-b13f-f9409c3bb672.png&quot;&gt;Зачем и почему придумали контейнеризацию? Из чего она состоит?</summary><content type="html">
  &lt;h2 id=&quot;NZLp&quot;&gt;Зачем?&lt;/h2&gt;
  &lt;p id=&quot;8XS4&quot;&gt;Зачем и почему придумали контейнеризацию? Какую проблему это решает?&lt;/p&gt;
  &lt;h3 id=&quot;E4fo&quot;&gt;Конфликты зависимостей&lt;/h3&gt;
  &lt;p id=&quot;aSbr&quot;&gt;Перенесёмся на 10 лет назад. Мы хотим разместить наш веб сервис на сервере. Устанавливаем java/php/python/perl кто что любит. Дистрибутив интерпретатора или JVM тянет за собой на сервер десятки зависимостей (библиотеки, утилиты, и т. д.). Затем нужно установить СУБД. Например postgres/mysql/oracle. Установка базы тоже тянет за собой ворох библиотек. Скорее всего всё успешно встаёт. Но вот наступает момент, нам нужно установить что-то менее популярное. Например, какой-то особый парсер. И у него в зависимостях есть новая версия python 3.6. А все остальные сервисы требуют версию не выше 3.5. И мы получаем ошибку:&lt;/p&gt;
  &lt;pre id=&quot;9OEf&quot; data-lang=&quot;bash&quot;&gt;$ sudo apt-get install super-parser
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 super-parser : Depends: python3.6 (&amp;gt;= 3.6.9-1~) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.&lt;/pre&gt;
  &lt;p id=&quot;7GpF&quot;&gt;Пример достаточно синтетический, но отражает проблемы, которые случаются при установке разнообразного ПО в одну операционную систему.&lt;/p&gt;
  &lt;h3 id=&quot;1KWL&quot;&gt;Изолированная среда&lt;/h3&gt;
  &lt;p id=&quot;fMyb&quot;&gt;PHP мастера очень знакомы с такой ситуацией. Поставили сайтик на любимом Wordpress. А через неделю сервер взломан, майнит крипту и заблокировал все доступы. Тут есть две проблемы.&lt;/p&gt;
  &lt;p id=&quot;EAHa&quot;&gt;Первая, что PHP из коробки никак не мешает модифицировать исполняемый код. Например, злоумышленник заливает через формочку своего профиля на сайте фотографию. А это оказывается вовсе не фотография, а PHP скрипт. И его можно выполнить извне руками самого злоумышленника. А в этом скрипте может быть вообще всё что угодно.&lt;/p&gt;
  &lt;p id=&quot;IKrB&quot;&gt;И тут подключается вторая проблема: теоретически из такого скрипта можно завладеть доступом ко всему серверу. А дальше как угодно: украсть данные, удалить данные, спрятать вредоносный код, который будет незаметно годами делать тёмные дела, и т. д.&lt;/p&gt;
  &lt;h3 id=&quot;GuUr&quot;&gt;Виртуализация&lt;/h3&gt;
  &lt;p id=&quot;4AbT&quot;&gt;Когда появились виртуальные машины, они начали частично решать первые две проблемы. Но создали новую. Особенно она становится заметна, когда мы пытаемся изолировать каждый маленький сервис в свою виртуальную машину.&lt;/p&gt;
  &lt;p id=&quot;1VTR&quot;&gt;Виртуальная машина для своего существования требует некоторое количество ресурсов (диск, оперативная память, процессор). И чем меньше сам сервис потребляет ресурсов, тем расточительнее становятся затраты виртуальной машины.&lt;/p&gt;
  &lt;h2 id=&quot;TbOH&quot;&gt;Решение&lt;/h2&gt;
  &lt;p id=&quot;m0a1&quot;&gt;Контейнеризация — запуск приложения в изолированной среде, использующий ресурсы ядра операционной системы.&lt;/p&gt;
  &lt;p id=&quot;Dtz3&quot;&gt;Хоть до Docker уже были созданы другие решения, но именно Docker стал паровозом контейнеризации.&lt;/p&gt;
  &lt;h2 id=&quot;j4w9&quot;&gt;Сравнение с виртуализацией&lt;/h2&gt;
  &lt;figure id=&quot;qSFx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/29/2b/292bc9a8-eed2-4f23-934c-f37112487e05.png&quot; width=&quot;715&quot; /&gt;
    &lt;figcaption&gt;Виртуализация&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;xz1r&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/f6/ec/f6ec66ce-4758-4529-a454-bfabcbe7dbea.png&quot; width=&quot;716&quot; /&gt;
    &lt;figcaption&gt;Контейнеризация&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;q5XX&quot;&gt;Главное отличие контейнеризации от виртуализации — контейнеры пользуются ресурсами ядра родительской операционной системы, тогда как виртуальные машины запускают полноценные операционные системы с собственными ядрами.&lt;/p&gt;
  &lt;h2 id=&quot;a3GP&quot;&gt;Что такое Docker?&lt;/h2&gt;
  &lt;p id=&quot;BAv3&quot;&gt;Под этим термином обычно понимают три сущности:&lt;/p&gt;
  &lt;figure id=&quot;L7aT&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/00/31/003106b7-33d1-4e20-ae94-955d0d1fae91.png&quot; width=&quot;816&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;FRDO&quot;&gt;Сервис&lt;/h3&gt;
  &lt;p id=&quot;Sk8I&quot;&gt;Фоновое приложение, которое управляет контейнерами. Взаимодействие с ним происходит через HTTP API.&lt;/p&gt;
  &lt;h3 id=&quot;P3sp&quot;&gt;API&lt;/h3&gt;
  &lt;p id=&quot;aJvl&quot;&gt;HTTP API для управления сервисом. Спецификацию можно найти на официальном сайте: &lt;a href=&quot;https://docs.docker.com/engine/api/v1.43/&quot; target=&quot;_blank&quot;&gt;https://docs.docker.com/engine/api/v1.43/&lt;/a&gt;. Через команды этого API осуществляется всё взаимодействие с сервисом Docker: создание контейнеров, запуск, просмотр логов и всё остальное.&lt;/p&gt;
  &lt;h3 id=&quot;u1AU&quot;&gt;Терминальный клиент&lt;/h3&gt;
  &lt;p id=&quot;3mC4&quot;&gt;Терминальный (или консольный) клиент, который преобразует консольные команды в API запросы и отправляет их Docker сервису. На экран же выводит результаты таких команд.&lt;/p&gt;
  &lt;p id=&quot;G5V1&quot;&gt;Например:&lt;/p&gt;
  &lt;pre id=&quot;bbp0&quot; data-lang=&quot;bash&quot;&gt;$ docker info
Client: Docker Engine - Community
 Version:    24.0.5
 Context:    default
 Debug Mode: falcker/cli-plugins/docker-scout

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Vers
...&lt;/pre&gt;
  &lt;p id=&quot;Th94&quot;&gt;Под капотом клиент отправляет HTTP запрос к Docker сервису:&lt;/p&gt;
  &lt;pre id=&quot;RuuT&quot; data-lang=&quot;http&quot;&gt;GET /info HTTP/1.1
Accept: */*
Host: 0.0.0.0:2375
Connection: keep-alive
 
HTTP/1.1 200 OK
Api-Version: 1.43
Content-Type: application/json
Docker-Experimental: false
Ostype: linux
Server: Docker/24.0.5 (linux)
Transfer-Encoding: chunked
 
{&amp;quot;ID&amp;quot;:&amp;quot;d4114630-d857-44cd-b47c-e36ebbcb4bea&amp;quot;,&amp;quot;Containers&amp;quot;:0,&amp;quot;ContainersRunning&amp;quot;:0,&amp;quot;ContainersPaused&amp;quot;:0,&amp;quot;ContainersStopped&amp;quot;:0,&amp;quot;Images&amp;quot;:0,&amp;quot;Driver&amp;quot;:&amp;quot;overlay2&amp;quot;,&amp;quot;DriverStatus&amp;quot;:[[&amp;quot;Backing Filesystem&amp;quot;,&amp;quot;extfs&amp;quot;],[&amp;quot;Supports d_type&amp;quot;,&amp;quot;true&amp;quot;],[&amp;quot;Using metacopy&amp;quot;,&amp;quot;false&amp;quot;],[&amp;quot;Native Overlay Diff&amp;quot;,&amp;quot;true&amp;quot;],[&amp;quot;userxattr&amp;quot;,&amp;quot;false&amp;quot;]],&amp;quot;Plugins&amp;quot;:{&amp;quot;Volume&amp;quot;:[&amp;quot;local&amp;quot;],&amp;quot;Network&amp;quot;:[&amp;quot;bridge&amp;quot;,&amp;quot;host&amp;quot;,&amp;quot;ipvlan&amp;quot;,&amp;quot;macvlan&amp;quot;,&amp;quot;null&amp;quot;,&amp;quot;overlay&amp;quot;],&amp;quot;Authorization&amp;quot;:null,&amp;quot;Log&amp;quot;:[&amp;quot;awslogs&amp;quot;,&amp;quot;fluentd&amp;quot;,&amp;quot;gcplogs&amp;quot;,&amp;quot;gelf&amp;quot;,&amp;quot;journald&amp;quot;,&amp;quot;json-file&amp;quot;,&amp;quot;local&amp;quot;,&amp;quot;logentries&amp;quot;,&amp;quot;splunk&amp;quot;,&amp;quot;syslog&amp;quot;]},&amp;quot;MemoryLimit&amp;quot;:true,&amp;quot;SwapLimit&amp;quot;:true,&amp;quot;KernelMemoryTCP&amp;quot;:true,&amp;quot;CpuCfsPeriod&amp;quot;:true,&amp;quot;CpuCfsQuota&amp;quot;:true,&amp;quot;CPUShares&amp;quot;:true,&amp;quot;CPUSet&amp;quot;:true,&amp;quot;PidsLimit&amp;quot;:true,&amp;quot;IPv4Forwarding&amp;quot;:true,&amp;quot;BridgeNfIptables&amp;quot;:true,&amp;quot;BridgeNfIp6tables&amp;quot;:true,&amp;quot;Debug&amp;quot;:false,&amp;quot;NFd&amp;quot;:161,&amp;quot;OomKillDisable&amp;quot;:true,&amp;quot;NGoroutines&amp;quot;:301,&amp;quot;SystemTime&amp;quot;:&amp;quot;2024-04-03T13:02:44.179502329Z&amp;quot;,&amp;quot;LoggingDriver&amp;quot;:&amp;quot;json-file&amp;quot;,&amp;quot;CgroupDriver&amp;quot;:&amp;quot;cgroupfs&amp;quot;,&amp;quot;CgroupVersion&amp;quot;:&amp;quot;1&amp;quot;,&amp;quot;NEventsListener&amp;quot;:127,&amp;quot;KernelVersion&amp;quot;:&amp;quot;5.15.146.1-microsoft-standard-WSL2&amp;quot;,&amp;quot;OperatingSystem&amp;quot;:&amp;quot;Docker Desktop&amp;quot;,&amp;quot;OSVersion&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;OSType&amp;quot;:&amp;quot;linux&amp;quot;,&amp;quot;Architecture&amp;quot;:&amp;quot;x86_64&amp;quot;,&amp;quot;IndexServerAddress&amp;quot;:&amp;quot;https://index.docker.io/v1/&amp;quot;,&amp;quot;RegistryConfig&amp;quot;:{&amp;quot;AllowNondistributableArtifactsCIDRs&amp;quot;:null,&amp;quot;AllowNondistributableArtifactsHostnames&amp;quot;:null,&amp;quot;InsecureRegistryCIDRs&amp;quot;:[&amp;quot;127.0.0.0/8&amp;quot;],&amp;quot;IndexConfigs&amp;quot;:{&amp;quot;docker.io&amp;quot;:{&amp;quot;Name&amp;quot;:&amp;quot;docker.io&amp;quot;,&amp;quot;Mirrors&amp;quot;:[],&amp;quot;Secure&amp;quot;:true,&amp;quot;Official&amp;quot;:true},&amp;quot;hubproxy.docker.internal:5555&amp;quot;:{&amp;quot;Name&amp;quot;:&amp;quot;hubproxy.docker.internal:5555&amp;quot;,&amp;quot;Mirrors&amp;quot;:[],&amp;quot;Secure&amp;quot;:false,&amp;quot;Official&amp;quot;:false}},&amp;quot;Mirrors&amp;quot;:null},&amp;quot;NCPU&amp;quot;:8,&amp;quot;MemTotal&amp;quot;:33541914624,&amp;quot;GenericResources&amp;quot;:null,&amp;quot;DockerRootDir&amp;quot;:&amp;quot;/var/lib/docker&amp;quot;,&amp;quot;HttpProxy&amp;quot;:&amp;quot;http.docker.internal:3128&amp;quot;,&amp;quot;HttpsProxy&amp;quot;:&amp;quot;http.docker.internal:3128&amp;quot;,&amp;quot;NoProxy&amp;quot;:&amp;quot;hubproxy.docker.internal&amp;quot;,&amp;quot;Name&amp;quot;:&amp;quot;docker-desktop&amp;quot;,&amp;quot;Labels&amp;quot;:[],&amp;quot;ExperimentalBuild&amp;quot;:false,&amp;quot;ServerVersion&amp;quot;:&amp;quot;24.0.5&amp;quot;,&amp;quot;Runtimes&amp;quot;:{&amp;quot;io.containerd.runc.v2&amp;quot;:{&amp;quot;path&amp;quot;:&amp;quot;runc&amp;quot;},&amp;quot;runc&amp;quot;:{&amp;quot;path&amp;quot;:&amp;quot;runc&amp;quot;}},&amp;quot;DefaultRuntime&amp;quot;:&amp;quot;runc&amp;quot;,&amp;quot;Swarm&amp;quot;:{&amp;quot;NodeID&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;NodeAddr&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;LocalNodeState&amp;quot;:&amp;quot;inactive&amp;quot;,&amp;quot;ControlAvailable&amp;quot;:false,&amp;quot;Error&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;RemoteManagers&amp;quot;:null},&amp;quot;LiveRestoreEnabled&amp;quot;:false,&amp;quot;Isolation&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;InitBinary&amp;quot;:&amp;quot;docker-init&amp;quot;,&amp;quot;ContainerdCommit&amp;quot;:{&amp;quot;ID&amp;quot;:&amp;quot;3dce8eb055cbb6872793272b4f20ed16117344f8&amp;quot;,&amp;quot;Expected&amp;quot;:&amp;quot;3dce8eb055cbb6872793272b4f20ed16117344f8&amp;quot;},&amp;quot;RuncCommit&amp;quot;:{&amp;quot;ID&amp;quot;:&amp;quot;v1.1.7-0-g860f061&amp;quot;,&amp;quot;Expected&amp;quot;:&amp;quot;v1.1.7-0-g860f061&amp;quot;},&amp;quot;InitCommit&amp;quot;:{&amp;quot;ID&amp;quot;:&amp;quot;de40ad0&amp;quot;,&amp;quot;Expected&amp;quot;:&amp;quot;de40ad0&amp;quot;},&amp;quot;SecurityOptions&amp;quot;:[&amp;quot;name=seccomp,profile=unconfined&amp;quot;],&amp;quot;Warnings&amp;quot;:[&amp;quot;WARNING: No blkio throttle.read_bps_device support&amp;quot;,&amp;quot;WARNING: No blkio throttle.write_bps_device support&amp;quot;,&amp;quot;WARNING: No blkio throttle.read_iops_device support&amp;quot;,&amp;quot;WARNING: No blkio throttle.write_iops_device support&amp;quot;,&amp;quot;WARNING: daemon is not using the default seccomp profile&amp;quot;]}&lt;/pre&gt;
  &lt;h2 id=&quot;hdVe&quot;&gt;Термины&lt;/h2&gt;
  &lt;h3 id=&quot;DogU&quot;&gt;Image (образ)&lt;/h3&gt;
  &lt;p id=&quot;kfpQ&quot;&gt;Это &amp;quot;снимок системы, из которого создаются контейнеры. Можно ещё представить его как шаблон для создания контейнеров.&lt;/p&gt;
  &lt;h3 id=&quot;PUht&quot;&gt;Container (контейнер)&lt;/h3&gt;
  &lt;p id=&quot;0cRm&quot;&gt;Изолированная среда для запуска какого-либо сервиса или команды. Напоминает виртуальную машину, котороя использует ресурсы ядра родительской операционной системы.&lt;/p&gt;
  &lt;h3 id=&quot;ldt6&quot;&gt;Registry&lt;/h3&gt;
  &lt;p id=&quot;aQa4&quot;&gt;Это репозиторий Docker образов. Разработчик публикует в него свой образ, а пользователь из него образ скачивает.&lt;/p&gt;

</content></entry><entry><id>ivolynkin:KgNf2RQC9D9</id><link rel="alternate" type="text/html" href="https://ivolynkin.ru/KgNf2RQC9D9?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ivolynkin"></link><title>Моё выступление на конференции про реализацию Лямбда архитектуры в АТОЛ Sigma</title><published>2023-04-17T08:35:29.902Z</published><updated>2023-04-17T08:35:29.902Z</updated><summary type="html">https://youtu.be/5KLd-DDOeLs</summary><content type="html">
  &lt;figure id=&quot;P09F&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/5KLd-DDOeLs?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;JSWd&quot;&gt;&lt;a href=&quot;https://youtu.be/5KLd-DDOeLs&quot; target=&quot;_blank&quot;&gt;https://youtu.be/5KLd-DDOeLs&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>ivolynkin:certificate-issuing</id><link rel="alternate" type="text/html" href="https://ivolynkin.ru/certificate-issuing?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ivolynkin"></link><title>Выпуск электронного сертификата</title><published>2022-07-06T08:18:08.451Z</published><updated>2024-04-05T08:30:33.529Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/58/c1/58c10f3d-fcad-45f5-9fb7-52badc58a768.png"></media:thumbnail><category term="kriptografiya" label="Криптография"></category><summary type="html">Мне очень не хватало единого ресурса со сборником айтишных рецептов. Как baeldung.com, но не только по программированию. Попробую писать их в своём блоге.</summary><content type="html">
  &lt;h2 id=&quot;KEQI&quot;&gt;Предисловие&lt;/h2&gt;
  &lt;p id=&quot;RHu7&quot;&gt;Мне очень не хватало единого ресурса со сборником айтишных рецептов. Как baeldung.com, но не только по программированию. Попробую писать их в своём блоге.&lt;/p&gt;
  &lt;h2 id=&quot;DCCa&quot;&gt;Основные понятия&lt;/h2&gt;
  &lt;h3 id=&quot;Ebre&quot;&gt;Ключ&lt;/h3&gt;
  &lt;p id=&quot;XKbG&quot;&gt;Ключом в криптографии называют фрагмент информации (обычно строка из чисел и букв), который передаётся в криптографический алгоритм для шифрования/дешифрования и подписи/проверки данных.&lt;/p&gt;
  &lt;h3 id=&quot;VcFs&quot;&gt;Ключевая пара&lt;/h3&gt;
  &lt;p id=&quot;SO8q&quot;&gt;Приватный и публичный ключ, которые работают в паре: приватный расшифровывает данные, зашифрованные публичным напарником.&lt;/p&gt;
  &lt;h3 id=&quot;MvwN&quot;&gt;Приватный ключ&lt;/h3&gt;
  &lt;p id=&quot;loKV&quot;&gt;Известен только владельцу. Используется для &lt;strong&gt;расшифровки&lt;/strong&gt; или &lt;strong&gt;подписи&lt;/strong&gt; данных.&lt;/p&gt;
  &lt;h3 id=&quot;W5T4&quot;&gt;Публичный ключ&lt;/h3&gt;
  &lt;p id=&quot;7UJc&quot;&gt;Доступен всем. Используется для шифрования данных или &lt;strong&gt;проверки подписи&lt;/strong&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;fc71&quot;&gt;Запрос на сертификат&lt;/h3&gt;
  &lt;p id=&quot;lofF&quot;&gt;Создаётся владельцем и является основанием для выпуска сертификата.&lt;/p&gt;
  &lt;p id=&quot;k71F&quot;&gt;Состоит из трёх основных частей: информация о сертификате (в X.509 формате), идентификатор алгоритма подписи и цифровая подпись информации о сертификате. Первая часть состоит из информации о подписанте, включает публичный ключ. Подпись первой части защищает от подмены публичного ключа.&lt;/p&gt;
  &lt;h2 id=&quot;9bj2&quot;&gt;Генерация ключевой пары&lt;/h2&gt;
  &lt;p id=&quot;SsNq&quot;&gt;Для генерации ключевой пары используется утилита openssl.&lt;/p&gt;
  &lt;p id=&quot;wBUt&quot;&gt;Пример команды для генерации ключевой пары в PEM формате:&lt;/p&gt;
  &lt;pre id=&quot;byPk&quot;&gt;openssl genrsa -out private.pem 2048&lt;/pre&gt;
  &lt;p id=&quot;iwL6&quot;&gt;Команда генерирует 2048-битную RSA ключевую пару и записывает её в файл.&lt;/p&gt;
  &lt;p id=&quot;iqji&quot;&gt;Почему расширение файла не &lt;code&gt;.key&lt;/code&gt;? Расширение в данном случае в программном плане не играет никакой роли, оно нужно только для человека. Допустимы оба варианта: и &lt;code&gt;.pem&lt;/code&gt; и &lt;code&gt;.key&lt;/code&gt;.&lt;/p&gt;
  &lt;p id=&quot;0K0G&quot;&gt;Пример файла:&lt;/p&gt;
  &lt;pre id=&quot;PQSA&quot;&gt;-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEArQteMabkeSWxnyZ1Lt5H24AMObIlgC48CfeguLv9AZUq2GbV
01BR9hyM4F9g0MmgicQp/EvZrU9KPuKOcNxWlgsfJLNn36/a/5qaJm53tqRlqQvd
CQ5FTramrB1ALd5/jx6s0kG0Q2mYQTRvwdUyAuZg9dzBE/bFaUGBIQe3ZZUs1Xh1
HkM2zYo/xOG/ZUsvJDTWZ9OEECc22Jdk1ZZ3cED9WzWc3RHypmZ8We7ZWa9jzSdY
bWYqB6lFchlPTP5q4IQ9qMZjWDmTp+Bb5Pe4T96GoUI+Nh7tXCgVQPcBwzk1Mwid
PA6nwHdYQavR/W5tFifEPvXX32g3vRXZeuaKYwIDAQABAoIBAQCcXW1cSIajwh/i
xAmXtFwSSH7Dk+q3DRBLoWumApj42SXCLgqBzE6DqgDSrtz5TXi3hH678H5eUQuy
D17PNQs4wgv+Se9O/cVSuw0YNTIP5DXIr2OoTzDpk7rARB4+VJPHa9yWkbCmScC/
CvcBm/h5DlwHTtdZht+T4REiG6rpKoo4SjEFsQX8ssB7cNgfs+3vpQJSAgN65AGT
PEOGYFo/hDRAkTgeXlvYPbe1SPQl65S+3Cvd60dLk+1yjU/CjSlvy9R5WJ0mML5G
tY1f8zc/3dsVXntA6Q2SVsiCyW1XITAgt51CyJgjNM7cYytm8eELlPvP40YQHCQx
FEOt3zCBAoGBAN8Fv+ILxePO+Rk+p9C97+edE+8/guSHR7wOPZhwuHeLMm+f7eg3
7lbgPg1JpYJSLErp6+V5Yx/RkNnJR4evtpTd43uQL0janbasFCd3N2WcEghKKsod
XW0NcNmtW8v6+9T02J+rMoiVpk3FC19tHlkfRP5ySFTjYyKa3bKMkVpzAoGBAMah
wi7RHnb0BBlWuI84RqkxG6wlX7q/XE391jc+aVlGXNDWHC4aH1Pzjv1b/FFPjKpH
6pmFeKavx1qQlQrK0oN060QSIsXn8W/F6xHW3QwxFoFndblMu487jic3vuYrf8LU
n85H2OkC4vIrfIi44+uDbAjr0tpPGIRP/OQXHGRRAoGBAIjT7jWxI2fww8NJPYxD
+7wOEvzl6lhq5wfpdMDh50rwi7EQXdXq+r8yNN/SH0klQSd0/NV88+PBnyz+4HPO
yiXrPHXCsD/yYHCCgprz+XjNmAKd/kKiYX9Wj7X9NiSfh4HP9ld/oTFLHwz3p1KU
j9n95UZ2twnduCSy/vFcbJEhAoGBAJSxWs/5M7kQilD9nkN4eU0GuhRwFe2SeuLX
dpj8W5i9F5Yt8gKBA5qw5QW86nFj/4UpOPGb/OmrBK1DNo9Rra1CxSu799P3AcIO
gx5jni4WQSa18Ga6jl12079/96QORCHxUX/2QOaNhp6K9zrSTaxsQV+cScerFktW
JZYJxvNBAoGAVByWvsh4BwddziqiItLrM34WiJNNhGNfPwgvo8LH+S4/en6e17nx
MgU1rKMGXqsHbkMWD1U6FgQUnmkUb2Ek/M/OP0eqpbHe9yHQQrhJjzdbhZYfOD1I
6LdQy214uInozOztviWa/qw5RglrGy56B00Az14FPi7vDaAp/N6xhVE=
-----END RSA PRIVATE KEY-----&lt;/pre&gt;
  &lt;p id=&quot;fGnr&quot;&gt;Ключевую пару можно зашифровать при помощи пароля одним из алгоритмов, указав один из параметров команды: &lt;code&gt;-aes128|-aes192|-aes256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea&lt;/code&gt;.&lt;/p&gt;
  &lt;pre id=&quot;JyMJ&quot;&gt;openssl genrsa -des3 -out private.pem 2048&lt;/pre&gt;
  &lt;p id=&quot;8bmi&quot;&gt;Пароль будет запрошен в интерактивном режиме.&lt;/p&gt;
  &lt;p id=&quot;prg4&quot;&gt;Пароль можно указать прямо в команде:&lt;/p&gt;
  &lt;pre id=&quot;SPML&quot;&gt;openssl genrsa -des -passout pass:1234 -out private.pem 2048&lt;/pre&gt;
  &lt;p id=&quot;ORAS&quot;&gt;Или взять из файла:&lt;/p&gt;
  &lt;pre id=&quot;TD3P&quot;&gt;openssl genrsa -des -passout file:passphrase.txt -out private.pem 2048&lt;/pre&gt;
  &lt;h3 id=&quot;C28I&quot;&gt;Извлечение публичного ключа&lt;/h3&gt;
  &lt;p id=&quot;TBVM&quot;&gt;Команда для извлечения из пары публичного ключа:&lt;/p&gt;
  &lt;pre id=&quot;VU4r&quot;&gt;openssl rsa -in private.pem -outform PEM -pubout -out public.pem&lt;/pre&gt;
  &lt;p id=&quot;GVTb&quot;&gt;В параметре &lt;code&gt;-in&lt;/code&gt; указывается файл с ключевой парой, в параметре &lt;code&gt;-outform&lt;/code&gt; указывается формат экспортируемого ключа, в параметре &lt;code&gt;-out&lt;/code&gt; передаётся имя файла, в который будет экспортирован публичный ключ.&lt;/p&gt;
  &lt;p id=&quot;6t3o&quot;&gt;Пример файла:&lt;/p&gt;
  &lt;pre id=&quot;DNA1&quot;&gt;-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArQteMabkeSWxnyZ1Lt5H
24AMObIlgC48CfeguLv9AZUq2GbV01BR9hyM4F9g0MmgicQp/EvZrU9KPuKOcNxW
lgsfJLNn36/a/5qaJm53tqRlqQvdCQ5FTramrB1ALd5/jx6s0kG0Q2mYQTRvwdUy
AuZg9dzBE/bFaUGBIQe3ZZUs1Xh1HkM2zYo/xOG/ZUsvJDTWZ9OEECc22Jdk1ZZ3
cED9WzWc3RHypmZ8We7ZWa9jzSdYbWYqB6lFchlPTP5q4IQ9qMZjWDmTp+Bb5Pe4
T96GoUI+Nh7tXCgVQPcBwzk1MwidPA6nwHdYQavR/W5tFifEPvXX32g3vRXZeuaK
YwIDAQAB
-----END PUBLIC KEY-----&lt;/pre&gt;
  &lt;h2 id=&quot;sqQP&quot;&gt;Создание запроса на сертификат&lt;/h2&gt;
  &lt;p id=&quot;TVR4&quot;&gt;Запрос на сертификат должен включать в себя публичный ключ и подпись приватным ключом.&lt;/p&gt;
  &lt;h3 id=&quot;Wi4d&quot;&gt;Интерактивный режим&lt;/h3&gt;
  &lt;p id=&quot;vdvF&quot;&gt;Команда для создания запроса на сертификат:&lt;/p&gt;
  &lt;pre id=&quot;FZig&quot;&gt;openssl req -new -key private.pem -out codebook.csr&lt;/pre&gt;
  &lt;p id=&quot;P4rR&quot;&gt;Параметр -new необходим для создания нового запроса на сертификат, в параметре -key указывается ключевая пара, в параметре -out задаётся имя файла, в который будет записан запрос на выпуск сертификата.&lt;/p&gt;
  &lt;p id=&quot;8h4L&quot;&gt;Введённая команда будет в интерактивном режиме запрашивать информацию о подписанте (владельце):&lt;/p&gt;
  &lt;pre id=&quot;SLWX&quot;&gt;Country Name (2 letter code) [AU]: RU
State or Province Name (full name) [Some-State]: Saint-Petersburg
Locality Name (eg, city) []: Saint-Petersburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Codebook
Organizational Unit Name (eg, section) []: Study
Common Name (e.g. server FQDN or YOUR name) []: Ivan Volynkin
Email Address []: mail@ivolynkin.ru&lt;/pre&gt;
  &lt;p id=&quot;N7qQ&quot;&gt;После уточнения всех данных будет сформирован запрос на выпуск сертификата и записан в файл codebook.csr.&lt;/p&gt;
  &lt;h3 id=&quot;k2j2&quot;&gt;Информация о подписанте в команде&lt;/h3&gt;
  &lt;p id=&quot;zYmE&quot;&gt;Аналогичный результат, но без интерактивного режима, можно получить, указав параметр &lt;code&gt;-subj&lt;/code&gt;:&lt;/p&gt;
  &lt;pre id=&quot;iAln&quot;&gt;openssl req -new -key private.pem -subj &amp;#x27;/C=RU/ST=Saint-Petersburg/L=Saint-Petersburg/O=Codebook/OU=Study/CN=Ivan Volynkin/emailAddress=mail@ivolynkin.ru&amp;#x27; -out codebook.csr&lt;/pre&gt;
  &lt;h3 id=&quot;VNHy&quot;&gt;Создание запроса на сертификат и ключевой пары одной командой&lt;/h3&gt;
  &lt;pre id=&quot;yMNp&quot;&gt;openssl req -new -newkey rsa:2048 -nodes -keyout private.pem -subj &amp;#x27;/C=RU/ST=Saint-Petersburg/L=Saint-Petersburg/O=Codebook/OU=Study/CN=Ivan Volynkin/emailAddress=mail@ivolynkin.ru&amp;#x27; -out codebook.csr&lt;/pre&gt;
  &lt;p id=&quot;OXfD&quot;&gt;Параметр &lt;code&gt;-newkey&lt;/code&gt; указывает на необходимость создания ключевой пары, &lt;code&gt;rsa:2048&lt;/code&gt; — 2048-битный RSA ключ, &lt;code&gt;-nodes&lt;/code&gt; отменяет режим пароля в ключевой паре, в &lt;code&gt;-keyout&lt;/code&gt; указывается имя файла, в который будет записана ключевая пара.&lt;/p&gt;
  &lt;h2 id=&quot;GY4K&quot;&gt;Выпуск сертификата&lt;/h2&gt;
  &lt;p id=&quot;YCnT&quot;&gt;Выпускаемый сертификат требуется подписать. Можно это сделать двумя способоми: подписать другим сертификатом (как правило, это делает удостоверяющий центр) или подписать тем же ключом, с помощью которого он был создан.&lt;/p&gt;
  &lt;h3 id=&quot;cgEk&quot;&gt;Выпуск сертификата удостоверяющим центром&lt;/h3&gt;
  &lt;p id=&quot;p6oa&quot;&gt;У удостоверяющего центра должны быть собственные сертификат и ключевая пара.&lt;/p&gt;
  &lt;p id=&quot;lq7p&quot;&gt;Удостоверяющий центр может выпустить сертификат командой:&lt;/p&gt;
  &lt;pre id=&quot;e3WW&quot;&gt;openssl x509 -CA ca.crt -CAkey ca.pem -CAcreateserial -signkey private.pem -in codebook.csr -req -days 365 -out codebook.crt&lt;/pre&gt;
  &lt;p id=&quot;wTdZ&quot;&gt;В параметре &lt;code&gt;-CA&lt;/code&gt; указывается сертификат УЦ, в &lt;code&gt;-CAkey&lt;/code&gt; указывается приватный ключ УЦ, в &lt;code&gt;-signkey&lt;/code&gt; — приватный ключ выпускаемого сертификата, в &lt;code&gt;-in&lt;/code&gt; — запрос на сертификат, в &lt;code&gt;-days&lt;/code&gt; — количество дней активности сертификата, в &lt;code&gt;-out&lt;/code&gt; имя файла, в который будет записан сертификат.&lt;/p&gt;
  &lt;p id=&quot;kPbJ&quot;&gt;В результате будет выпущен сертификат, подписанный сертификатом УЦ.&lt;/p&gt;
  &lt;h3 id=&quot;QKt9&quot;&gt;Самоподписанный сертификат&lt;/h3&gt;
  &lt;pre id=&quot;Kg61&quot;&gt;openssl x509 -signkey private.pem -in codebook.csr -req -days 365 -out codebook.crt&lt;/pre&gt;
  &lt;p id=&quot;MnnR&quot;&gt;В результате будет выпущен самоподписанный сертификат.&lt;/p&gt;

</content></entry><entry><id>ivolynkin:about</id><link rel="alternate" type="text/html" href="https://ivolynkin.ru/about?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=ivolynkin"></link><title>Иван Волынкин</title><published>2022-07-04T09:39:27.127Z</published><updated>2022-07-06T08:24:14.538Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/14/d6/14d677db-9053-414b-8d01-421cbae86c1d.png"></media:thumbnail><summary type="html">Всем привет! Меня зовут Иван Волынкин и я люблю IT, особенно стартапы.</summary><content type="html">
  &lt;p id=&quot;GNE4&quot;&gt;Всем привет! Меня зовут Иван Волынкин и я люблю IT, особенно стартапы.&lt;/p&gt;
  &lt;p id=&quot;Y6zc&quot;&gt;Программированием я начал заниматься ещё в 5м классе школы. Писал на Delphi разного рода проекты ради интереса. Это был примерно 2003 год.&lt;/p&gt;
  &lt;p id=&quot;4isg&quot;&gt;В 2008 начал изучать WEB разработку.&lt;/p&gt;
  &lt;p id=&quot;uf8o&quot;&gt;В 2010 началась профессиональная карьера с работы в web агенстве Other Side.&lt;/p&gt;
  &lt;p id=&quot;LdiQ&quot;&gt;2010-2012 работал уже в другой веб студии Exi Studio. Там мы сделали множество коммерческих сайтов: и визитки и интернет магазины.&lt;/p&gt;
  &lt;p id=&quot;kaup&quot;&gt;Потом в течение 2х месяцев пробовал работать на себя: привлёк партнёра, который отвечал за поиск клиентов. Я отвечал за производство. В итоге получилось сделать два сайта. На тот момент мне было 19 лет.&lt;/p&gt;
  &lt;p id=&quot;5KEj&quot;&gt;Весной 2012 получил интересное предложение о наёмной работе в студии стартапов. В основном мы делали проекты для себя для последующей монетизации. Несколько интересных проектов, которые запустили на стадии MVP:&lt;/p&gt;
  &lt;ul id=&quot;JeAX&quot;&gt;
    &lt;li id=&quot;4FYv&quot;&gt;SaaS платформа reklamovoz.ru. Рекламодатели размещали заявки на размещение рекламы. Владельцы автомобилей продавали поверхность своих автомобилей под размещение рекламы. Рекламодатели оплачивали размещение своей рекламы на автомобилях.&lt;/li&gt;
    &lt;li id=&quot;h13X&quot;&gt;SaaS платформа грузового такси furgonchikov.ru. Проект быстро продали конкурентам.&lt;/li&gt;
    &lt;li id=&quot;GOpE&quot;&gt;SaaS платформа такси для знакомств. Тогда ещё не было в нашей жизни Яндекс Такси или Uber. Но проект заморозили ради развития следующего.&lt;/li&gt;
    &lt;li id=&quot;bUaG&quot;&gt;SaaS платформа для курьеров и заказчиков доставки. В этом проекте я практически не успел поучаствовать, хотя по иронии судьбы, он оказался самым успешным. &lt;a href=&quot;https://peshkariki.ru&quot; target=&quot;_blank&quot;&gt;https://peshkariki.ru&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;laWh&quot;&gt;В 2014 я попробовал свои силы в роли Android разработчика. Разрабатывал мобильный клиент социальной сети &lt;a href=&quot;https://play.google.com/store/apps/details?id=com.mtgroup.app.spcs&quot; target=&quot;_blank&quot;&gt;Spaces&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;ELFa&quot;&gt;2015-2017 были одни из самых ярких в карьере. Владельцы стартапа Voloton.ru предложили мне долю в проекте и роль техдиректора, так как я ранее занимался этим проектом от вендора. Я собрал небольшую команду из двух разработчиков и мы начали работать. Проект представлял из себя онлайн площадку торговли автозапчастями. Технически у нас всё получилось: мы подключили 900 магазинов по РФ, ежедневно совершалось до 50 сделок. Но знаний в SaaS бизнесе у нас ещё не было, мы сильно минусили. Начали искать инвестора. А нашли (и очень кстати) экспертизу в виде венчурного акселератора ФРИИ. Мы полностью пересмотрели свой подход на ведение бизнеса, но оказалось поздно: деньги закончились. Пришлось закрыться.&lt;/p&gt;
  &lt;p id=&quot;EFs6&quot;&gt;2017-2019 я работал в &lt;a href=&quot;https://roox.ru/&quot; target=&quot;_blank&quot;&gt;RooX Solutions&lt;/a&gt;. Мы делали энтерпрайс продукт — систему управления аутентификацией и авторизацией. Своё решение внедряли в банки Открытие, Зенит, UniCredit и сотовых операторов Мегафон, Yota.&lt;/p&gt;
  &lt;p id=&quot;vwun&quot;&gt;2019-2021 ещё один интересный опыт работы в роли CTO в продукте &lt;a href=&quot;https://sigma.ru/&quot; target=&quot;_blank&quot;&gt;АТОЛ Sigma&lt;/a&gt;. Это комплексное решение для малого и микробизнеса, включающее кассовый смарт терминал и личный кабинет в облаке.&lt;/p&gt;
  &lt;p id=&quot;Dk4W&quot;&gt;2021-2022 работал ведущим консультантом в консалтинговой компании &lt;a href=&quot;https://www.neoflex.ru/&quot; target=&quot;_blank&quot;&gt;Neoflex&lt;/a&gt;. Занимался наймом, обучением, стартом внутренних проектов, разработкой инфраструктуры и CI/CD процессов.&lt;/p&gt;
  &lt;p id=&quot;Q3oE&quot;&gt;С июля 2022 работаю в стартапе автоматизации онкодиагностики &lt;a href=&quot;https://www.onecell.ai/&quot; target=&quot;_blank&quot;&gt;OneCell&lt;/a&gt;.&lt;/p&gt;

</content></entry></feed>