Как мне разрешить HTTPS для Apache на локальном хосте?

193

Меня попросили настроить HTTPS с самозаверяющим сертификатом на Apache на localhost, но как мне это сделать? Я понятия не имею вообще.

KennC.
источник
1
Используйте Serveo ! ssh -R youruniquesubdomain:80:localhost:3000 serveo.netНаберите свой поддомен и номер порта, и вы готовы продолжитьhttps://youruniquesubdomain.serveo.net
totymedli

Ответы:

135

Я только что попытался - мне нужно было протестировать код разработки на моем локальном хосте Apache в Windows . Это было WAAAY сложнее, чем должно быть. Но вот шаги, которые удалось сработать после долгой стрижки волос ...

Я обнаружил, что моя установка Apache идет с, openssl.exeчто полезно. Если у вас нет копии, вам нужно ее скачать. Моя копия была в Apache2\binпапке, как я на нее ссылаюсь ниже.

шаги:

  1. Убедитесь, что у вас есть права на запись в вашу папку Apache conf
  2. Откройте командную строку в Apache2\confпапке
  3. Тип
    ..\bin\openssl req -config openssl.cnf -new -out blarg.csr -keyout blarg.pem
  4. Вы можете оставить все вопросы пустыми, кроме:

    • Пароль PEM: временный пароль, такой как «пароль»
    • Общее имя: имя хоста вашего сервера

  5. Когда это завершится, введите
    ..\bin\openssl rsa -in blarg.pem -out blarg.key

  6. Создайте свой самозаверяющий сертификат, набрав:
    ..\bin\openssl x509 -in blarg.csr -out blarg.cert -req -signkey blarg.key -days 365

  7. Откройте conf\httpd.confфайл Apache и убедитесь, что модуль SSL включен - в начале этой строки не должно быть хеша:
    LoadModule ssl_module modules/mod_ssl.so

  8. Некоторые установки Apache помещают конфигурацию SSL в отдельный файл. Если это так, убедитесь, что файл SSL Conf включен. В моем случае мне пришлось раскомментировать эту строку:
    Include conf/extra/httpd-ssl.conf

  9. В конфиге SSL httpd-ssl.confмне пришлось обновить следующие строки:

    • Обновление
      SSLSessionCache "shmcb:C:\Program Files (x86)\Zend\Apache2/logs/ssl_scache(512000)"
      до
      SSLSessionCache "shmcb:C:/Progra\~2/Zend/Apache2/logs/ssl_scache(512000)"
      (квадратные скобки в путанице запутывают модуль, поэтому нам нужно избегать их)
    • DocumentRoot - установите это в папку для ваших веб-файлов
    • ServerName - имя сервера
    • SSLCertificateFile "conf/blarg.cert"
    • SSLCertificateKeyFile "conf/blarg.key"

  10. Перезапустите Apache.

  11. Попробуйте загрузить https://localhost/в вашем браузере.

Надеюсь, вы сделали это так далеко. Не стесняйтесь обновлять этот пост любой другой полезной информацией.

(Скриншоты любезно предоставлены Нилом Обремским и его полезной статьей - хотя сейчас она уже устарела.)

Саймон
источник
2
Спасибо. Мне также пришлось отредактировать директивы ErrorLog, TransferLog и CustomLog для правильных путей, иначе Apache не запустится.
Тамлин
1
По какой-то причине инструкции больше не работают или не являются полными
Jacobian
6
Я должен был раскомментируйте , а также в моей httpd.conf для его работы: LoadModule socache_shmcb_module модули / mod_socache_shmcb.so
Erik
1
Я сделал еще два шага, чтобы заставить его работать, добавив модуль LoadModule socache_shmcb_module modules / mod_socache_shmcb.so и в httpd-ssl.conf я исправляю путь к журналу ssl в строке 250, CustomLog ".apache24 / logs / ssl_request.log" \
Wasim A .
5
Чтобы сгенерировать файлы .pem и .key, мне нужно было установить 2 переменные среды на шаге 2: установить OPENSSL_CONF = C: \ path \ to \ apache \ Apache2.4.4 \ conf \ openssl.cnf установить RANDFILE = C: \ путь \ к \ apache \ Apache2.4.4 \ conf \ .rnd
эосфера
57

