През 2018 г. Google започна да препоръчва сайтовете да приемат HTTPS криптиране, като маркират сайтовете, които не използват SSL сертификат, като „несигурни“ в своя браузър Chrome. Това беше широко прието като добра идея, тъй като осигуряването на уеб трафик защитава както собственика на сайта, така и неговите клиенти.
Орган за сертифициране (CA – Certificate Authority), също понякога наричан сертифициращ орган, е компания или организация, която действа за валидиране на самоличността на субекти (като уебсайтове, имейл адреси, компании или отделни лица) и обвързването им с криптографски ключове чрез издаване на електронни документи, известни като цифрови сертификати.
Въпреки че Let’s Encrypt и неговият API направи изключително лесно за всеки да генерира и инсталира SSL сертификати на своите сървъри, това не помага много на разработчиците с HTTPS в техните среди за разработка. Създаването на локален SSL сертификат за обслужване на вашите сайтове за разработка през HTTPS може да бъде трудна работа. Дори и да успеете да генерирате самоподписан сертификат, пак ще получите грешки в поверителността на браузъра.
В тази статия ще разгледаме създаването на ваш собствен сертифициращ орган (CA) за вашите локални сървъри, така че да можете да стартирате HTTPS сайтове локално без проблем.
- Защо да използвате HTTPS локално?
- Как работи
- Да станете (малък) сертифициращ орган
- Инсталиране на вашия основен сертификат
- Създаване на сертификати, подписани от CA за вашите сайтове за локална разработка
- Shell Script
- Алтернативи
- Заключение
Защо да използвате HTTPS локално?
Защо просто не използвате обикновен HTTP локално? Защото, ако вашият производствен сайт е само с HTTPS и разработвате локално на обикновен HTTP, вашите среди за разработка и производство не са толкова сходни, колкото биха могли да бъдат.
Определено искате вашата среда за разработка да отразява производството възможно най-близо. Когато това не стане, вие каните да се появят повече проблеми в производството, които не са се появили в разработката. Изпълнението на HTTP, когато производственият ви сайт е само HTTPS, определено е ненужен риск. Дори в ситуация, в която не можете да огледате перфектно производствената си среда, все пак ще искате да стартирате HTTPS локално или ще се борите с SSL предупреждения за смесено съдържание цял ден.
Ако някога сте се опитвали да сърфирате в локален сайт чрез HTTPS, който няма конфигуриран SSL сертификат, вероятно сте виждали следното съобщение в Chrome:

Или следното във Firefox:

