Рубрики
Uncategorized

Письменная панель Manager для ключевого магазина сертификата в Shell в Linux

Всем привет! Меня зовут Сергий, и я работаю инженером программного обеспечения / DEVOPS в Luxoft. Многие разработчики под … Теги с Linux, Bash, DevOps, программированием.

Всем привет! Меня зовут Сергий, и я работаю инженером программного обеспечения/DEVOPS в Luxoft.

Многие разработчики недооценивают или неправильно относятся к оболочке Linux, сравнивая его с другими языками программирования.

Но мы не должны забывать, что самая важная вещь в «Linux Shell» — это слово оболочка . Это не просто язык программирования для написания программ.

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

Он работает не с библиотеками, но с программами (многие инструменты GNU и всего, что вы можете найти и написать себя легко интегрироваться с оболочкой). Он также не следует соответствовать стандартам языка программирования, но стандарты операционной системы. Поэтому даже базовые знания о том, как работает операционная система, улучшит ваши знания оболочки Linux.

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

  • Сертификаты, которые каждый может генерировать себя
  • Те, которые выдаются корпоративным CA
  • Бесплатные публичные сертификаты от шифрования
  • Коммерческие сертификаты из всемирного CA, как IdeyRust или Digicert и другие, которые также предоставляют дополнительные услуги, такие как проверка компании или аккредитация правительства
  • Сертификаты для создания канала TLS/SSL для авторизации на стороннюю службу или сертификат для создания двусторонней TLS/SSL

Если у вас есть много сертификатов, скорее всего, вы используете киностор, такие как JKS (Java Keystore, который приобрел устаревшее состояние с выпуском Java 9) или PKCS12. Последнее было почти 20 лет, и, несмотря на некоторое количество критики, является одним из самых популярных и надежных открытых форматов, чтобы полностью обогнать JKS в ближайшее время.

Я много работал в проектах, где основной язык программирования был Java, поэтому для себя, основной инструмент для работы с кинымисторами — keytool , который поставляется с JDK.

Конечно, у меня также есть небольшой чит-лист с такими командами, как:

Показать список сертификатов:

keytool -list -v -keystore "store.jks" -storepass "password"|grep -P '(Alias name:|Entry type:|Serial number:|Owner:|Valid from:)'

# with some filter:
keytool -list -v -keystore Ltest.jks -storepass changeit 2>/dev/null|grep -P "(Alias:|Owner:|Valid from:)"

Копировать сертификат с одного ключевого магазина на другой ключ.

keytool -importkeystore -srckeystore "KEYSTORE_FROM.jks" -srcstorepass "SOURCE_PASSWORD" -destkeystore "KEYSTORE_TO.jks" -deststorepass "DESTINATION_PASSWORD" -srcalias "CERT_ALIAS" [ -destalias "NEW_CERT_ALIAS" ]

Импорт сертификата из файла PEM в ключевой таблиц:

keytool -import -file "FILE_FROM.pem" -keystore "KEYSTORE_TO.jks" -storepass "KEYSTORE_PASSWORD" -noprompt -alias "CERT_ALIAS"

Сертификат экспорта из ключевого магазина к файлу CRT:

