<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Копытов Иван: заметки с тегом HTTP Public Key Pinning</title>
<link>https://kini24.ru/tags/http-public-key-pinning/</link>
<description>Блог ленивого сисадмина</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>Блог ленивого сисадмина</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Повышение безопасности сервера при помощи заголовков</title>
<guid isPermaLink="false">8</guid>
<link>https://kini24.ru/all/povyshenie-bezopasnosti-servera-pri-pomoschi-zagolovkov/</link>
<pubDate>Wed, 31 Aug 2016 11:39:41 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/povyshenie-bezopasnosti-servera-pri-pomoschi-zagolovkov/</comments>
<description>
&lt;p&gt;Для увеличения степени безопасности сервера понадобится добавить или удалить несколько заголовков, которые он отдает при запросе страниц. Я не буду подробно расписывать какой из них за что отвечает, ограничусь лишь кратким описанием.&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;a href="https://kini24.ru/all/vnedrenie-http-strict-transport-security-hsts-na-svoy-sayt/"&gt;HTTP Strict Transport Security (HSTS) &lt;/a&gt;— позволяет форсировать HTTPS подключение.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kini24.ru/all/zaschita-sayta-pri-pomoschi-http-public-key-pinning-hpkp/"&gt;HTTP Public Key Pinning (HPKP) &lt;/a&gt; — позволяет создать своеобразную «электронную подпись» для вашего сайта.&lt;/li&gt;
&lt;li&gt;X-Download-Options со значением «noopen» позволяет запретить открытие любых файлов с вашего сайта (например, документов в формате PDF), становится возможно только скачать их.&lt;/li&gt;
&lt;li&gt;X-Content-Type-Options со значением «nosniff» инструктирует Internet Explorer версии 8 не определять автоматически content-type, а использовать уже полученный.&lt;/li&gt;
&lt;li&gt;Еще один заголовок X-XSS-Protection со значением «1; mode=block» активирует встроенную защиту от XSS (Cross-Site Scripting, «межсайтовый скриптинг»).&lt;/li&gt;
&lt;li&gt;X-Frame-Options со значением «SAMEORIGIN» запрещает открывать страницы вашего сайта во фрейме на чужом сайте.&lt;/li&gt;
&lt;li&gt;Заголовок Set-Cookie должен указываться с параметрами HttpOnly и Secure. Это предотвратит XSS-атаки и защитит cookie от кражи при помощи скрипта javascript.&lt;/li&gt;
&lt;li&gt;В заголовке Server также должна быть указана минимальная информация о сервере. Например, просто Apache. Это не даст злоумышленнику получить дополнительную информацию о программном обеспечении, установленном на вашем сервере.&lt;/li&gt;
&lt;li&gt;По аналогичным причинам рекомендуется убрать заголовок X-Powered-By, если таковой присутствует.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;И, как обычно, есть ресурсы, с помощью которых можно проверить насколько корректно вы указали эти заголовки. Первый из них — &lt;a href="https://securityheaders.io"&gt;securityheaders.io&lt;/a&gt;, работает очень быстро, корректно указанные по его мнению заголовки выделяются зеленым цветом. Некоторые он не выделяет, но, думаю, что на них он просто не обращает внимание.&lt;/p&gt;
&lt;p&gt;Второй ресурс — &lt;a href="https://redbot.org"&gt;Redbot&lt;/a&gt;. В левой части страницы он показывает заголовки, которые он смог получить. В правой вкратце описывается действие заголовка, также значками выделяется корректность их указания. Стадия их получения почему-то немного затянута, на мой взгляд — около 1 минуты, будем надеяться, что это будет исправлено. Также есть возможность включить в запрос дополнительные параметры.&lt;/p&gt;
&lt;p&gt;Если вы думаете, что я что-то пропустил, то пишите в комментариях.&lt;/p&gt;
</description>
</item>

