Суть методу: Ви один раз створюєте "Головний сертифікат" (Root CA) і додаєте його в систему як довірений. Усі сертифікати для окремих сайтів, які ви підпишете цим головним ключем, будуть ставати "зеленими" в браузері автоматично.

Створення власного Root CA (Центру сертифікації)

Ці файли ви створюєте один раз на декілька років.

  • Генеруємо приватний ключ для Root CA: $ openssl genrsa -out root-ca.key 2048

  • Створюємо кореневий сертифікат: Заповніть дані (наприклад, Common Name: MyLocalDevCA). $ openssl req -x509 -new -nodes -key root-ca.key -sha256 -days 3650 -out root-ca.pem

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:UK
State or Province Name (full name) [Some-State]:Ukraine
Locality Name (eg, city) []:Dnipro
Organization Name (eg, company) [Internet Widgits Pty Ltd]:GrIvA
Organizational Unit Name (eg, section) []:IT Dev
Common Name (e.g. server FQDN or YOUR name) []:griva.local
Email Address []:servers@griva.top

Важливо: Файл root-ca.pem — це те, що ви повинні імпортувати у розділ "Довірені кореневі центри". Після цього система буде "вірити" всьому, що підписано ключем root-ca.key.

Автоматизація створення сертифікатів для сайтів

Тепер, коли у вас є "Мастер-ключ", для кожного нового сайту потрібно зробити 3 швидких дії: створити ключ сайту, запит на підпис (CSR) та підписати його.

Ось скрипт, щоб ви не робили це вручну. Створіть файл make_cert.sh:

#!/bin/bash

DOMAIN=$1
if [ -z "$DOMAIN" ]; then
  echo "Використання: ./make_cert.sh yourdomain.dev"
  exit 1
fi

# 1. Створюємо ключ для сайту
openssl genrsa -out $DOMAIN.key 2048

# 2. Створюємо CSR (Запит на сертифікат)
openssl req -new -key $DOMAIN.key -out $DOMAIN.csr \
    -subj "/C=UA/ST=Dnipro/L=Dnipro/O=Dev/CN=$DOMAIN"

# 3. Створюємо файл конфігурації SAN (щоб браузер не лаявся)
cat > $DOMAIN.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $DOMAIN
DNS.2 = www.$DOMAIN
EOF

# 4. ПІДПИСУЄМО сертифікат сайту нашим Root CA
openssl x509 -req -in $DOMAIN.csr -CA root-ca.pem -CAkey root-ca.key \
-CAcreateserial -out $DOMAIN.crt -days 365 -sha256 -extfile $DOMAIN.ext

# Очищення
rm $DOMAIN.csr $DOMAIN.ext

echo "Готово! Файли $DOMAIN.crt та $DOMAIN.key створені."

Як цим користуватися (робочий процес)

Коли у вас з'являється новий сайт project.test:

  • Запустіть скрипт: $ make_cert.sh project.test

  • Підключіть файли в Apache:

    SSLEngine on
    SSLCertificateFile /path/to/project.test.crt
    SSLCertificateKeyFile /path/to/project.test.key
  • Перезапустіть Apache.

Все! Оскільки root-ca.pem вже є в системі, браузер миттєво визнає project.test безпечним.