keytool -exportcert -v -alias "CERT_ALIAS" -keystore "KEYSTORE_FROM.jks" -storepass "KEYSTORE_PASSWORD" -rfc -file "FILE_TO.cer"`

Однажды я работал над проектом, где было несколько десятков микросервисов, несколько сотен виртуальных машин в тестовых средах, где разработчики вручную управляли сертификатами, и не было централизованного контроля. Только для того, чтобы разобрать все это и довести его в некоторую системную форму, нужно было дотокоманно разобраться, сравните его, подтвердите все изменения с несколькими командами DEV …

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

Время от времени я пытался найти немного магического решения, познакомиться с графической утилитой https://keystore-explorer.org/features.html , но необходимые функциональные возможности не было там, и политика компании не позволила использовать настольные программы, которые не приняли аудит корпоративного безопасности, что может занять до года.

Может быть, я бы собрал себя вместе и сделаю все через неделю или два с помощью команд One-Line Bash + ноутбук + Excel, но вдруг мне пришлось взять отпуск из-за болезни, и когда моя температура позволила мне снова сидеть на мониторе, Но еще не пойти на работу, я вспомнил, что я считаю себя хорошо с Bash.

Итак, позвольте мне представить:

~ 35 килобайт POSIX совместимая оболочка Linux.

Для работы вам нужно:

  • Не очень старая раковина (КШ, Bash, ZSH)
  • седить овладеть
  • keytool, который поставляется с JDK

Что может сделать менеджер. Быстрый обзор на скриншотах ниже:

Однопанирный режим:

Двухпанирный режим:

Для вентиляторов панельных менеджеров, таких как NC, VC, MC, далеко и т. Д. (Я не могу жить без дальнего менеджера), функциональные ключи и навигация должны быть интуитивными.

Что было самым интересным во время развития:

В начале я написал первую версию в Bash, включая базовую навигацию и первую функциональность, но в какой-то момент что-то не началось в KSH. Я понял свою ошибку и переписал все в пользу совместимости POSIX.

Код начал выглядеть более громоздким, но скрипт работал в Bash/ksh/dash. Если вы обнаружите какие-либо проблемы, просто напишите в комментариях. (Это работает даже в Git-Bash, но с ужасной производительностью).

Автоматическая ширина регулировки и высота.

Поскольку экран полностью обновляется практически каждый клавиш, вы можете изменить размер окна (например, если вы сидите через графический SSH-клиент) в любое время. После нажатия любой клавиши он автоматически настроит изображение. Пару вечеров было потрачено на возможность отображения/скрытия дополнительных колонн. Нужно было рассчитать и приспособиться к одностороннему и двухпанному режиму, плюс заголовки и текст рассчитываются по разным формулам. Вот фрагмент, чтобы определить, сколько нужно обрезать псевдоним сертификата, если ширина экрана недостаточно, чтобы соответствовать полное имя:

    WindowWidth="$(tput cols)"
    if [ -n "$RFILE" ]; then # two-panel
    used=24
    [ -n "$SHOW_TYPE" ] && used=$(( $used+34 ))
    localWidth=$(( ( $WindowWidth — $used ) / 2–1 ))
    if [ $localWidth -ne $aliasWidth ]; then
    aliasWidth=$localWidth
    [ $aliasWidth -lt 1 ] && aliasWidth=1
    clear
    fi

    ……………………………………………………………

    headerWidth=$(( $aliasWidth + 5 ))
    [ -n "$SHOW_TYPE" ] && headerWidth=$(( $headerWidth + 17 ))
    printf " store: ${blue}%-$(( $headerWidth ))s${rst}" "$LFILE"
    printf "| store: ${blue}%-$(( $headerWidth -1 ))s${rst}\n" "$RFILE"
    printf " %-10s" "Valid to"
    [ -n "$SHOW_TYPE" ] && printf " %-16s" "Storetype"
    printf " %-${aliasWidth}s |" "Alias"
    printf " %-10s" "Valid to"
    [ -n "$SHOW_TYPE" ] && printf " %-16s" "Storetype"
    printf " %-${aliasWidth}s\n" "Alias"

Обнаружение непечатной ключей (стрелки, F1 …):

Некоторые специальные клавиши могут иметь переменные суммы символов, поэтому просто используя единый читать Команда было недостаточно. Но, после некоторых экспериментов и гугули, я обнаружил, что команда чтения понимает, что такое миллисекунда. Так что процедура выглядит как:

    # Special keypress could take variable amount of characters
    keypress=""
    read -rsN1 keytap
    while [ -n "$keytap" ]; do
    keypress="${keypress}${keytap}"
    read -sN1 -t 0.01 keytap
    done

Теперь вы можете сравнить значение $ KEYPRESS с такими строками, как «[A» (HEX: 1B 5B 41) — стрелка вверх, «[B» (Hex: 1b 5b 42) — стрелка вниз, ‘[13 ~ (Hex: 1b 5b 31 33 7e) — ключ F3 и так далее. Я не совсем уверен, что моя версия будет отлично работать в каждой оболочке, поэтому, на всякий случай, большинство горячих клавиш дублируются с буквами.

Некоторые очки, которые я хочу поделиться

На данный момент все самые важные функции, которые я часто использую, реализуются, и я взял перерыв, кроме того, на самом деле я начал писать сценарий, чтобы получить некоторую практику с Tutput и навигация в Bash, но я был немного очарован;)

В упрощенном виде я уже использую подобную навигацию в моих других сценариях — в некоторых случаях это намного удобнее, чем стандарт Выберите Команда из-за возможностью сделать Hotkeys и отображаемые индивидуальные списки.

Очень важный момент, я полагаю, что JKS_MGR.SH — это просто один текстовый файл сценария.

Нет запутывания, открытого кода, также код как можно просто — практически любой младший разработчик/системный администратор может проверить отсутствие задней двери.

Поэтому, если вы работаете над проектом, где каждая программа должна пройти аудит безопасности, подтверждение лицензий, или на целевой машине, просто не хватает прав на установку инструментов — этот скрипт может быть очень полезен для вас. Не нужно установить, для запуска требуется только команда POSIX Shell, KeyTool, SED и GREP.

Некоторые сожаление: привычка работать с Java заставила меня сделать всю работу с ключевыми магазинами через команду keytool, которая должна быть доступна в пути (и, возможно, стоит будет расследовать и переписать все, чтобы работать через OpenSSL? — Напишите свои мысли в комментариях о том).

В конце концов вам обычно нужно писать некоторые выводы. Хорошо.

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

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

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

Слияние На всякий случай (вы слышали о Nginx и Wargaming?), Я хочу указать, что JKS_MGR.SH был написан исключительно во время неработающих часов, на частном компьютере:).

P.P.S. https://github.com/sfkulyk/jks-manager.

Оригинал: «https://dev.to/sfkulyk/writing-panel-manager-for-certificate-keystore-in-linux-shell-187b»