Я использую ngrok ( https://ngrok.com/ ) для этого. ngrok - это инструмент командной строки, создающий туннель для localhost. Он создает как http, так и https соединение. После загрузки необходимо выполнить следующую команду:

ngrok http 80

(В версии 2 синтаксис: ngrok http 80. В версии 2 любой порт может быть туннелирован.)

Через несколько секунд он выдаст два URL:

http://a_hexadecimal_number.ngrok.com
https://a_hexadecimal_number.ngrok.com

Теперь оба URL указывают на локальный хост.

Sudip
источник
1
@sudip, работает ли код с открытым исходным кодом ngrok таким образом, что мы можем разместить его на нашем собственном сервере без изменений? Если нет, то это в значительной степени потому , что это остановит всю работу это не нормально , чтобы перенаправить пользователей запросы на внешний хост , как ngrok.
Пейсер
2
@Pacerier Я не собираюсь использовать его на сервере. Я использую его на локальном хосте (Bcz мой сетевой провайдер дает мне динамический IP). Я впервые использовал его для тестирования IPN PayPal, и он работал отлично. Интересно, почему кто-то будет использовать его на сервере и для каких целей.
Суд
@sudip, цель очевидна, чтобы код, работающий по HTTP, также работал с HTTPS без необходимости дополнительного кодирования.
Pacerier
1
Хотя это полезно, кажется невероятно небезопасным разрешать доступ к вашей машине для разработчиков в открытый интернет. Если вы воспользуетесь чем-то подобным, вы будете уволены с работы, заботясь о безопасности.
Энди М
@YumYumYum. Раньше она была полностью бесплатной в V 1. Но порты http и https по-прежнему свободны в v 2 (не знаю, существует ли какое-либо ограничение порта, существует ли бесплатный план). Проверьте бесплатный план здесь: ngrok.com/product#pricing
sudip
24

вот самый простой способ сделать это

сначала скопируйте эти файлы server.crt & server.key (найдите в приложении) в ваш каталог apache / conf / ssl

затем откройте файл httpd.conf и добавьте следующую строку

Listen 80
Listen 443

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:443>
    DocumentRoot "d:/wamp/www"  #your wamp www root dir
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "d:/wamp/bin/apache/Apache2.4.4/conf/ssl/server.crt"
    SSLCertificateKeyFile "d:/wamp/bin/apache/Apache2.4.4/conf/ssl/server.key"
</VirtualHost>
Анил Гупта
источник
3
Мне также пришлось включить модуль LoadModule ssl_module libexec / apache2 / mod_ssl.so в (/etc/apache2/httpd.conf)
Алексей
17
Интересно, насколько безопасно / опасно загружать файлы * .crt * .key из ненадежного источника вместо создания собственных.
Петр Пеллер
4
@PetrPeller: мы настраиваем https для локального развития, так что зачем удивляться безопасному / опасному
Анил Гупта
7
Объяснение того, как генерировать эти файлы, было бы здорово. Потому что скачивание файлов из неизвестного источника - плохая практика, но также потому, что ссылки такого рода в какой-то момент прекратятся.
Стефан
2
Этот учебник отлично digitalocean.com/community/tutorials/...
Dhiraj
13

Для обеспечения безопасности информации, отправляемой на ваш веб-сервер и с него, рекомендуется включить шифрование связи между клиентами и сервером. Это часто называют SSL .

Итак, давайте настроим HTTPS с самозаверяющим сертификатом на Apache2. Я собираюсь перечислить шаги, которые вы должны выполнить:

  • Установите веб-сервер apache2 на свой компьютер. Для машины linux откройте терминал и наберите

sudo apt-get установить apache2

  • После успешной установки проверьте состояние службы apache2, выполнив команду

sudo service apache2 status

Должен вывести

состояние службы apache2

  • Перейдите в браузер и введите

HTTP: // локальный: 80

Убедитесь, что вы получаете страницу по умолчанию для apache2, как это.

вывод по умолчанию apache2

  • Для шифрования веб-соединения нам нужен сертификат от CA (центра сертификации) или мы можем использовать самозаверяющие сертификаты. Давайте создадим самозаверяющий сертификат, используя следующую команду.

openssl req -x509 -newkey rsa: 2048 -keyout mykey.key -out mycert.pem -days 365-узлов

Пожалуйста, заполните информацию соответственно, как показано ниже.

создать самозаверяющий сертификат с помощью openssl

mykey.key и mycert.pem должны быть созданы в вашем текущем рабочем каталоге.

  • Было бы хорошо, если бы мы перемещали сертификаты и ключи в одном месте, и веб-серверу apache2 было бы легко их найти. Итак, давайте выполним следующие команды

sudo cp mycert.pem / etc / ssl / certs

sudo cp mykey.key / etc / ssl / private

  • Давайте включим режим SSL на вашем сервере

sudo a2enmod ssl

Это должно вывести вот так

включить ssl

  • Давайте настроим apache2 для использования самозаверяющего сертификата и ключа, которые мы сгенерировали выше.

sudo vi /etc/apache2/sites-available/default-ssl.conf

Найдите эти две строки и замените их вашими сертификатом и ключом.

начальный

по умолчанию-конф

окончательный

после изменения конфигурации

  • Включить сайт

cd / etc / apache2 / sites-available /

sudo a2ensite default-ssl.conf

  • Перезапустите сервис apache2

перезапуск службы sudo apache2

  • Проверьте веб-сервер apache2 по HTTPS. Снова откройте браузер и введите

https: // локальный: 443

Он должен вывести что-то вроде этого с предупреждением о том, что страница, которую вы собираетесь просматривать, небезопасна, поскольку мы настроили сервер с самозаверяющим сертификатом.

введите описание изображения здесь

  • Поздравляем вы настроили apache2 с HTTPS конечных точек, теперь нажмите на передовой -> добавить исключение -> Исключение безопасности подтверждения , вы увидите страницу по умолчанию снова.

страница после добавления исключения

Динеш Кумар
источник
Я предпочитаю не редактировать любой файл конфигурации, если могу, поэтому я оставил все default-ssl.confкак есть. Я собирался переименовать mycertв ssl-cert-snakeoilно этот файл уже существует , так что я просто использовал это! Так что я смог безопасно пропустить два шага в Debian.
Рольф
@Rolf Я согласен с вами, но в производстве всегда используется новый сертификат и ключ. Чтобы показать, как их можно создать, я добавил 2 дополнительных шага для Debian. Спасибо :)
Динеш Кумар
Можно ли как-нибудь добавить свой самозаверяющий сертификат в качестве центра сертификации, чтобы не видеть предупреждений?
Аарон Франке
9