Други браузъри имат различни съобщения, но основният мотив е същия.
Един от начините да заобиколите това е да превключите вашата локална среда за разработка на WordPress към нещо като LocalWP, DevKinsta или дори Laravel Valet, които предлагат локални SSL решения от кутията. Недостатъкът е, че това означава промяна на вашия работен процес за разработка, което не е идеално, ако се чувствате по-комфортно с това, което вече имате, особено ако то вече съответства на вашата производствена среда.
Търсенето на локално SSL решение онлайн често ще доведе до слизане в заешката дупка на самоподписаните сертификати. Въпреки това опитът да получите самоподписан SSL сертификат, работещ с вашия локален сървър, е доста гаден, ако не използвате инструмент, който го обработва вместо вас, което ви връща към необходимостта да промените локалните си среди за разработка.
Основният проблем с локално самоподписаните сертификати е, че те също трябва да бъдат доверени от вашия браузър. Просто настройването на локален самоподписан сертификат не е достатъчно. В крайна сметка получавате същото съобщение на браузъра, но този път с ERR_CERT_AUTHORITY_INVALID. Това се случва, защото браузърът иска да провери валидността на този сертификат със сертифициращ орган и не може. Така че решението е да станете свой собствен CA!
Как работи
За да поискате SSL сертификат от CA като Verisign или GoDaddy, вие им изпращате заявка за подписване на сертификат (CSR) и те ви дават SSL сертификат в замяна, че са подписали с помощта на техния основен сертификат и частен ключ. Всички браузъри имат копие (или достъп до копие от операционната система) на основния сертификат от различните CA, така че браузърът може да провери дали вашият сертификат е подписан от доверен CA.
Ето защо, когато генерирате самоподписан сертификат, браузърът не му вярва. Не е подписан от CA. Начинът да заобиколим това е да генерираме собствен основен сертификат и частен ключ. След това добавяме основния сертификат към всички устройства, които притежаваме, само веднъж и тогава всички самоподписани сертификати, които генерираме, ще бъдат изначално надеждни.
Да станете (малък) сертифициращ орган
Някак нелепо е колко лесно е да генерирате файловете, необходими, за да станете сертифициращ орган. Наистина са необходими само две команди. Нека разгледаме как можем да направим това на macOS и Linux и след това да разгледаме как работи в операционната система Windows.
Генериране на частен ключ и основен сертификат на macOS Monterey и Linux
Тъй като и двете macOS и Linux са Unix-подобни операционни системи, процесите за генериране на необходимите файлове са идентични.
Единствената истинска разлика между двете е, че на macOS може да се наложи да инсталирате приложението за команден ред OpenSSL. За да направите това, ако все още го нямате, инсталирайте homebrew, което ще ви позволи да инсталирате OpenSSL.
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install opensslПовечето дистрибуции на Linux идват с инсталиран OpenSSL. Ако не, може да се инсталира чрез вашия мениджър на пакети по подразбиране.
След това можем да създадем местоположение за съхраняване на нашите локални файлове със сертификати. Това не е изискване, но улеснява намирането на ключовете по-късно.
mkdir ~/certs
cd ~/certsС тази настройка сме готови да генерираме частния ключ, за да станем локален CA:
openssl genrsa -des3 -out myCA.key 2048OpenSSL ще поиска парола, която препоръчваме да не пропускате и да я пазите. Паролата ще попречи на всеки, който получи личния ви ключ, да генерира свой собствен основен сертификат. Резултатът трябва да изглежда така:
Generating RSA private key, 2048 bit long modulus
.................................................................+++
.....................................+++
e is 65537 (0x10001)
Enter pass phrase for myCA.key:
Verifying - Enter pass phrase for myCA.key:След това генерираме основен сертификат:
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pemЩе бъдете подканени да въведете паролата на частния ключ, който току-що сте избрали, и куп въпроси. Отговорите на тези въпроси не са толкова важни. Те се показват при разглеждане на сертификата, което почти никога няма да направите. Предлагам да направите общото име нещо, което ще разпознаете като основен сертификат в списък с други сертификати. Това наистина е единственото нещо, което има значение.
Enter pass phrase for myCA.key:
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]:BG
State or Province Name (full name) [Some-State]:Sofia
Locality Name (eg, city) []:Sofia
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Web Wizards Ltd.
Organizational Unit Name (eg, section) []:7G
Common Name (e.g. server FQDN or YOUR name) []:Web Wizards Ltd.
Email Address []:team@webwizards.bgСега трябва да имате два файла: myCA.key (вашият личен ключ) и myCA.pem (вашият основен сертификат).
🎉 Поздравления, вече сте CA. Или поне нещо подобно на сертифициращ орган.
Генериране на частен ключ и основен сертификат в Windows
В Windows също е възможно да конфигурирате вашата среда да изпълнява командите openssl. Трябват ви само някой допълнителни инструменти.
Ако използвате подсистема на Windows за Linux (WSL), тогава все едно използвате Linux и командите ще работят по същия начин. Ако използвате Windows с нещо като WampServer или XAMPP, ще ви трябва начин да инсталирате помощната програма за команден ред OpenSSL в Windows. Най-лесният начин да направите това е да инсталирате Git за Windows, който идва в комплект с OpenSSL и помощната програма Git Bash.
След като отворите прозорец на Git Bash, можете да изпълнявате същите команди като за macOS или Linux, с една малка разлика. Поради начина, по който някои конзолни приложения (по-специално OpenSSL) работят в Git Bash, трябва да добавяте префикс на всички openssl команди с помощта на програмата winpty.
Така например, следната команда е как да генерирате частния ключ, за да станете локален CA в Git Bash:
winpty openssl genrsa -des3 -out myCA.key 2048Другите малки разлики са пътищата на файловете в Git Bash. Когато отворите екземпляр на Git Bash, домашната директория в терминала се съпоставя с вашата потребителска директория в Windows, но със структура на директория, подобна на Linux. Така че, ако вашата потребителска директория се намира на c:\Users\WebWizards в Windows, вашата домашна директория на Git Bash ще бъде c/Users/WebWizards.
Инсталиране на вашия основен сертификат
За да станете истински CA, трябва да получите своя основен сертификат на всички устройства по света.
Но не е нужно да ставаме истински CA. Просто трябва да бъдем CA за устройствата, които притежавате. Трябва да добавим основния сертификат към всички лаптопи, настолни компютри, таблети и телефони, които имат достъп до вашите HTTPS сайтове. Това може да бъде малко болезнено, но добрата новина е, че трябва да го направим само веднъж. Основният ни сертификат ще бъде добър, докато не изтече.
Добавяне на основния сертификат към macOS Monterey Keychain
Чрез CLI
sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" myCA.pemЧрез приложението Keychain на macOS
- Отворете приложението macOS Keychain
- Ако е необходимо, уверете се, че сте избрали System Keychain (по-старите версии на macOS по подразбиране използват този ключодържател)
- Отидете на File > Import Items…
- Изберете вашия файл с личен ключ (т.е.
myCA.pem) - Потърсете каквото и да сте отговорили на въпроса за „Common Name“ по-горе

