Как настроить HTTPS-соединение?
Меня уже давно просили немного осветить тему настройки HTTPS-соединения на сайте. Для тех, кто не знает, зачем нужен HTTPS, объясняю: когда Вы передаёте свои данные (например, логин и пароль) серверу, то они идут в открытом виде. Если их злоумышленник перехватит, то, соответственно, он их узнает. На обычных сайтах это не так страшно, но вот если это будет какая-нибудь платёжная система, тогда, получив доступ к данным, злоумышленник просто опустошит Ваши кошельки. А с использованием HTTPS данные отправляются в зашифрованном виде, и только лишь у сервера-приёмника есть ключ, позволяющий их расшифровать. То есть злоумышленник, перехватив данные, не получит ровным счётом ничего.
Сразу говорю, что сам сайт никак не меняется. По сути для создания HTTPS-соединения надо лишь настроить сервер.
Итак, порядок действий:
- Настроить SSL. Сам процесс зависит от сервера, но, как правило, по умолчанию он уже настроен. В пакете Denwer он уже также подготовлен для работы.
- Купить и установить сертификат на сервер. Цены начинаются примерно от 2500 рублей в год. Можно, конечно, и не покупать, но тогда пользователей будут постоянно предупреждать, что используется недоверенный сертификат. Сам сертификат состоит из двух частей: открытый и закрытый ключ (public и private). Первый используется для шифрования данных от клиента к серверу, а второй для расшифровки этих данных уже на сервере. Установка сертификата также зависит от сервера, плюс от операционной системы.
- Настроить виртуальный хост. Примерный код я покажу ниже, но опять же это всё зависит от сервера и от операционной системы.
Ниже привожу код, который необходимо прописать в файле 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 %
После этого можно будет обращаться к https://mysite.ru, тем самым, делая безопасное соединение с сайтом.
В данной статье я показал ход действий для настройки HTTPS-соединения на сайте. Ещё раз повторяю, каждый из этапов зависит от сервера и от операционной системы, поэтому всё-таки придётся воспользоваться поиском для одного из частных случаев, который возник конкретно у Вас.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 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 не поддерживается. Вот как я это решил:
- Открыть YaST.
- Перейдите к Software Management.
- В поле поиска на левой панели введите «php5-openssl» и нажмите клавишу возврата.
- Установите флажок рядом с «php5-openssl» в правой панели, чтобы выбрать его, и нажмите «Принять» (это добавляет поддержку OpenSSL).
- Перезапустить Apache: sudo service apache2 restart
Источник