Windows + Apache 2.4, например:

  1. раскомментируйте ssl_module в вашем httpd.confфайле.

    LoadModule ssl_module modules/mod_ssl.so
    
  2. слушайте 443 порт, как 80 порт в вашем httpd.confфайле.

    Listen 80
    Listen 443
    
  3. Снимите комментарий Включить виртуальные хосты в ваш httpd.confфайл.

    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf
    
  4. добавить VirtualHost в свой conf/extra/httpd-vhosts.conf

    <VirtualHost _default_:443>
        DocumentRoot "D:/www"  #your site directory path
        ServerName localhost
        #ServerAlias localhost.com localhost2.com
        SSLEngine on
        SSLCertificateFile "${SRVROOT}/conf/ssl/server.crt"
        SSLCertificateKeyFile "${SRVROOT}/conf/ssl/server.key"
        <Directory "D:/www">
            Options -Indexes +FollowSymLinks +ExecCGI
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
    

только номер порта 443и SSL......линии отличаются от обычного http config.

сохраните ваш конфигурационный файл и перезапустите службу Apache. тогда вы можете посетить https: // localhost /

Веб-браузер предупредит вас, что в первый раз это небезопасно, просто нажмите «Продолжить».

cuixiping
источник
Это сработало для меня на XP Home, Apache 2.4. Скопированы 2 файла сертификата из предыдущего поста (Анил Гупта). Не комментировав mod_ssl и включив httpd-vhosts.conf в httpd.conf, в httpd-vhosts.conf добавлена ​​директива VirtualHost Анила Гупты (с некоторыми скорректированными путями).
jogi99
7

