This commit is contained in:
Leo 2024-07-05 10:44:48 +00:00
commit f26c357b36
6 changed files with 184 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
devce.key

28
device.key Normal file
View File

@ -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-----

30
gen-cert.sh Normal file
View File

@ -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."

40
gen-root.sh Normal file
View File

@ -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."

77
readme.md Normal file
View File

@ -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 выполнит все шаги по импорту сертификата в доверенные корневые сертификаты.

8
v3.ext Normal file
View File

@ -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%%