Как настроить https php

Как настроить HTTPS-соединение?

Меня уже давно просили немного осветить тему настройки HTTPS-соединения на сайте. Для тех, кто не знает, зачем нужен HTTPS, объясняю: когда Вы передаёте свои данные (например, логин и пароль) серверу, то они идут в открытом виде. Если их злоумышленник перехватит, то, соответственно, он их узнает. На обычных сайтах это не так страшно, но вот если это будет какая-нибудь платёжная система, тогда, получив доступ к данным, злоумышленник просто опустошит Ваши кошельки. А с использованием HTTPS данные отправляются в зашифрованном виде, и только лишь у сервера-приёмника есть ключ, позволяющий их расшифровать. То есть злоумышленник, перехватив данные, не получит ровным счётом ничего.

Сразу говорю, что сам сайт никак не меняется. По сути для создания HTTPS-соединения надо лишь настроить сервер.

Итак, порядок действий:

  1. Настроить SSL. Сам процесс зависит от сервера, но, как правило, по умолчанию он уже настроен. В пакете Denwer он уже также подготовлен для работы.
  2. Купить и установить сертификат на сервер. Цены начинаются примерно от 2500 рублей в год. Можно, конечно, и не покупать, но тогда пользователей будут постоянно предупреждать, что используется недоверенный сертификат. Сам сертификат состоит из двух частей: открытый и закрытый ключ (public и private). Первый используется для шифрования данных от клиента к серверу, а второй для расшифровки этих данных уже на сервере. Установка сертификата также зависит от сервера, плюс от операционной системы.
  3. Настроить виртуальный хост. Примерный код я покажу ниже, но опять же это всё зависит от сервера и от операционной системы.

Ниже привожу код, который необходимо прописать в файле httpd.conf (файл настройки сервера Apache):

#Включить SSL
SSLEngine on
# Путь к сертификату
SSLCertificateFile /usr/local/etc/apache/ssl.crt/certificate.crt
# Путь к закрытому ключу
SSLCertificateKeyFile /usr/local/etc/apache/ssl.key/privatekey.key
# Убираем ошибку у Internet Explorer «Bad data from the server»
SetEnvIf User-Agent «.*MSIE.*» nokeepalive ssl-unclean-shutdown
# Путь к log-файлу
ErrorLog /usr/local/apache/logs/ssl_engine_log
# Формат содержимого log-файла
CustomLog /usr/local/apache/var/log/ssl_request_log \ «%t %h %x %x \»%r\» %b»