На самом деле это довольно просто, если у вас есть удобная установка openssl. (На какой ты платформе?)

Предполагая, что вы используете Linux / Solaris / Mac OS / X, мини-HOWTO Van Apache SSL / TLS имеет превосходное руководство, которое я не буду здесь воспроизводить.

Тем не менее, резюме заключается в том, что вы должны создать самозаверяющий сертификат. Поскольку вы используете apache для localhost, предположительно для разработки (то есть не для публичного веб-сервера), вы будете знать, что можете доверять самозаверяющему сертификату и игнорировать предупреждения, которые ваш браузер будет выдавать вам.

Пит Кларк
источник
Привет, я работаю на ОС Windows. А что касается самозаверяющего сертификата, нужно ли его скачивать или каким-либо другим способом?
KennC.
3
Нет. Вы сделаете самоподписанный сертификат самостоятельно. У вас есть apache httpd + ssl? Вам понадобится SSL, чтобы сделать это. Этот сайт: rubayathasan.com/tutorial/apache-ssl-on-windows содержит полезную информацию о запуске ssl в Windows. Вы будете выполнять некоторую работу с командной строкой, но это все равно хорошо для вас. :-)
Пит Кларк
3
Ссылки мертвы :(
kpuccino
Да, похоже, он мертв. Это интернет для вас ... Однако, ссылка на вики CentOS ниже, на которую ссылается @kayakinkoder, также хороша: wiki.centos.org/HowTos/Https Если вы работаете на Mac, эта рецензия также выглядит разумно: gist. github.com/nrollr/4daba07c67adcb30693e
Пит Кларк,
4

Это должна быть работа Ubuntu, похожая на Mint с Apache2

Это хорошее руководство, поэтому следуя этому

https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04

и оставив ваш ssl.conf как этот или похожий

<VirtualHost _default_:443>
        ServerAdmin your@email.com
        ServerName localhost
        ServerAlias www.localhost.com

        DocumentRoot /var/www


    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

ты можешь его достать.

Надеюсь, что эта помощь для Linux

ackuser
источник
3

2020 Обновление

Я публикую этот ответ, так как я сам боролся с этим, и Chrome обновил свою безопасность, требуя альтернативного имени субъекта, которого нет у многих сообщений, поскольку это не требовалось, когда они были опубликованы в качестве ответа. Я предполагаю, что WAMP уже установлен.

ШАГ 1

Скачать OpenSSL Light и установите


** ШАГ 2 (необязательно) **

Хотя эта часть не является обязательной, она облегчает выполнение команд в дальнейшем. Если вы пропустите этот шаг, вам нужно будет указать полный путь к openssl.exe, где вы будете выполнять команду. Если вы предпочитаете установить его, обновите путь openssl.exe в переменных среды.

Переменные среды -> Системные переменные -> Путь -> Правка -> Создать -> c: \ Program Files \ OpenSSL-Win64 \ bin


**ШАГ 3**

Создайте папку с именем «ключ» в c:/wamp64/bin/apache/apache2.4.27(your version number)/conf/каталоге.

Создайте файл конфигурации для вашего CA MyCompanyCA.cnf с содержимым (вы можете изменить его по своему усмотрению):

[ req ]
distinguished_name  = req_distinguished_name
x509_extensions     = root_ca

[ req_distinguished_name ]
countryName             = Country Name (2 letter code)
countryName_min         = 2
countryName_max         = 2
stateOrProvinceName     = State or Province Name (full name)
localityName            = Locality Name (eg, city)
0.organizationName      = Organization Name (eg, company)
organizationalUnitName  = Organizational Unit Name (eg, section)
commonName              = Common Name (eg, fully qualified host name)
commonName_max          = 64
emailAddress            = Email Address
emailAddress_max        = 64

[ root_ca ]
basicConstraints            = critical, CA:true

Создайте файл конфигурации расширений MyCompanyLocalhost.ext для сертификата веб-сервера:

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

[alt_names]
DNS.1   = localhost
DNS.2   = mycy.mycompany.com

** ШАГ 4 **

Выполните эти команды в указанном порядке для генерации ключа и сертификатов:

openssl req -x509 -newkey rsa:2048 -out MyCompanyCA.cer -outform PEM -keyout MyCompanyCA.pvk -days 10000 -verbose -config MyCompanyCA.cnf -nodes -sha256 -subj "/CN=MyCompany CA"
openssl req -newkey rsa:2048 -keyout MyCompanyLocalhost.pvk -out MyCompanyLocalhost.req -subj /CN=localhost -sha256 -nodes
openssl x509 -req -CA MyCompanyCA.cer -CAkey MyCompanyCA.pvk -in MyCompanyLocalhost.req -out MyCompanyLocalhost.cer -days 10000 -extfile MyCompanyLocalhost.ext -sha256 -set_serial 0x1111

В результате вы получите файлы MyCompanyCA.cer , MyCompanyLocalhost.cer и MyCompanyLocalhost.pvk .


** ШАГ 5 **

Установите MyCompanyCA.cer под

Панель управления -> Управление сертификатами пользователя -> Доверенные корневые центры сертификации -> Сертификаты

Чтобы установить MyCompanyLocalhost.cer, просто дважды щелкните по нему.


** ШАГ 6 **

Откройте c:/wamp64/bin/apache/apache2.4.27(your version number)/conf/httpd.confи снимите комментарий (удалите #) следующие 3 строки:

LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

** ШАГ 7 **

Откройте c:/wamp64/bin/apache/apache2.4.37/conf/extra/httpd-ssl.confи измените все параметры на показанные ниже:

Directory "c:/wamp64/www"
DocumentRoot "c:/wamp64/www"
ServerName localhost:443
ServerAdmin admin@example.com
ErrorLog "c:/wamp64/bin/apache/apache2.4.27/logs/error.log"
TransferLog "c:/wamp64/bin/apache/apache2.4.27/logs/access.log"
SSLCertificateFile "c:/wamp64/bin/apache/apache2.4.27/conf/key/MyCompanyLocalhost.cer"
SSLCertificateKeyFile "c:/wamp64/bin/apache/apache2.4.27/conf/key/MyCompanyLocalhost.pvk"
SSLSessionCache "shmcb:c:/wamp64/bin/apache/apache2.4.27/logs/ssl_scache(512000)"
CustomLog "c:/wamp64/bin/apache/apache2.4.27/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Примечание: это сложная часть. Если при редактировании этого файла вы допустите небольшую ошибку, SSL не будет работать. Сделайте копию этого прежде, чем Вы отредактируете это.


** ШАГ 8 **

Перезагрузите Wamp и Chrome. Localhost теперь безопасен: https: // localhost

CodeWarrior
источник
У вас есть руководство по Linux?
Аарон Франке
К сожалению, нет.
CodeWarrior
2

Это очень просто,

просто выполните следующие команды

sudo a2enmod ssl

sudo service apache2 restart

sudo a2ensite default-ssl.conf

Вот и все, вы сделали.

Если вы хотите использовать SSL (всегда использовать https), отредактируйте файл:

sudo nano /etc/apache2/sites-available/000-default.conf

и добавить эту одну строку

<VirtualHost *:80>
        . . .

        Redirect "/" "https://your_domain_or_IP/"

        . . .
</VirtualHost>

затем перезагрузите снова

sudo service apache2 restart
Мох. С
источник
И вам нужно бежать systemctl reload apache2за sudo a2ensite default-ssl.conf.
до
1

Это HowTo для CentOS было легко понять и заняло около 5 минут: https://wiki.centos.org/HowTos/Https

Я не буду подробно описывать каждый шаг здесь, но основные шаги:

1.) Установите модуль openssl для apache, если он еще не установлен

2.) Создайте самоподписанный сертификат

