Суть методу: Ви один раз створюєте "Головний сертифікат" (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 безпечним.