Меню

настройка https на localhost

Как установить HTTPS локально без надоедливых уведомлений в браузере

Локальная настройка HTTPS может стать достаточно сложной задачей. Даже если вы успешно решите вопрос с самоподписанными сертификатами, вы все равно столкнетесь с ошибками приватности в браузере. В этой статье я расскажу вам про создание самоподписанных сертификатов, а также покажу вам интересный трюк, который поможет справиться с ошибками приватности в браузере.

В течение примерно года я работал с HTTPS в своей локальной среде разработки. На прошлой неделе я обновился до Google Chrome 58, и что-то изменилось, моя среда разработки перестала правильно функционировать – я стал получать уведомления о приватности в браузере.

В отличие от прошлых ошибок приватности, здесь уже не было варианта «Add Exception». Я проверил Firefox, и его поведение было таким же. В Safari пока все по-прежнему работало.

Поиск по ERR_CERT_COMMON_NAME_INVALID практически не дал никаких результатов, однако в конечном счете я обнаружил решение в трекере багов Chromium. Оказалось, что Chrome и Firefox отказались от поддержки commonName соответствия в сертификатах.

Мне удалось исправить мою сборку, воспользовавшись предложениями в комментарии Chromium (я расскажу об этом далее). В этой статье я покажу вам, как избавиться от ошибок приватности в браузере. Я буду обновлять эту статью, если что-то поменяется в будущем.

Зачем устанавливать HTTPS локально?

Почему бы просто не использовать обычный протокол HTTP локально? Причина проста: если ваш работающий сайт перенесен на HTTPS, и вы ведете разработку локально на HTTP, ваши среды разработки и продакшна будут отличаться. К примеру, моя среда разработки представляет собой Ubuntu сервер на виртуальной машине VMware на Mac. Продакшн-среда – это Ubuntu-сервер, работающий на Linode с практически аналогичной конфигурацией.

Естественно, среда разработки должна быть максимально похожа на вашу продакшн-среду. Если этого не происходит, вы получаете массу проблем, возникающих в продакшне, которые не были видны в среде разработки. Разработка HTTP-сайта, когда ваш продакшн представляет собой HTTPS-сайт – это лишний риск.

Создание самоподписанного сертификата

Как и в случае с включением HTTPS в продакшне, вам сначала понадобится сертификат. Для работающего сайта вы обычно запрашиваете сертификат у удостоверяющего центра, такого как Let’s Encrypt, Comodo и т.д. Для локальной среды разработки можно вполне обойтись самоподписанным сертификатом, генерируемым в командной строке. Делается это просто:

Выполнив эту команду, вы получите ряд вопросов:

Большинство из этих вопросов не так важны для среды разработки. Ответы будут отображаться при просмотре информации в сертификате, но это никак не повлияет на то, будет ли браузер считать ваш сайт защищенным или нет. В действительности единственный вопрос, на который нужно дать ответ – это Common Name (CN). Ответ на этот вопрос определяет, для какого домена сертификат будет действителен.

Однако сейчас вопрос про CN также является неважным. Что касается Chrome 58 и Firefox 48, в них Common Name игнорируется при сопоставлении доменного имени с сертификатом. По этой причине я и начал получать ошибки приватности, когда обновился до Chrome 58.

«В RFC 2818 описаны два метода сопоставления доменного имени с сертификатом – использование доступных имен в расширении subjectAlternativeName, или, в случае отсутствия расширения SAN, откат к commonName. Откат к commonName был признан устаревшим в RFC 2818 (опубликован еще в 2000 году), однако поддержка по-прежнему оставалась в разных TLS-клиентах, зачастую некорректно».

Устарел аж с 2000 года. Определено, пришло время для удаления поддержки.

Читайте также:  как сделать свои настройки в фифа 14

Поэтому теперь доменное имя должно определяться в расширении Subject Alternative Name (SAN) сертификата:

При создании самоподписанного сертификата нам нужно предоставить конфигурационный файл в OpenSSL и определить SAN в этом конфигурационном файле. Команды будут следующими:

Для конфигурационного файла dev.deliciousbrains.com.conf я использовал код со Stack Overflow, связанный с комментарием в Chromium, который я уже упоминал ранее.

Единственное изменение, которое я сделал, это заменил строку DNS.1 = example.com на DNS.1 = dev.deliciousbrains.com и удалил остальные строки DNS под ней. Вот полный конфиг с удаленными комментариями и очисткой форматирования:

Если вы используете MAMP, у вас может возникнуть соблазн создать свои самоподписанные сертификаты через MAMP UI:

Я пробовал это с MAMP 4.1.1, но, к сожалению, он не определяет SAN, и потому вы получите ошибку приватности ERR_CERT_COMMON_NAME_INVALID в браузере. Пока разработчики MAMP не обновят программу для определения SAN, вам придется создавать сертификаты в командной строке и затем добавлять их в MAMP.

Установка сертификата

Затем вам нужно будет установить сертификат в Nginx, Apache или на любой другой веб-сервер, который вы используете. Я не буду описывать этот процесс, поскольку он зависит от вашей среды. В моем случае я просто следовал инструкциям Hosting WordPress Yourself. Если вы используете MAMP, вы можете выбрать сертификат и файлы ключей через интерфейс, как показано на скриншоте.

После того, как вы обновите конфиг вашего веб-сервера и перезапустите его (не забудьте это сделать), загрузка вашего сайта все равно приведет к появлению ошибки приватности в браузере.

Вы можете заметить, что теперь возникает другая ошибка – ERR_CERT_AUTHORITY_INVALID. Браузер не доверяет сертификату, потому что мы подписали его самостоятельно, а не получили от удостоверяющего центра. Однако мы можем добавить сертификат в систему macOS Keychain и указать, что сертификат всегда должен быть доверенным.

Добавляем сертификат в macOS Keychain

  1. В Chrome открываем разрабатываемый сайт, который вы сконфигурировали для использования сертификата
  2. Щелкаем Cmd-Alt-I, чтобы открыть инструменты разработчика
  3. Щелкаем по вкладке Security
  4. Щелкаем по кнопке View certificate

Вы должны увидеть следующий экран.

Теперь перетаскиваем иконку сертификата в папку в приложении Finder.

Сертификат будет создан в данной папке. Делаем двойной щелчок по файлу. Если у вас имеются многочисленные keychain’ы, вы должны увидеть следующее окно:

Щелкаем Add. Если у вас только один keychain, то в таком случае ваш сертификат будет добавлен без какого-либо уведомления. Вне зависимости от того, появлялось ли уведомление или нет, у вас должно открыться окно Keychain Access. Найдите там свой сертификат:

Читайте также:  настройка xcamclient для openbox

Сделайте по нему двойной щелчок. Откроется окно с информацией о сертификате. Раскройте секцию Trust. Смените поле «When using this certificate:» на «Always Trust».

Закройте окно сертификата. Он попросит вас ввести пароль (или просканировать ваш палец), сделайте это. Теперь снова зайдите на свой разрабатываемый сайт.

Вы можете удалить файл сертификата из папки, в которую вы его перетащили, поскольку теперь он добавлен в keychain системы.

Если вам требуется SSL-сертификат для активного сайта, вы можете всегда приобрести его в магазине LeaderSSL.

источник

Настройка Apache для работы 1С через HTTPS (SSL)

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

1С:Предприятие тоже может работать по протоколу HTTPS.
Мы предлагаем статью-инструкцию, как настроить HTTPS в Apache таким образом, чтобы 1С:Предприятие работало без проблем через SSL.
Ну что же начнем.
Для начала установим Apache. Рассмотрим это для 1С:Предприятия x86-64 и для Windows.
1. Идем на сайт https://www.anindya.com/ и качаем файл apache_2.4.23-x64-openssl-1.0.2h.msi (цифры на момент скачивания могут быть другими).
2. Устанавливаем Apache.

Жмем Next > Next > Next. Выбираем Typical.

3. Проверим, что сайт доступен по localhost. Откройте браузер и введите localhost в адресную строку. Должна открыться страница с текстом » It Works! «
4. Отлично. Apache установлен, теперь давайте настроем его работу по SSL.
Находим в папке c:\Program Files\Apache Software Foundation\Apache2.4\conf файл httpd.conf

Это стандартный порт HTTPS. Заставляем Apache слушать и этот порт тоже. Если нам не нужен стандартный 80-ый порт и мы не планируем его использовать, то строку Listen 80 можно закомментировать добавив символ # (решетки) в начале строки. Так же имейте ввиду, что при изменении файлов в папке Program Files потребуется открытие файла в режиме администратора.

Раскомментируем в файле httpd.conf строчку:

# LoadModule ssl_module modules/mod_ssl.so

Убрав символ # . Т.е. строка должна стать такой:

LoadModule ssl_module modules/mod_ssl.so

4. В конце файла httpd.conf изменяем

SSLRandomSeed startup builtin
SSLRandomSeed connect builtin

SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
SSLSessionCache none

Записываем файл httpd.conf

5. Из каталога bin установленной папки с Apache cкопируем файлы ssleay32.dll и libeay32.dll в C:\Windows\System32 . Так же скопируем файл openssl.cnf из папки c:\Program Files\Apache Software Foundation\Apache2.4\conf\ в папку c:\Program Files\Apache Software Foundation\Apache2.4\bin\.

6. Запустим редактор реестра regedit (Пуск > Выполнить ввести текст regedit и нажать Enter) откроется окно реестра в нем найдем ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Apache2.4
В этой ветке найдем переменную ImagePath и два раза кликнем на ней.

7. Добавим SSL-сертификаты для домена. Тут есть варианты.

7.1. Если у Вас уже есть SSL-сертификаты для домена, то создайте папку ssl в папке C:\Program Files\Apache Software Foundation\Apache2.4\conf и переместите их туда (файлы *.key и *.cert). Идем на шаг 8.

Читайте также:  настройка ssh для raspberry

7.2. Если у Вас нет SSL-сертификатов, то вы можете их сгенерировать самостоятельно.

7.2.1. Открываем командную строку в режиме администратора и переходим в папку bin Apache. Вводим команду:

cd «C:\Program Files\Apache Software Foundation\Apache2.4\bin»

openssl req -config openssl.cnf -new -out ssl.csr

Идем по шагам в командной строке и заполняем необходимые поля. То, что вы введете не принципиально. Самое главное на этом этапе надо запомнить пароль (когда спросит pass phrase)

openssl rsa -in privkey.pem -out ssl.key

Спросит пароль, который вы вводили ранее.

openssl x509 -in ssl.csr -out ssl.cert -req -signkey ssl.key -days 3000

days — это срок действия сертификата в днях.

openssl x509 -in ssl.cert -out ssl.der.crt -outform DER

7.2.6. Создадим папку ssl в C:\Program Files\Apache Software Foundation\Apache2.4\conf и переместим из папки bin файлы ssl.key и ssl.cert (а вообще можно все сразу туда скопировать, что было получено на шагах 7.2.1. — 7.2.5) из C:\Program Files\Apache Software Foundation\Apache2.4\bin в C:\Program Files\Apache Software Foundation\Apache2.4\conf\ssl.

8. Снова открываем файл httpd.conf из папки C:\Program Files\Apache Software Foundation\Apache2.4\conf и добавляем секцию VirtualHost в самый конец файла httpd.conf:

demo.soft.ru :443>
SSLEngine On
SSLCertificateFile conf/ssl/ssl.cert
SSLCertificateKeyFile conf/ssl/ssl.key

Вместо адреса demo.soft.ru замените на свой сайт или IP-адрес, а можно вообще поставить звездочку (*) и будет *:443 (это означает, что сработает для всех запросов). Ну и если у вас есть свои ключи, и вы их не генерировали сами, то переименуйте ssl.cert и ssl.key

9. Перезапустим Apache. Открываем Monitor в правом нижнем углу, щелкнем по иконке и нажимаем restart. Если все хорошо, то Apache запустится без ошибок и появится зеленый значок.

10. Пробуем открыть сайт через HTTPS. В нашем случае можно и так https://localhost и вот так https://demo.soft.ru :

11. Теперь попробуем запустить 1С. В браузере открывается:

Теперь попробуем открыть базу через тонкий клиент и если мы использовали самодписанный сертификат то тут нас ждет разочарование:

12. Дело в том, что сервер 1С содержит собственный контроль достоверности HTTPS-соединений и корневых центров.
Необходимо открыть папку сервера 1С:Предприятия c:\Program Files\1cv8\8.3.15.1747\bin\ и в ней найти файл cacert.pem
Он отвечает как раз за эти центры сертификации.

Открываем командную строку и в ней выполняем команду:

openssl x509 -inform der -in ssl.der.crt -out ssl.pem -text -fingerprint -md5

После выполнения команды на экране Вы увидите Fingerprint. Скопируйте его. Это будет строка вида:

Откройте файл cacert.pem в папка 1С, перейдите в конец файла и с этой строки начинайте добавление своего сертификата в файл cacert.pem. После строки контрольной суммы сертификата, нужно добавить в файл cacert.pem содержимое файла, в который Вы экспортировали сертификат.

После этого запуск тонкого клиента будет работать без ошибок.

Если же и после этого есть ошибки, то можно вообще заставить клиент 1С не проверять сертификат. Для этого необходимо отредактировать информационную базу:

источник