- На этом этапе вы сможете успешно зайти на https: // localhost

3.) При необходимости настройте виртуальный хост

KayakinKoder
источник
1

Это работало на Windows 10 с Apache24:

1 - Добавить это внизу C:/Apache24/conf/httpd.conf

Listen 443
<VirtualHost *:443>
    DocumentRoot "C:/Apache24/htdocs"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "C:/Apache24/conf/ssl/server.crt"
    SSLCertificateKeyFile "C:/Apache24/conf/ssl/server.key"
</VirtualHost>

2 - Добавьте server.crtи server.keyфайлы в C:/Apache24/conf/sslпапке. Посмотрите другие ответы на этой странице, чтобы найти эти 2 файла.

Это оно!

jogi99
источник
Да, это работает. Я использовал шаги 1 - 3 из StephanieQ для генерации сертификата, а затем «openssl x509 -req -in server.csr -signkey server.key -out server.crt» для генерации файла * .crt с помощью cygwin.
b3wii
У меня нет httpd.conf, в какой файл я положил его? Вот что происходит, когда я помещаю этот текст внутрь apache2.conf:Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
Аарон Франке
1

ТЛ; др

ssh -R youruniquesubdomain:80:localhost:3000 serveo.net

И ваша локальная среда может быть доступна с https://youruniquesubdomain.serveo.net

