Как настроить SSL для локального хоста и виртуальных хостов с MAMP? - PullRequest
0 голосов
/ 17 января 2019

Я создаю этот «вопрос», чтобы задокументировать, как я смог установить SSL локально, на случай, если мне потребуется сделать это снова в будущем. Думаю, я запишу это здесь в надежде, что это может помочь и другим, потому что это сложный процесс.

Я работаю на Mac с High Sierra, MAMP v 4.2.1 и Chrome v 71

Хорошо, поехали.

1 Ответ

0 голосов
/ 17 января 2019

1) Создание SSL-сертификата для локального хоста

Чтобы использовать HTTPS с localhost, нам фактически необходимы два сертификата: корневой сертификат и сертификат домена специально созданный для домена localhost.

Эти изящные сценарии Я нашел, что позаботился о создании обоих.Они очень просты в использовании - просто внимательно следуйте инструкциям, и все будет хорошо.Единственное, что не очень понятно в документации, это то, что там, где написано Then mark the certificate as trusted, это означает, что вы должны нажать на сертификат в Access Keychain Access и изменить параметр Trust на Always.

( Здесь вы можете найти более подробное объяснение того, что на самом деле делают эти сценарии)

Если у вас все работает, у вас должно быть два файла server.crt иserver.key.Я создал папку ssl в /Applications/MAMP и переместил в нее файлы;но вы можете разместить их там, где считаете нужным.

Давайте теперь забудем о файлах и перейдем к настройке Apache.

2) Настройте Apache MAMP для приема SSL

По умолчанию Apache не настроен на прием SSL-соединений, поэтому мы должны это изменить.Откройте /Applications/MAMP/conf/apache/httpd.conf и убедитесь, что следующие строки НЕ закомментированы.Если они есть, удалите # в начале строки:

LoadModule ssl_module modules/mod_ssl.so 

Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf

Также найдите эту строку:

Servername  localhost:443

и убедитесь, что порт установлен на 443443 - это порт по умолчанию для защищенных соединений HTTPS (обычные незащищенные HTTP-соединения по умолчанию прослушивают порт 80).

Далее откройте /Applications/MAMP/conf/apache/extra/httpd-ssl.conf и убедитесь, что у вас есть эта строка:

Listen 443

Опять же, это важно, потому что мы должны настроить все на одном и том же порту.Для этого вам также следует щелкнуть значок MAMP в док-станции вашего MAC, нажать Preferences, перейти на вкладку Ports и выбрать Set Web & MySql ports to 80 & 3306.

Остановите и перезапустите MAMP, чтобы применить сделанные нами изменения.

3) Настройте виртуальный хост по умолчанию для SSL

Пока он все еще в /Applications/MAMP/conf/apache/httpd.conf, найдите следующие строки:

<VirtualHost _default_:443>

#   General setup for the virtual host
DocumentRoot "/Applications/MAMP/Library/htdocs"
ServerName www.example.com:443

Эти строки задают поведение Apache по умолчанию для всехHTTPS-соединения.ServerName - это просто фиктивное имя, которое вы должны заменить на localhost;Вы также должны убедиться, что значение по умолчанию DocumentRoot соответствует корневой папке вашего проекта.

Поэтому измените вышеуказанные строки следующим образом:

<VirtualHost _default_:443>

#   General setup for the virtual host
DocumentRoot "/path/to/your/htdocs" 
ServerName localhost

Если вы прокрутите немного дальше, пока мы все еще в директиве VirtualHost по умолчанию, вы найдете эти две строки:

SSLCertificateFile "/Applications/MAMP/conf/apache/server.crt"

SSLCertificateKeyFile "/Applications/MAMP/conf/apache/server.key"

Измените их так, чтобы вы помещали файлы, которые мы сгенерировали на шаге 1. Как я уже говорил, я поместил мои в "/ Applications / MAMP / ssl", поэтому я изменилВыше строки:

SSLCertificateFile "/Applications/MAMP/ssl/server.crt"

SSLCertificateKeyFile "/Applications/MAMP/ssl/server.key"

Остановите и перезапустите MAMP, чтобы применить изменения.Теперь, если вы перейдете на https://localhost, вы сможете увидеть список проектов в вашей корневой папке.Вот и все для localhost!

4) Создайте сертификат SSL для пользовательских локальных доменов

Что делать, если вы хотите создать собственный домен myproject.dev и использовать SSL для этого тоже, так что выможет получить к нему доступ в https://myproject.dev?

Как и в случае с localhost, нам нужно создать сертификат SSL специально для домена myproject.dev, а затем настроить виртуальный хост для myproject.dev.Давайте начнем с создания сертификата.

Опять же, я нашел этот маленький инструмент под названием create-ssl-certificate, который сгенерирует для вас сертификат SSL для определенного локального домена.Это тоже очень просто в использовании, единственная не совсем понятная часть - это пакет NPM, который вы можете установить глобально с помощью npm -g install create-ssl-certificate.

Если с create-ssl-certificate все прошло хорошо, теперь у вас должно быть два файла, как это было с localhost на шаге 1. По умолчанию create-ssl-certificate вызывает сгенерированные файлы ssl.crt и ssl.key.Я переименовал их в server.crt и server.key, чтобы соответствовать файлам localhost.Затем я создал папку ssl в корневой папке myproject и переместил туда файлы.

Давайте на минутку забудем о файлах и перейдем к некоторой конфигурации Apache.

4) Настройте Apache MAMP для приема виртуальных хостов

Если вы уже создали виртуальные хосты, возможно, вы уже сделали это, поэтому вы можете пропустить этот шаг.

Единственное, что нам нужно сделать, чтобы «активировать» возможность создания виртуальных хостов, - это перейти на /Applications/MAMP/conf/apache/httpd.conf и раскомментировать эту строку:

Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf

5) Настройте виртуальный хост локального домена для SSL

Теперь мы можем настроить виртуальный хост, чтобы иметь доступ к myproject в https://myproject.dev. Прежде всего, отредактируйте файл hosts и добавьте следующую строку:

127.0.0.1   myproject.dev

Затем перейдите к /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf и добавьте следующее:

<VirtualHost myproject.dev:443>
    ServerName myproject.dev
    DocumentRoot "/Users/myusername/Sites/myproject"
    SSLEngine on
    SSLCertificateFile "/Users/myusername/Sites/myproject/ssl/server.crt"
    SSLCertificateKeyFile "/Users/myusername/Sites/myproject/ssl/server.key"        
</VirtualHost>

С этой конфигурацией вы сможете получить доступ к https://myproject.dev, потому что сервер проинструктирован искать сертификаты SSL, которые мы создали на шаге 4.

...