- Щракнете два пъти върху основния си сертификат в списъка
- Разгънете секцията Trust
- Променете стойността в полето „When using this certificate:“ на Always Trust
- Затворете прозореца със сертификати
- По време на процеса може да ви помоли да въведете паролата си (или да сканирате пръста си), направете го
- 🎉 Честито!
Добавяне на основния сертификат към Linux
Има толкова много Linux дистрибуции, но Ubuntu е най-популярната. Следователно тези инструкции ще обхванат Ubuntu.
- Ако още не е инсталиран, инсталирайте пакета
ca-certificates.
sudo apt-get install -y ca-certificates- Копирайте файла
myCA.pemв директорията/usr/local/share/ca-certificatesкато файлmyCA.crt.
sudo cp ~/certs/myCA.pem /usr/local/share/ca-certificates/myCA.crt- Актуализирайте хранилището на сертификати.
sudo update-ca-certificatesМожете да проверите дали сертификатът е инсталиран, като изпълните следната команда:
awk -v cmd='openssl x509 -noout -subject' '/BEGIN/{close(cmd)};{print | cmd}' < /etc/ssl/certs/ca-certificates.crt | grep WizardsАко е инсталиран правилно, ще видите подробностите за основния сертификат.
subject=C = BG, ST = Sofia, L = Sofia, O = Web Wizards Ltd., OU = PL, CN = Web Wizards Ltd., emailAddress = team@webwizards.bgДобавяне на основния сертификат към Windows 10
- Отворете „Microsoft Management Console“, като използвате клавишната комбинация Windows + R, напишете
mmcи щракнете върху Open - Отидете на File > Add/Remove Snap-in
- Щракнете върху Certificates и Add
- Изберете Computer Account и щракнете върху Next
- Изберете Локален компютър, след което щракнете върху Finish
- Щракнете върху OK, за да се върнете към прозореца на MMC
- Щракнете двукратно върху Certificates (local computer), за да разширите изгледа
- Изберете Trusted Root Certification Authorities, щракнете с десния бутон върху Certificates в средната колона под „Object Type“ и изберете All Tasks, след което Import
- Щракнете върху Next и след това върху Browse. Променете разширението на файла от падащото меню до полето за име на файл на All Files (*.*) и намерете файла
myCA.pem, щракнете върху Open, след това върху Next - Изберете Place all certificates in the following store. „Trusted Root Certification Authorities store“ е по подразбиране. Щракнете върху Next и след това върху Finish, за да приключите.
Ако всичко е минало по план, трябва да видите своя CA сертификат, сред останалите в Trusted Root Certification Authorities > Certificates.