Сервео лучший

  • Нет регистрации.
  • Нет установки.
  • Имеет HTTPS.
  • Доступно во всем мире.
  • Вы можете указать собственное исправление, поддомен.
  • Вы можете самостоятельно разместить его, так что вы можете использовать свой собственный домен и быть на будущее, даже если сервис не работает.

Я не мог поверить, когда я нашел эту услугу. Он предлагает все, и это самый простой в использовании. Если бы был такой простой и безболезненный инструмент для каждой проблемы ...

totymedli
источник
Это не работает больше в 2020 году, страница загружается вечно. Однако по какой-то причине команда SSH все еще работает ...?
Аарон Франке
1

Запуск Apache на Windows 10 здесь. Я не мог заставить Chrome доверять сертификату, сделанному в верхнем ответе Саймона. В итоге я использовал PowerShell для создания самозаверяющего сертификата.

Шаг 1 - Генерация самоподписанного сертификата

В PowerShell
New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My" 1

Шаг 2 - Настройка и экспорт сертификата

Введите Certificateв строке поиска Windows, щелкните Manage Computer Certificatesэлемент панели управления, который предлагается.

В появившейся программе управления сертификатами (certlm) вы должны увидеть localhostключ под Personal >> Certificates.

Я скопировал этот сертификат в Trusted Root Certification Authorities. Я буду честен в этом, я не уверен, если это необходимо.

Выбрав вновь скопированный сертификат, дважды щелкните по нему (сертификат localhost). В модальном сертификате щелкните Detailsвкладку, затем Copy to File...кнопку.

Это вызовет и Экспорт мастера, я решил экспортировать закрытый ключ, нажмите кнопку Далее. Я также решил Export all extended properties(опять же, я не уверен, было ли это необходимо). Я решил использовать простой пароль ( pass) и шифрование по умолчанию. Выберите папку для экспорта и назовите файл. Вы всегда можете переместить и переименовать файл, если это необходимо. Для простоты давайте скопируем его в вашу папку conf под вашей установкой Apache (в моем случае:) C:\apache\confи назовите файл myCert(полученный файл будет .pfxфайлом)

Шаг 3 - Конвертируйте .pfxфайл для использования с Apache

