From f26c357b36097748e711d1494b15cb9e684a6b26 Mon Sep 17 00:00:00 2001 From: Leo <426742@gmail.com> Date: Fri, 5 Jul 2024 10:44:48 +0000 Subject: [PATCH] create --- .gitignore | 1 + device.key | 28 +++++++++++++++++++ gen-cert.sh | 30 +++++++++++++++++++++ gen-root.sh | 40 ++++++++++++++++++++++++++++ readme.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++ v3.ext | 8 ++++++ 6 files changed, 184 insertions(+) create mode 100644 .gitignore create mode 100644 device.key create mode 100644 gen-cert.sh create mode 100644 gen-root.sh create mode 100644 readme.md create mode 100644 v3.ext diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..41f0fba --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +devce.key \ No newline at end of file diff --git a/device.key b/device.key new file mode 100644 index 0000000..5c6fdb8 --- /dev/null +++ b/device.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCj5S01nzA7rE+Z +GVoXOKVXV+8pvMh5vUOYa1/mgu0epVKyuGlo3Yh36VyXKVhfyjz1oxaYDQyoo0AV +53oq+yB5qmjSEFevrMYTQvJkNlXeKR7gYd1KGBTgCopH4t9yoY+Nj5vbNxjvaJKg +N9+c7JaUaOA7+3vb2D2e4PAngfJd9now3S+9mbYMN2/oLkZrWea/jcPGpn0xvFRd +m8C3K9uEChbLzy1yYakp9qL2EU9sW9KiK89ekUYJmeSJwTiPxlu37eK+vRrDX69g +2kz1fKCsw0IWP1eUVzQujv42uyBP6PHchydT4v8y24Mr19OAK57pu2/s+NSTNDnW +5B4Pkg8RAgMBAAECggEAEAcUcb78j4ldS2KQTd8LRExkJhfBHy6kEp7FhRxepfWS +7clc/ZVUiC15EYtIii2T4o2tYvc7uq4kUUAO0W83kM5aa9iPSq3BvRZ579TkdtJc +o6LOajWKrRI6zabhJSuphzV5D2oG9TqrxCFSq9zzKNZMv3DrfudZt1TWB3cMxaVx +poPh+wceJgOC0EtfGU/HaNbZY6eRawH4YmjhILTwt2q2tdKXy+b/FbKRzGbGp1cE +IdnyAbP4rjEarcf0w4DH68jZ2nPAj/Yfx9sZETZqXakIXoo0TKz1cRGfbBis2qCn +ZGhosi3ru/oE0faL8DoZMAeIYWZDuWj0eObT4vhTQQKBgQDkbCXmXxvY/Mq/6Qu9 +nri3v1gqkmccMFq+QSogLmV4n97pRN+99x1e4MVruejUl/VDybjI0aCdGAaAXREr +BBwefleqWZ1SRATee8bkftoYefpddK62wMDk6AFOHMbC3ZDcr+MVcOIpjNf8cwys +2Q0N67RUN791ZtoArAfS8KNyGQKBgQC3rq+Eh4zLo7Wr+FZJLnT6FyqvRd1QXaLM +ihRBw5wHZ9imGJksCVrwWDmViyTh9cRTxhysNi7WUDYWcs2/1iNzpVMMmr6Zakbk +8oqu864DQyVSafCzFexsg2zf2HFZ62S+fmnyjBnNi0LioiF5Ocqq81+6KvPnjfKx +kFiG9vrTuQKBgCjc3/rSUN0EfBDQ0/TcDBdy94bGIgP88n7OkYaoRibKEsqQM6Z8 +KpjqhOa8n1ZIyOuTjqb+OUlhHuifvY6AcbdSysQCvA4XdPeIFRCTUNjIGW3WjdrL +qLZKetFKfJQnpt6T6H/RbeQY+hqDSmUxfxBadiwKvQl3mNA99jhaLCMhAoGAA9ZB +UlpmhYZ48Auy+bpftS2wtZKXCeu6z9z+iVUluD3iF64h3PqhDK47HbWXYqT4oetc +g/hpyA5K4vMo+x3lBbBpaLT+0EOZEYVDgl4Sv3yyleMipQsLMkUYjCCAVamGJDiN +zARDMbj7/7H1UwvzANkuobvt9mNPs4fZYZBdMvkCgYEA0F7UjhiE05p9B/o4RIzi +mNSfvOW1sQRnMnlbSdaTgPpB3IogzxidfzDIFkDzNoiL4xrgppBMWIsSxrMXVeJf +K6cOtYG7Q+chOut/9RkefQZBuz+PTcGYlMxGGfeUM8JMK+Stx3LT/K9bHb+BQtK0 +8cb4frLS5SNja/8nc0aa7oM= +-----END PRIVATE KEY----- diff --git a/gen-cert.sh b/gen-cert.sh new file mode 100644 index 0000000..9c43083 --- /dev/null +++ b/gen-cert.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -e + +if [ -z "$1" ] +then + echo "Please supply a subdomain to create a certificate for"; + echo "e.g. mysite.localhost" + exit; +fi + +if [ -f device.key ]; then + KEY_OPT="-key" +else + KEY_OPT="-keyout" +fi + +DOMAIN=$1 +COMMON_NAME=${2:-$1} + +SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME" +NUM_OF_DAYS=999 + +openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr +cat v3.ext | sed s/%%DOMAIN%%/$COMMON_NAME/g > /tmp/__v3.ext +openssl x509 -req -in device.csr -CA ./rootCA/rootCA.pem -CAkey ./rootCA/rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext +mkdir -p ./certs/$DOMAIN +mv device.csr ./certs/$DOMAIN/$DOMAIN.csr +mv device.crt ./certs/$DOMAIN/$DOMAIN.crt + +echo "Cert for $DOMAIN created." diff --git a/gen-root.sh b/gen-root.sh new file mode 100644 index 0000000..76c8989 --- /dev/null +++ b/gen-root.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +set -e + +ROOTCA_DIR="./rootCA" +ROOTCA_KEY="$ROOTCA_DIR/rootCA.key" +ROOTCA_PEM="$ROOTCA_DIR/rootCA.pem" +ROOTCA_SRL="$ROOTCA_DIR/rootCA.srl" + +# Check if the rootCA directory and files exist +if [ -f "$ROOTCA_KEY" ] && [ -f "$ROOTCA_PEM" ]; then + echo "Certificates already exist." + read -p "Do you want to overwrite them? (y/n): " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + # Create backup directory with timestamp + current_datetime=$(date +"%Y%m%d_%H%M%S") + BACKUP_DIR="./$ROOTCA_DIR/bak_$current_datetime" + mkdir -p "$BACKUP_DIR" + mv "$ROOTCA_KEY" "$ROOTCA_PEM" "$BACKUP_DIR" + + if [ -e "$ROOTCA_SRL" ]; then + mv "$ROOTCA_SRL" "$BACKUP_DIR" + fi + + echo "Old certificates moved to $BACKUP_DIR." + else + echo "Operation cancelled by the user." + exit 0 + fi +fi + +# Create rootCA directory if it does not exist +mkdir -p "$ROOTCA_DIR" + +# Generate new certificates +openssl genrsa -out "$ROOTCA_KEY" 2048 +openssl req -x509 -new -nodes -key "$ROOTCA_KEY" -sha256 -days 1024 -out "$ROOTCA_PEM" + +echo "rootCA created." \ No newline at end of file diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..8a34f02 --- /dev/null +++ b/readme.md @@ -0,0 +1,77 @@ +### ssl-gen +*Self signed SSL certs generator* + +Use `gen-root.sh` for create rootCA cert +Use `gen-cert.sh mysite.localhost` for create certs for domains + +The script is written based on this article: +https://habr.com/ru/articles/352722/ + + +https://labcollector.com/support/knowledge-base/how-to-install-root-ca-certificate-in-windows/ +Как установить сертификаты в Windows? +Шаг 1. Откройте диспетчер сертификатов. +1. Нажмите горячую клавишу ` Win + R` , чтобы открыть диалоговое окно «Выполнить». +2. Введите ` certmgr.msc` и нажмите Enter. Это действие откроет диспетчер сертификатов. +Шаг 2. Доступ к доверенным корневым центрам сертификации +3. В окне «Диспетчер сертификатов» перейдите к папке «Доверенные корневые центры сертификации» на левой панели. +4. Щелкните правой кнопкой мыши «Сертификаты» в этой папке, чтобы открыть контекстное меню. +Шаг 3. Импортируйте корневой сертификат ЦС. +5. В контекстном меню выберите «Все задачи» > «Импорт». Откроется Мастер импорта сертификатов. +6. Нажмите кнопку «Далее», чтобы продолжить. +7. Нажмите кнопку «Обзор», чтобы найти файл сертификата корневого центра сертификации (« rootCA.pem »), сохраненный на вашем жестком диске. Выберите файл и нажмите «Открыть». +8. Нажмите «Далее» еще раз, чтобы выбрать опцию «НЕ Автоматически выбирать хранилище сертификатов в зависимости от типа сертификата». +9. Наконец, нажмите «Далее» > «Готово», чтобы завершить работу мастера импорта. Появится окно подтверждения, сообщающее, что « импорт прошел успешно. + + + + +--------------------------------------------------------------------------------- + +**TODO** `chatgpt` +Да, можно автоматизировать процесс импорта сертификатов в Windows с помощью PowerShell. Давайте создадим скрипт, который выполнит все ваши шаги. + +```powershell +# Задайте путь к вашему сертификату +$certPath = "C:\path\to\rootCA.pem" # Убедитесь, что вы замените это на фактический путь к вашему файлу сертификата. + +# Импортируйте сертификат в доверенные корневые сертификаты +function Import-RootCert { + param ( + [string]$certPath + ) + + try { + # Откройте стор по умолчанию LocalMachine\Root (Trusted Root Certification Authorities) + $store = New-Object System.Security.Cryptography.X509Certificates.X509Store("Root", [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine) + + # Откройте хранилище и установите флаг для разрешения записи + $store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadWrite) + + # Чтение сертификата из файла на диске + $cert = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2 + $cert.Import($certPath) + + # Добавьте сертификат в хранилище + $store.Add($cert) + + # Закройте хранилище + $store.Close() + + Write-Output "Импорт завершен успешно." + } catch { + Write-Error "Ошибка: $_" + } +} + +# Вызов функции импорта сертификата +Import-RootCert -certPath $certPath +``` + +Эти шаги выполнятся при запуске скрипта в PowerShell от имени администратора: + +1. Установите путь к вашему сертификату, заменив значение в переменной `$certPath`. +2. Запустите PowerShell от имени администратора. +3. Выполните скрипт, вставив его в PowerShell или сохранив его в файл `.ps1` и запустив этот файл. + +Команды PowerShell выполнит все шаги по импорту сертификата в доверенные корневые сертификаты. \ No newline at end of file diff --git a/v3.ext b/v3.ext new file mode 100644 index 0000000..35f425e --- /dev/null +++ b/v3.ext @@ -0,0 +1,8 @@ +authorityKeyIdentifier=keyid,issuer +basicConstraints=CA:FALSE +keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment +subjectAltName = @alt_names + +[alt_names] +DNS.1 = %%DOMAIN%% +DNS.2 = *.%%DOMAIN%%