После этого можно будет обращаться к https://mysite.ru, тем самым, делая безопасное соединение с сайтом.

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

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 11 ):

    А все браузеры поддерживаю 256 битное шифрование?

    Не все, а поддержка 256 битного шифрования зависит ещё и от сервера, а также от ОС.

    Если сервер apache. OC — Windows 7? А браузер MSIE7?

    Читайте также:  Сегодня не работают все приложения

    IE7 не поддерживает, только с IE8 появилась такая поддержка.

    у вас такой вопрос!! от php nado otpravit sms na tel a kak eto budet kogda nebud vi rabotali ob etom-smpp. spasibo

    SMS надо отправлять через сторонние сервисы, причём каждое сообщение будет стоить Вам денег. Как настроить это на сайте, Вам объяснят в самом сервисе, дав инструкцию и код.

    nam est elektroniy dnevnik v tadjikistan i nado sms dnevnik no tam nado vash savet kak im eto realizovaat

    Здравствуйте Михаил! Поздравляю Вас с Новым Годом (дважды,так как в прошлом письме не поздравила)! В статье «Как настроить HTTPS-соединение?» Вы рассказываете про настройку применительно к серверу Apache. А не могли бы Вы рассказать о настройках в случае применения сервера IIS 7.5? С уважением, Маша.

    Источник

    https://

    http:// — https:// — Доступ к URL-адресам по протоколу HTTP(s)

    Описание

    Предоставляет доступ только для чтения файлов/ресурсов через HTTP. По умолчанию используется HTTP 1.0 GET. Для поддержки виртуальных хостов на основе имён вместе с запросом посылается заголовок Host: . Если вы сконфигурировали строку user_agent, используя ваш файл php.ini или контекст потока, то она также будет включена в запрос.

    Этот поток также позволяет получить доступ к содержимому ресурса; заголовки сохраняются в переменной $http_response_header .

    Если важно знать URL, с которого был получен документ (после всех переадресаций, которые были произведены), то вам необходимо обработать серию заголовков ответов, возвращаемых потоком.

    INI-директива from будет использоваться для заголовка From: , если установлена и не переопределена в контексте Контекстные опции и параметры.

    Использование

    • http://example.com
    • http://example.com/file.php?var1=val1&var2=val2
    • http://user:password@example.com
    • https://example.com
    • https://example.com/file.php?var1=val1&var2=val2
    • https://user:password@example.com

    Опции

    Основная информация

    Атрибут Поддержка
    Ограничение по allow_url_fopen Да
    Чтение Да
    Запись Нет
    Добавление Нет
    Одновременное чтение и запись Недоступно
    Поддержка stat() Нет
    Поддержка unlink() Нет
    Поддержка rename() Нет
    Поддержка mkdir() Нет
    Поддержка rmdir() Нет

    Примеры

    Пример #1 Определение URL, с которого был забран документ после переадресаций

    $fp = fopen ( $url , ‘r’ );

    $meta_data = stream_get_meta_data ( $fp );
    foreach ( $meta_data [ ‘wrapper_data’ ] as $response ) <

    /* Были ли мы переадресованы? */
    if ( strtolower ( substr ( $response , 0 , 10 )) == ‘location: ‘ ) <

    /* Сохранить в $url адрес, куда нас переадресовали */
    $url = substr ( $response , 10 );
    >

    Примечания

    Замечание: Протокол HTTPS поддерживается только когда модуль openssl включён.

    Соединения HTTP предназначены только для чтения; запись данных или копирование файлов в HTTP-ресурс не поддерживается.

    Отправка запросов POST и PUT, например, может быть выполнена с помощью HTTP-контекста.

    Смотрите также

    • Опции контекста HTTP
    • $http_response_header
    • stream_get_meta_data() — Извлекает заголовок/метаданные из потоков/файловых указателей

    User Contributed Notes 4 notes

    HTTP post function;

    function post_it ( $datastream , $url ) <

    $url = preg_replace ( «@^http://@i» , «» , $url );
    $host = substr ( $url , 0 , strpos ( $url , «/» ));
    $uri = strstr ( $url , «/» );

    $reqbody = «» ;
    foreach( $datastream as $key => $val ) <
    if (!empty( $reqbody )) $reqbody .= «&» ;
    $reqbody .= $key . «=» . urlencode ( $val );
    >

    $contentlength = strlen ( $reqbody );
    $reqheader = «POST $uri HTTP/1.1\r\n» .
    «Host: $host \n» . «User-Agent: PostIt\r\n» .
    «Content-Type: application/x-www-form-urlencoded\r\n» .
    «Content-Length: $contentlength \r\n\r\n» .
    » $reqbody \r\n» ;

    $socket = fsockopen ( $host , 80 , $errno , $errstr );

    if (! $socket ) <
    $result [ «errno» ] = $errno ;
    $result [ «errstr» ] = $errstr ;
    return $result ;
    >

    fputs ( $socket , $reqheader );

    while (! feof ( $socket )) <
    $result [] = fgets ( $socket , 4096 );
    >

    As it says on this page:

    «The stream allows access to the body of the resource; the headers are stored in the $http_response_header variable. Since PHP 4.3.0, the headers are available using stream_get_meta_data().»

    This one sentence is the only documentation I have found on the mysterious $http_response_header variable, and I’m afraid it’s misleading. It implies that from 4.3.0 onward, stream_get_meta_data() ought to be used in favor of $http_response_header.

    Don’t be fooled! stream_get_meta_data() requires a stream reference, which makes it ONLY useful with fopen() and related functions. However, $http_response_header can be used to get the headers from the much simpler file_get_contents() and related functions, which makes it still very useful in 5.x.

    Also note that even when file_get_contents() and friends fail due to a 4xx or 5xx error and return false, the headers are still available in $http_response_header.

    If you want to send more than one custom header, just make header an array:

    Источник

    Не удалось найти оболочку «https» – вы забыли включить ее при настройке PHP?

    Проблема в этом. Я провел тщательное исследование решений в отношении этого, и я знаю, что есть темы для этого, и я следил за ними тоже, и ничего не сработало. Это, как говорится, я точно перечислю все, что я сделал до сих пор. Я запускаю PHP 5.2.14 с Zend Debugging в последней версии Eclipse на моем компьютере под управлением Windows XP. У меня 1 ГБ ОЗУ. У меня XAMPP работает с Apache, MySQL и FileZilla.

    На XAMPP я сделал следующее (во время этих изменений Apache отключился): нажал на Admin из панели управления XAMPP и перешел на https:// localhost/xampp/ . Оттуда я принял сертификаты из этой строки на странице приветствия:

    Для поддержки OpenSSL используйте тестовый сертификат с https: // 127.0.0.1 или https: // localhost.

    В этом же разделе я проверил phpinfo() . В разделе «Окружающая среда» SERVER[«HTTPS»] . В разделе «Apache Environment» HTTPS . В разделе «Переменные PHP» параметр _SERVER[«HTTPS»] On . В разделе «Phar» OpenSSL support disabled (установите ext / openssl). Я не знаю, как включить Phar.

    Теперь о самих файлах в C: \ xampp, я пошел в папку PHP. Под производством и разработкой файлов php.ini (лучше безопасно, чем извините), у меня есть allow_url_fopen=On , allow_url_include=On , и я удалил точку с запятой, так что extension=php_openssl.dll больше не комментируется. Я даже подтвердил, что .dll находится в папке ext папки PHP. Оба файла libeay32.dll и ssleay32.dll находятся в папках PHP и Apache. Папка Apache не содержит файлов производительности или разработки php.ini.

    Я пошел на http://www.slproweb.com/products/Win32OpenSSL.html и установил Win32 OpenSSL v1.0.0d для безопасной меры.

    Теперь строка кода, о которой идет речь в моем файле retrieve_website.php, выглядит так:

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

    Когда я запускаю его как скрипт PHP на Eclipse, все выводит отлично, как я хочу, вместе с этими результатами:

    Несмотря на все эти изменения, которые я сделал (после того, как я начал Apache), я все равно получаю те же ошибки при первом доступе к моему скрипту PHP в Eclipse и Firefox через http: //localhost/tutorial/retrieve_website.php :

    Предупреждение: file_get_contents () [function.file-get-contents]: Не удалось найти оболочку «https» – вы забыли включить ее при настройке PHP? в C: \ xampp \ htdocs \ tutorial \ retrieve_website.php в строке 29

    Предупреждение: file_get_contents (https: // www.googleapis.com/customsearch/v1?key= удаленный идентификатор API и cx = удаленный идентификатор поиска & q = + Devil + go + down + to + Georgia & alt = atom & num = 5) [function.file -get-contents]: не удалось открыть поток: нет такого файла или каталога в C: \ xampp \ htdocs \ tutorial \ retrieve_website.php в строке 29

    Предупреждение: DOMDocument :: loadXML () [domdocument.loadxml]: пустая строка, предоставленная в качестве входа в C: \ xampp \ htdocs \ tutorial \ retrieve_website.php в строке 33

    openssl: no http wrapper: yes https wrapper: no wrappers: array (10) <[0] =>string (3) «php» [1] => string (4) «file» [2] => string (4 ) «glob» [3] => строка (4) «данные» [4] => строка (4) «http» [5] => строка (3) «ftp» [6] => строка (3) » zip «[7] => string (13)» compress.zlib «[8] => string (14)» compress.bzip2 «[9] => string (4)» phar «>

    Что я забыл или не сделал? Насколько мне известно, я сделал все, что я исследовал относительно HTTPS и OpenSSL

    Я решил его в XAMPP, раскомментируя ;extension=php_openssl.dll в /apache/bin/php.ini несмотря на то, что phpinfo () говорит мне, что /php/php.ini был загруженным ini-файлом.

    EDIT: Я думаю, что ответ Ezra – лучшее решение, непосредственно добавляющее линию расширения к соответствующему ini-файлу.

    Мне пришлось добавить extension=php_openssl.dll в файл php.ini расположенный в xampp/php/php.ini . Как-то его там не было, после добавления его и перезапуска Apache все работало нормально.

    просто добавьте две строки в файл php.ini.

    он работает для меня.

    Возможно, ваш Apache не скомпилирован с поддержкой SSL. В любом случае используйте cURL вместо file_get_contents. Попробуйте этот код, если он терпит неудачу, я прав.

    Я включил расширение openssl, и он работает для меня 🙂

    ; расширение = php_openssl.dll

    расширение = php_openssl.dll

    В моем случае проблема была связана с WAMP с использованием другого php.ini для CLI, чем Apache, поэтому ваши настройки, сделанные в меню WAMP, не относятся к CLI. Просто измените CLI php.ini, и он работает.

    в OpenSuse 12.1 требовалось только следующее:

    Вместо этого вы можете использовать эту функцию.

    Для меня мне пришлось раскомментировать эти строки в php.ini:

    «ext» применим, если php_openssl.dll находится в папке «ext».

    Примечание. Мне пришлось сделать это для двух моих файлов php.ini, иначе это не сработало. Один находится в папке установки vs.php, а другой – в папке PHP

    После того, как я проверил весь день, я понял ответ благодаря этому руководству: http://piwigo.org/forum/viewtopic.php?id=15727

    В основном под Eclipse -> Windows -> Preferences -> PHP Executables, есть раздел, на котором ссылаются .exe и .ini. По умолчанию они были в каталоге Eclipse, когда вы устанавливаете функцию SDK для инструментов разработки PHP из Eclipses Install New Software в меню «Справка».

    Поэтому вместо этого я добавил новый исполняемый файл под названием PHP 5.3.5 (CGI) и ссылался на cgi.exe и .ini из папки php xampp.

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

    На MAC AMPPS я обновил php-5.5.ini следующим образом, и теперь он работает.

    Я тоже получил эту ошибку. Я понял, что в моей версии PHP не было скомпилировано openssl, поэтому просто добавить директиву расширения в php.ini было недостаточно. Я не знаю, как вы должны решить это в своем конкретном случае, но для меня я использую macports, и команда была просто:

    Я использую opsenSUSE Leap, и у меня была такая же проблема – это означает, что OpenSSL не поддерживается. Вот как я это решил:

    1. Открыть YaST.
    2. Перейдите к Software Management.
    3. В поле поиска на левой панели введите «php5-openssl» и нажмите клавишу возврата.
    4. Установите флажок рядом с «php5-openssl» в правой панели, чтобы выбрать его, и нажмите «Принять» (это добавляет поддержку OpenSSL).
    5. Перезапустить Apache: sudo service apache2 restart

    Источник

    Читайте также:  Настроить магнитолу пионер mvh 150ub без сабвуфера
    Оцените статью