Отсюда я в основном следовал учебник здесь , но я добавлю инструкции здесь (переделаны для наших настроек) в случае, если сайт идет вниз.

Откройте командную строку в /apache/conf/папке.
Выполните следующие команды: Примечание. Предполагается, что вы находитесь openssl.exeв binпапке в корневой папке apache (это должно быть стандартное / по умолчанию)

..\bin\openssl pkcs12 -in myCert.pfx -nocerts -out privateKey.pem

Вам будет предложено ввести пароль, введите то, что вы вводите для шага 2 при экспорте .pfxфайла. В моем случае это так pass. Я ввел тот же пароль для фразы PEM и еще раз для подтверждения. Это создаст новый файл с именем privateKey.pemв вашей папке conf.

Затем запустите

..\bin\openssl rsa -in privateKey.pem -out private.pem

Снова вам будет предложено ввести пароль ( Enter pass phrase for privateKey.pem:), используйте пароль, который вы установили privateKey.pem. (В моем случае pass)
Вы должны увидеть сообщение writing RSA keyс новым файлом private.pemв вашей conf/папке. Это будет ваш SSLCertificateKeyFile.

Теперь для генерации соответствующего сертификата сервера. Бегать:

..\bin\openssl pkcs12 -in myCert.pfx -clcerts -nokeys -out EntrustCert.pem

Вам будет предложено ввести пароль, введите то, что вы вводите для шага 2 при экспорте .pfxфайла. Введите его, и теперь у вас будет файл с именем EntrustCert.pemв вашей confпапке. Это ваш SSLCertificateFile

Шаг 4 - Настройка httpd.conf

Используйте новые файлы, созданные как ключ и сертификат вашего сервера. Обязательно измените корневой каталог вашего документа на тот, где находятся ваши файлы!

ServerName localhost:80
Protocols h2 h2c http/1.1
<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>

<VirtualHost _default_:443>
  ServerName localhost:443
  DocumentRoot ${SRVROOT}/htdocs/MYSITE
  SSLEngine on
  SSLCertificateFile "${SRVROOT}/conf/EntrustCert.pem"
  SSLCertificateKeyFile "${SRVROOT}/conf/private.pem"
</VirtualHost>

Также в httpd.conf:

  • Убедитесь, что LoadModule ssl_module modules/mod_ssl.soне прокомментировано (нет #впереди)
  • Раскоментируйте LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
  • Раскоментируйте LoadModule http2_module modules/mod_http2.so
  • Раскомментируйте Include conf/extra/httpd-ssl.conf (ПРИМЕЧАНИЕ. Убедитесь, что файл находится там!)

У меня также есть библиотеки curl и open ssl:

# load curl and open ssl libraries
LoadFile "C:\php\libeay32.dll"
LoadFile "C:\php\ssleay32.dll"
LoadFile "C:\php\libssh2.dll"

Эти модули не должны быть необходимыми, но я отмечу, что они включены:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so

Шаг 5 - Конфиг httpd-ssl.conf

В extra/папке в conf/папке вы должны увидеть файл с именем httpd-ssl.conf.

5а. ИзменитьDocumentRoot - Измените значение DocumentRootпо умолчанию на каталог, в котором находятся ваши файлы.

5б. ИзменитьServerName - Измените значение ServerNameпо умолчанию (что-то вроде www.example.com:443) наlocalhost:443

5с. ИзменитеSSLCertificateFile
Изменить SSLCertificateFileс по умолчанию ( ${SRVROOT}/conf/server.crt) на${SRVROOT}/conf/EntrustCert.pem

5с. ИзменитеSSLCertificateKeyFile
Изменить SSLCertificateKeyFileс по умолчанию ( ${SRVROOT}/conf/server.key) на${SRVROOT}/conf/private.pem

Все вместе, в <VirtualHost _default_:443>теге.

#   General setup for the virtual host
DocumentRoot "${SRVROOT}/htdocs/MYSITE"
ServerName localhost:443
ServerAdmin admin@example.com
ErrorLog "${SRVROOT}/logs/error.log"
TransferLog "${SRVROOT}/logs/access.log"

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   Server Certificate:
#   Point SSLCertificateFile at a PEM encoded certificate.  If
#   the certificate is encrypted, then you will be prompted for a
#   pass phrase.  Note that a kill -HUP will prompt again.  Keep
#   in mind that if you have both an RSA and a DSA certificate you
#   can configure both in parallel (to also allow the use of DSA
#   ciphers, etc.)
#   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
#   require an ECC certificate which can also be configured in
#   parallel.
SSLCertificateFile "${SRVROOT}/conf/EntrustCert.pem"
#SSLCertificateFile "${SRVROOT}/conf/server-dsa.crt"
#SSLCertificateFile "${SRVROOT}/conf/server-ecc.crt"

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
#   ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile "${SRVROOT}/conf/private.pem"
#SSLCertificateKeyFile "${SRVROOT}/conf/server-dsa.key"
#SSLCertificateKeyFile "${SRVROOT}/conf/server-ecc.key"

Перезапустите Apache

После внесения этих изменений вы сможете перезагрузить Apache и перейти по адресу https: // localhost без предупреждения безопасности и небольшого замка!

Защищенный локальный хост

Я надеюсь, что это поможет кому-то! 😊

Источники:
1.) Ответ Аури Рахимзаде на создание самозаверяющего сертификата
2.) Доверьте Datacard - Как мне преобразовать .pfx для использования с сервером Apache?