<item>
<title>Защита сайта при помощи HTTP Public Key Pinning (HPKP)</title>
<guid isPermaLink="false">5</guid>
<link>https://kini24.ru/all/zaschita-sayta-pri-pomoschi-http-public-key-pinning-hpkp/</link>
<pubDate>Tue, 16 Aug 2016 22:24:24 +0700</pubDate>
<author></author>
<comments>https://kini24.ru/all/zaschita-sayta-pri-pomoschi-http-public-key-pinning-hpkp/</comments>
<description>
&lt;p&gt;Данная технология призвана защитить посетителя вашего сайта от атаки типа MITM (Man in the middle, человек посередине). Иными словами посетитель может быть уверен, что данные, которые он получает, исходят с вашего сайта, а не с какого-то другого.&lt;/p&gt;
&lt;p&gt;Суть технологии состоит в создании публичного ключа на основе сертификата, который установлен на вашем сайте. Соответственно, чтобы она работала, требуется валидный сертификат. Впрочем, она будет работать и на самоподписанных (self-signed) сертификатах. Полученный на основе вашего сертификата ключ добавляется в заголовок ответа вашего сервера, после чего браузер сравнивает полученный ключ с тем, который он вычисляет после получения данных о вашем сертификате.&lt;/p&gt;
&lt;p&gt;Итак, что нам требуется:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Какой-либо установленный для сайта сертификат.&lt;/li&gt;
&lt;li&gt;Консоль для получения публичного ключа.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Кстати, не так давно для нормального функционирования этой технологии требовался всего лишь один ключ, сейчас же нужно указывать два или более ключей. На мой взгляд двух будет достаточно, от этого и будем отталкиваться. Второй ключ является «резервным», этот момент я не совсем понимаю, но не будем отступать от требований.&lt;/p&gt;
&lt;p&gt;Действовал я по следующей схеме:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;— получаем сертификат на сайте &lt;a href="https://letsencrypt.org/"&gt;Let’s Encrypt&lt;/a&gt; для двух сайтов: example.com и www.example.com;&lt;/li&gt;
&lt;li&gt;— так как я использую вариант без www, то ключ, полученный на базе первого будет основным, на базе второго — резервным;&lt;/li&gt;
&lt;li&gt;— генерируем ключи для обоих сертификатов;&lt;/li&gt;
&lt;li&gt;— добавляем нужные инструкции в файл /&lt;i&gt;etc/httpd2/conf/sites-available/default-http.conf&lt;/i&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;О получении сертификата рассказывать не буду, достаточно почитать главную страницу сайта. Допустим, вы его получили и установили на свой сайт. Теперь требуется создать ключи при помощи следующей команды:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;openssl x509 -noout -in certificate.pem -pubkey | openssl rsa -pubin -outform der | \&lt;/code&gt;&lt;/pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;openssl dgst -sha256 -binary | base64&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;где &lt;i&gt;certificate.pem&lt;/i&gt; — полный путь к сертфикату.&lt;/p&gt;
&lt;p&gt;После выполнения команды вы получите нечто подобное:&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;LPJNul+wow4m6DsqxbninhsWHlwfp0JecwQzYpOLmCQ=&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Это и есть нужный вам ключ. Повторяем команду для второго сертификата и добавляем данные в файл конфигурации сайта:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Header set Public-Key-Pins &amp;quot;pin-sha256=\&amp;quot;pin1\&amp;quot;; pin-sha256=\&amp;quot;pin2\&amp;quot;; max-age=time&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;где:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;pin1&lt;/i&gt; — основной ключ для данного сайта. В моем случае example.com;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;pin2&lt;/i&gt; — резервный ключ для сайта. То есть www.example.com;&lt;/li&gt;
&lt;li&gt;&lt;i&gt;time&lt;/i&gt; — время действия ключа в секундах.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Опциональный параметр &lt;i&gt;includeSubDomains&lt;/i&gt; указывает на то, что ключи действительны также для поддоменов.
Еще один необязательный параметр report-uri указывает на адрес, куда должны отправляться отчеты об ошибках в формате JSON. Его я, возможно, добавлю на сайт, но пока что считаю его ненужным для себя.&lt;/p&gt;
&lt;p&gt;Какие тут есть нюансы? Если вы неправильно настроите HPKP, ваш сайт станет недоступен. Можно также настроить отправку отчетов в случае каких-либо ошибок. Для этого немного меняем заголовок (или просто добавляем еще одной строкой):&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Header set Public-Key-Pins-Report-Only &amp;quot;pin-sha256=\&amp;quot;pin1\&amp;quot;; pin-sha256=\&amp;quot;pin2\&amp;quot;; max-age=time&amp;quot;&lt;/code&gt;&lt;/pre&gt;</description>
</item>


</channel>
</rss>