Създаване на сертификати, подписани от CA за вашите сайтове за локална разработка
Сега ние сме CA на всички наши устройства и можем да подписваме сертификати за всички нови сайтове за локална разработка, които се нуждаят от HTTPS. Първо създаваме частен ключ за локалния сайт. Имайте предвид, че именуваме частния ключ, като използваме URL адреса на името на домейна на сайта за лоакална разработка. Това не е задължително, но улеснява управлението, ако имате няколко сайта:
openssl genrsa -out webwizards.test.key 2048След това създаваме Заявка за подпис на сертификат – Certificate Signing Request (CSR):
openssl req -new -key webwizards.test.key -out webwizards.test.csrЩе получите същите въпроси като по-горе и, отново, вашите отговори нямат значение. Всъщност те имат още по-малко значение, защото няма да гледате този сертификат в списък до други.
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]:BG
State or Province Name (full name) [Some-State]:Sofia
Locality Name (eg, city) []:Sofia
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Web Wizards Ltd.
Organizational Unit Name (eg, section) []:7G
Common Name (e.g. server FQDN or YOUR name) []:webwizards.test
Email Address []:team@webwizards.bg
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:Накрая ще създадем конфигурационен файл X509 V3 certificate extension config, който се използва за дефиниране на алтернативното име на субект Subject Alternative Name (SAN) за сертификата. В нашия случай ще създадем конфигурационен файл, наречен webwizards.test.ext, съдържащ следния текст:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = webwizards.testЩе изпълняваме openssl x509, защото командата x509 ни позволява да редактираме настройките за доверие на сертификата. В този случай ние го използваме, за да подпишем сертификата във връзка с конфигурационния файл, който ни позволява да зададем алтернативно име на субект. Ето препратка към първоначалния код от Stack Overflow.
Сега изпълняваме командата за създаване на сертификата: използвайки нашия CSR, CA частния ключ, CA сертификата и конфигурационния файл:
openssl x509 -req -in webwizards.test.csr -CA myCA.pem -CAkey myCA.key \
-CAcreateserial -out webwizards.test.crt -days 825 -sha256 -extfile webwizards.test.extСега имаме три файла: webwizards.test.key (частният ключ), webwizards.test.csr (заявката за подписване на сертификат или csr файл) и webwizards.test.crt (подписаният сертификат). Можем да конфигурираме локални уеб сървъри да използват HTTPS с частния ключ и подписания сертификат.
Ако използвате MAMP Pro, версия 6.0 въведе вградена SSL поддръжка. Можете да го активирате, като поставите отметка в квадратчето SSL под избрания от вас уеб сървър.
Ако предпочитате да използвате локално подписания сертификат, който току-що настроихме, можете да направите това, като отворите „Expert“, щракнете върху раздела SSL и изберете вашите файлове „Certificate“ и „Certificate key“ (private key).
Ако използвате Linux или Windows среда, която използва Nginx, можете да използвате инструкцията за Инсталиране на WordPress в Ubuntu 20.04 от тук – Install WordPress on Ubuntu 20.04 series.
Ако сте на Linux или Windows и използвате Apache, ще трябва да активирате SSL мода на Apache и да конфигурирате виртуален хост на Apache за порт 443 за локалния сайт. Това ще изисква от вас да добавите директивите SSLEngine, SSLCertificateFile и SSLCertificateKeyFile и да насочите последните две към току-що създадените файлове със сертификат и ключ.
<VirtualHost *:443>
ServerName webwizards.test
DocumentRoot /var/www/webwizards-test
SSLEngine on
SSLCertificateFile /path/to/certs/webwizards.test.crt
SSLCertificateKeyFile /path/to/certs/webwizards.test.key
</VirtualHost>Към момента няма готови инструкции как да направите това в Windows, използвайки IIS, тъй като WordPress не е най-лесният за конфигуриране на IIS системи.
Не е нужно да създаваме нов CA за всеки сайт. Можем просто да повторим тази последна част от създаването на сертификат за всеки друг сайт за локална разработка.
Shell Script
За да направите нещата още по-бързо, ето един удобен shell скрипт, който можете да промените за вашите собствени цели. Трябва да работи на macOS, Linux или Windows чрез Git Bash:
#!/bin/sh
if [ "$#" -ne 1 ]
then
echo "Usage: Must supply a domain"
exit 1
fi
DOMAIN=$1
cd ~/certs
openssl genrsa -out $DOMAIN.key 2048
openssl req -new -key $DOMAIN.key -out $DOMAIN.csr
cat > $DOMAIN.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $DOMAIN
EOF
openssl x509 -req -in $DOMAIN.csr -CA ../myCA.pem -CAkey ../myCA.key -CAcreateserial \
-out $DOMAIN.crt -days 825 -sha256 -extfile $DOMAIN.extАлтернативи
Алтернатива, която да разгледате за създаване на локално надеждни SSL сертификати, е mkcert. Ако нямате нищо против да използвате един от различните мениджъри на пакети, изброени във файла readme на mkcert, за да инсталирате инструмента, това е солидна алтернатива за създаване на локално надеждни SSL сертификати. Недостатъкът е, че той инсталира само основния CA сертификат за вас на вашата локална машина и създава локално подписани SSL сертификати, все още трябва да конфигурирате сертификатите ръчно за всеки локален сайт.
Заключение
Ето как да станете собствен локален сертифициращ орган за издаване на сертификати, за да подписвате локални SSL сертификати и да използвате HTTPS на локалните си сайтове. Надяваме се, че това ще премахне ужасяващото съобщение „Your connection is not private“ на сайтовете ви за локална разработка.