StephanieQ
источник
0

Другой простой метод - использование Python Server в Ubuntu.

  1. Сгенерируйте server.xml с помощью следующей команды в терминале:

    openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes

    Примечание. Предполагается, что у вас установлен openssl .

  2. Сохраните приведенный ниже код в файле с именем simple-https-server.pyв любом каталоге, в котором вы хотите запустить сервер.

    import BaseHTTPServer, SimpleHTTPServer
    import ssl
    
    httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
    httpd.socket = ssl.wrap_socket (httpd.socket, certfile='./server.pem', server_side=True)
    httpd.serve_forever()
    
  3. Запустите сервер из терминала:

    python simple-https-server.py

  4. Посетите страницу по адресу:

    https://localhost:4443

Дополнительные примечания :

  1. Вы можете изменить порт в simple-https-server.pyфайле в строке

    httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)

  2. Вы можете изменить localhostсвой IP в той же строке выше:

    httpd = BaseHTTPServer.HTTPServer(('10.7.1.3', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)

    и получить доступ к странице на любом устройстве, к которому подключена ваша сеть. Это очень удобно в таких случаях, как «вы должны тестировать HTML5 GeoLocation API в мобильном устройстве, а Chrome ограничивает API только в безопасных соединениях».

Суть: https://gist.github.com/dergachev/7028596

http://www.piware.de/2011/01/creating-an-https-server-in-python/

Асим КТ
источник
0

Для тех, кто использует macOS, это отличное руководство https://getgrav.org/blog/macos-sierra-apache-multiple-php-versions для настройки вашей локальной среды веб-разработки. В своей третьей части https://getgrav.org/blog/macos-sierra-apache-ssl Энди Миллер объясняет, как настроить apache с самозаверяющим сертификатом:

Это ключевая команда:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt

Но есть несколько шагов, которые вы должны выполнить, так что проверьте это и удачи! ;)

Тиомно
источник
0

Я хотел бы добавить кое-что к очень хорошему ответу @CodeWarrior, который отлично работает в Chrome, но для Firefox требуется дополнительный шаг.

Поскольку Firefox не выдает сертификаты CA, которые Windows делает по умолчанию, вам нужно продолжить about:config, прокрутите вниз доsecurity.enterprise_roots.enabled и изменить его на true.

Теперь ваш сертификат должен рассматриваться как действительный и в Firefox.

Конечно, это только для целей разработки, так как доверие ssl является критически важной проблемой безопасности, и изменяйте эти параметры, только если вы знаете их последствия.

RDev
источник