Часто для целей работы над созданием сайта на локальном компьютере или сервере нужен доступ к сайту через https. Для этих целей вам необходимо создать самоподписной SSL сертификат.
Процесс подойдет для Mac OS (и для Linux серверов)
Certificate Authority
Для начала создадим корневой сертификат, т.е. сертификат для самого центра сертификации. Есть два вариант, первый простой:
openssl req -x509 -nodes -new -sha512 -days 365 -newkey rsa:4096 \
-keyout /etc/ssl/private/ca.key \
-out /etc/ssl/certs/ca.pem \
-subj "/C=RU/CN=MYHOME-CA"
Второй это если вы хотите заморочиться по полной программе. То для начала создайте файл конфигурации (ca.cnf), примерно следующего содержания:
HOME = .
RANDFILE = $ENV::HOME/.rnd
####
[ ca ]
default_ca = CA_default # The default ca section
[ CA_default ]
default_days = 365 # How long to certify for
default_crl_days = 30 # How long before next CRL
default_md = sha512 # Use public key default MD
preserve = no # Keep passed DN ordering
x509_extensions = ca_extensions # The extensions to add to the cert
email_in_dn = no # Don't concat the email in the DN
copy_extensions = copy # Required to copy SANs from CSR to cert
###
[ req ]
default_bits = 4096
default_keyfile = ca.pem
distinguished_name = ca_name
x509_extensions = ca_extensions
string_mask = utf8only
### distinguished_name ###
[ ca_name ]
countryName = Country Name (2 letter code)
countryName_default = RU
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Moscow
localityName = Locality Name (eg, city)
localityName_default = Baltimore
organizationName = Organization Name (eg, company)
organizationName_default = Test CA, Limited
organizationalUnitName = Organizational Unit (eg, division)
organizationalUnitName_default = Server Research Department
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_default = Test CA
emailAddress = Email Address
emailAddress_default = [email protected]
####################################################################
[ ca_extensions ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always, issuer
basicConstraints = critical, CA:true
keyUsage = keyCertSign, cRLSign
Тогда команда будет вот такой:
openssl req -x509 -config ca.cnf -days 365 -newkey rsa:4096 -sha512 \
-nodes -out /etc/ssl/certs/ca.pem -outform PEM
Проверить сертификат можно так:
openssl x509 -in /etc/ssl/certs/ca.pem -text -noout
Далее, надо сделать crt-сертификат, который потом будем импортировать
openssl x509 -outform pem -in /etc/ssl/certs/ca.pem \
-out /etc/ssl/certs/ca.crt
Проверить можно так:
openssl x509 -text -in /etc/ssl/certs/ca.crt
Создаём закрытый ключ для домена и запрос на выпуск сертификата для него:
openssl req -new -nodes -newkey rsa:4096 \
-keyout /etc/ssl/private/localhost.key \
-out /etc/ssl/certs/localhost.csr \
-subj "/C=RU/ST=State/L=Moscow/O=Organization-Name/CN=localhost"
Далее, надо создать файл /etc/ssl/v3.ext следующего содержания:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = mylocal.dev
DNS.2 = test-site.dev
Можно добавить необходимое количество доменных имён DNS.3, DNS.4 и так далее.
И наконец, создаём сам сертификат:
openssl x509 -req -sha512 -days 365 -extfile /etc/ssl/v3.ext \
-CA /etc/ssl/certs/ca.crt -CAkey /etc/ssl/private/ca.key \
-CAcreateserial -in /etc/ssl/certs/localhost.csr \
-out /etc/ssl/certs/localhost.crt
Не создавайте сертификат длительностью более 365 дней. Не получиться его сделать доверительным.
Что дальше.
Первое, добавляем следующие три строчки в файл настройки Apache (обычно /etc/apache/site-available/your-site.conf)
SSLEngine on
SSLCertificateFile /etc/ssl/certs/localhost.crt
SSLCertificateKeyFile /etc/ssl/private/localhost.key
Сделать самоподписной сертификат доверительным
И наконец, надо добавить корневой сертификат (/etc/ssl/certs/ca.crt) в вашу систему. Для Mac OS надо просто добавить его в «Связку ключей» и обязательно указать как доверенный

Для linux (Ubuntu)
Тут надо для самой OS добавить в папку /usr/local/share/ca-certificates и запустить реконфигурацию:
sudo dpkg-reconfigure ca-certificates
После чего консольные клиенты будут воспринимать ваш центр сертификации как доверительный. Но Firefox и Chrome по-прежнему будут «ругаться», так как у них свои базы центров сертификации. И надо добавить для каждого браузера отдельно.
Для Firefox зайти в настройки > Приватность и защита > Просмотр сертификатов

Далее, во вкладке «Центры сертификации» нажать кнопку «Импортировать»

И импортировать ваш ca.crt
Что может пойти не так. Для импорта сертификатов в linux используется библиотека libnss3-tools ее надо установить:
sudo apt install libnss3-tools
После чего все станет работать.
Для Chrome все совершенно аналогично: Конфиденциальность и безопасность > Безопасность > Настроить сертификаты и импортировать сертификат.