Как настроить https на linux
Мы будем использовать скрипт OpenSSL и htrace.sh.
Кроме того, он также может быть использован для сканирования домена с помощью внешних средств безопасности, в основном Mozilla Observatory и SSL Labs API.
1) Использование скрипта htrace
Кроме того, более подробную информацию можно отобразить с помощью простой команды скрипта.
Он включает в себя:
Требования
Прежде чем продолжить, убедитесь, что в вашей системе установлено следующее:
- Curl 7.49 или более поздний
- OpenSSL
- Git
Установка и запуск скрипта htrace.sh
Во-первых, клонируйте репозиторий htrace
Вывод
Перейдите в каталог htrace
Затем установите htrace, используя следующую команду:
Create symbolic to /usr/local/bin Create man page to /usr/local/man/man8
Использование htrace
Теперь мы можем запустить приложение и протестировать домен.
Синтаксис команды
Другие варианты включают в себя:
Вывод
2) Использование OpenSSL
Помимо использования скрипта оболочки htrace.sh, вы можете использовать OpenSSL для отладки проблемы сертификата SSL из командной строки.
Также включена команда openssl, которую вы можете использовать для отладки проблем с сертификатами SSL.
Использование
Пример вывода
Установка mitmproxy в ubuntu
sudo apt-get install mitmproxy
Настройка mitmproxy в ubuntu
Перед запуском mitmproxy необходимо настроить браузер, или систему, указав в их настройках порт mitmproxy. Объяснять как это сделать в этой статье считаю лишним, но по браузеру chromium кое что поясню, когда я зашел в настройки прокси в браузере, я увидел это:
и после перезапустить браузер.
В моем случае mitmproxy установлен на локальный компьютер, то есть в поле «адрес» нужно будет прописать адрес локального хоста 127.0.0.1.
Как указать прокси сервер для некоторых других приложений в ubuntu, описано здесь.
Всё, можно приступать к запуску mitmproxy. Запускается он из терминала:
По умолчанию mitmproxy запускается на 8080 порту. Для запуска на другом порту нужно указать параметр -p:
mitmproxy -p 3000
Я расскажу, как добавить сертификат mitmproxy в браузер chromium. Открываем настройки, дополнительные настройки, настроить сертификаты:
Далее открываем вкладку «Центры сертификации»:
Внизу в этой же вкладке нажимаем кнопку «импорт»:
Во вновь открывшемся окне выбираем домашний каталог, в нем открываем папку .mitmproxy и выбираем файл «mitmproxy-ca.pem»:
Папка .mitmproxy по умолчанию не видна, если вы не можете ее найти в домашнем каталоге, нажмите комбинацию клавиш ctrl h для отображения всех скрытых файлов и папок.
После выбора сертификата должно появиться окно, поставьте галочку напротив фразы «доверять этому сертификату при идентификации сайтов» и нажмите «ОК»:
Но всё больше в последнее время давление на владельцев веб-ресурсов:
Зачем нужен сертификат сайту
Подробнее остановимся на последнем. Всё ещё можно купить сертификат, в котором будет указано, что домен подписан сертификатом, который принадлежит компании «Roga & Kopyta Int.». Но надо ли это?
Данный способ несколько раз проверен на PHP-сайтах (в том числе wordpress) и Django-сайтах (через uwsgi).
Для начала установим необходимые пакеты для добавления ppa-репозиториев:
apt up apt install -y python-software-properties software-properties-common
add-apt-repository ppa:certbot/certbot apt up
apt install -y certbot
Многие руководства советуют добавлять location /.well-known, но certbot и letsencrypt используют именно /.well-known/acme-challenge. В связи с этим у меня были определённые трудности, когда я это настраивал для Django-сервиса.
Перезагрузим конфиги nginx:
systemctl reload nginx
И теперь мы можем уже запустить генерацию сертификатов:
И снова перечитаем конфигурацию nginx:
systemctl reload nginx
В очередной раз перечитаем конфигурацию nginx:
systemctl reload nginx
Теперь должно всё работать.
Ответы на вопросы читателей
A: Современные версии certbot добавляют в crontab запись для автоматического обновления.
Q: Эту /.well-known/acme-challenge/ директорию надо создавать или нет?
В Linux существует много полезных консольных команд, которые при необходимости хотелось бы запустить через proxy. Некоторые приложения имеют встроенную поддержку proxy, а некоторые нет. Далее описано как пользоваться востребованными утилитами через proxy, даже теми, которые этой поддержки не имеют.
curl: передача данных через proxy
Часть параметров curl можно записать в файл
С помощью и curl также можно замерить время отклика сервера:
Результат будет выглядеть так:
real 0m0.307s user 0m0.000s sys 0m0.004s
wget: закачка файлов через proxy
proxy-user = username proxy-password = password user-agent = Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
ssh: доступ к серверам
Для доступа к серверам через ssh и proxy также лучше использовать соксификатор dante.
Соксификатор dante
Чтобы все время не вводить данные о proxy можно создать файл /etc/socks.conf
Пример для SOCKS:
DNS запросы через proxy
Часто требуется чтобы и преобразование имен происходило через proxy. Если использовать dante, то запрос на преобразование имен идет и через proxy, и через именной сервер указанный в /etc/resolv.conf . Понять почему же идет два одинаковых запроса вместо одного не удалось. Поэтому можно предложить два варианта:
1) Закомментировать именные сервера в файле /etc/resolv.conf, чтобы преобразование имен шло только через proxy. Это отразится на всей системе.
2) Изменить /etc/resolv.conf и выставить именные сервера необходимой страны, или просто отличные от серверов провайдера. Например установить сервера Google:
nameserver 8.8.8.8 nameserver 8.8.4.4
Чтобы данные не были перезаписаны именными серверами провайдера (при переподключении), можно запретить обновление списка именных серверов сетевому менеджеру (NetworkManager/wicd) или DHCP-клиенту (спасибо ergil за корректировку).
sudo chattr +i /etc/resolv.conf
Если есть какие-то дополнения, пожалуйста, напишите, это будет полезно узнать и применить.
Но всё больше в последнее время давление на владельцев веб-ресурсов:
Зачем нужен сертификат сайту
Подробнее остановимся на последнем. Всё ещё можно купить сертификат, в котором будет указано, что домен подписан сертификатом, который принадлежит компании «Roga & Kopyta Int.». Но надо ли это?
Сервис Let’s Encrypt предлагает бесплатные сертификаты типа «Этот сетрификат выдан этому домену». То есть по сути гарантирует лишь то, что никакой шутник не подменил сайт, а значит данные пересылаются безопасно. Большинству сайтов такой защиты — за глаза!
Настраиваем Let’s Encrypt на nginx в Ubuntu
Данный способ несколько раз проверен на PHP-сайтах (в том числе wordpress) и Django-сайтах (через uwsgi).
Для начала установим необходимые пакеты для добавления ppa-репозиториев:
Добавим программу certbot, которая будет обновлять нам сертификаты. Замечу, что Let’s Encrypt выдаёт сертификаты на 2 месяца, поэтому его надо обновлять автоматически — этим и займётся certbot.
Ну и поставим сам certbot — репозиторий его ведь добавили!
Дальше нам понадобиться добавить путь, по которому сервис Let’s Encrypt будет проверять — мы ли это.
Многие руководства советуют добавлять location /.well-known , но certbot и letsencrypt используют именно /.well-known/acme-challenge . В связи с этим у меня были определённые трудности, когда я это настраивал для Django-сервиса.
Перезагрузим конфиги nginx:
И теперь мы можем уже запустить генерацию сертификатов:
И снова перечитаем конфигурацию nginx:
В очередной раз перечитаем конфигурацию nginx:
Теперь должно всё работать.
Забодьтесь о безопасности своих пользователей — теперь это ещё и «бесплатно».
Ответы на вопросы читателей
Q: Я правильно понимаю, что бот certbot будет сам заходить на сервис Let’s Encrypt и продлевать сертификаты каждые 2 месяца?
A: Современные версии certbot добавляют в crontab запись для автоматического обновления.
Если же не хотите пологаться на то, что кто-то позаботится об обновлении, можете добавить сами в cron команду /usr/bin/letsencrypt renew && nginx -s reload . Раз в день / неделю – впролне себе нормально. Например, от юзера, у которого есть права на letsencrypt renew и nginx -s reload выполнить:
– каждый день в полночь по времени сервера.
Q: Эту /.well-known/acme-challenge/ директорию надо создавать или нет?
A: В описанном location есть директива root . Она указывает на директорию, куда будет направлять данный URL. Эту же директорию мы указываем certbot-у как --webroot-path - он её сам создаст и будет генерить нужные файлы для подтверждения, что это действительно тот домен, которым представляется.
Вообще, весь конфиг сайта может выглядеть вот так (в примере – uwsgi-приложение):
Когда вы сгенерировали CSR-запрос и приобрели SSL сертификат, воспользуйтесь этой инструкцией по установке сертификата на веб-сервер Nginx под управлением Linux: Ubuntu, Debian или CentOS.
После заказа SSL сертификата файлы для его установки отразятся в панели управления (меню SSL): .CA - файл сертификата Центра Сертификации (Certificate Authority). .CRT - файл сертификата вашего веб-сайта.
Как загрузить нужные файла на веб-сервер
Прежде всего загрузите файлы .ca и .crt на веб-сервер. При отсутствии графического окружения рабочего стола на сервере загрузка файлов может осуществиться на другой компьютер. Впоследствии их можно будет перенести.
Внимание: предполагается, что нужная для применения пара закрытый/открытый ключ была создана на том же веб-сервере, куда будет перенесен приобретенный сертификат. При создании ключей на другом сервере следует также перенести файл закрытого ключа .key на ваш веб-сервер (аналогично описанной ниже процедуре копирования файлов сертификатов).
Как переносить сертификаты с компьютера Linux/Mac OS:
Проще всего – при помощи опции SCP, встроенной в возможность терминала вашего компьютера:
Скачайте файлы .CA и .CRT на локальный компьютер. Откройте терминал и папку с сохраненными сертификатами (напр., Downloads):
Скопируйте сертификаты вашего сайта и Центра Сертификации на веб-сервер:
scp - команда для копирования файлов
user - имя вашего пользователя для подключения к серверу через ssh (часто используется root)
1.1.1.1 - IP-адрес вашего веб-сервера
/etc/ssl - директория на удаленном сервере, куда следует сохранить загружаемые файлы.
Как переносить сертификаты с компьютера Windows:
Скачайте, установите и включите программу WinSCP. В открывшемся окне наберите данные для подключения к вашему серверу по SSH. Слева в окне отразятся файлы на локальном компьютере, справа - на подключенном удаленном сервере. Выберите или создайте директорию, куда нужно сохранить сертификаты, в правой части окна. Перетащите файлы .CA и .CRT в эту директорию из левой части окна.
Внимание: можно перенести файл закрытого ключа (.key) для удобства в ту же директорию, куда вы скопировали файлы сертификатов. Если вы не делаете этого, просто запомните путь до этого файла и потом укажите его в файле конфигурации Apache вместо пути, рассмотренном в нашем примере.
Если закрытый ключ .key сгенерирован прямо на сервере, то для его копирования в другую директорию подойдет команда:
cp /home/root/private.key /etc/ssl/private.key
cp - команда копирования
/home/root/ - путь до файла ключа
private.key - имя файла ключа
/etc/ssl/private.key - путь, по которому необходимо скопировать файл ключа
Вы можете удалить файл ключа из старого расположения такой командой:
Как настроить веб-сервер Nginx на применение SSL сертификата
После копирования файлов сертификата сайта и Центра Сертификации вы должны отредактировать параметры вашего веб-сервера Nginx. Подключитесь к вашему серверу по SSH от имени пользователя root и выполните такие действия:
1. Объедините файлы сертификата Центра Сертификации (.CA) и сертификата вашего веб-сайта (.CRT) в один документ:
2. Откройте файл конфигурации сайта, для которого устанавливается SSL сертификат. Если, к примеру, параметры веб-сайта хранятся в файле /etc/nginx/sites-enabled/default:
Внимание: На Ubuntu/Debian файлы параметров сайтов Nginx обычно располагаются в директории /etc/nginx/sites-enabled/ . На CentOS стандартное расположение - /etc/nginx/conf.d/
Для поиска интересующей конфигурации подойдет команда ls /директория/конфигураций (напр. ls /etc/nginx/sites-enabled), отображающая полный список файлов в нужной директории.
Внимание для CentOS: если на сервере не установлен редактор nano, используйте такую команду для его установки:
используйте такую команду для его установки:
yum install nano
Затем добавьте приведенные ниже параметры в открытый файл конфигурации:
listen 443 ssl;
ssl_certificate /etc/ssl/mydomain.crt;
ssl_certificate_key /etc/ssl/private.key;
/etc/ssl/mydomain.crt - путь до файла сертификатов вашего сайта и центра сертификации
/etc/ssl/private.key - путь к файлу вашего закрытого ключа
(изменения выделены жирным шрифтом).
Перезапустите сервис nginx:
service nginx restart
Ubuntu 16.04:
ufw allow 443/tcp
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
Установка mitmproxy в ubuntu
Настройка mitmproxy в ubuntu
Перед запуском mitmproxy необходимо настроить браузер, или систему, указав в их настройках порт mitmproxy. Объяснять как это сделать в этой статье считаю лишним, но по браузеру chromium кое что поясню, когда я зашел в настройки прокси в браузере, я увидел это:
и после перезапустить браузер.
Как указать прокси сервер для некоторых других приложений в ubuntu, описано здесь.
Всё, можно приступать к запуску mitmproxy. Запускается он из терминала:
По умолчанию mitmproxy запускается на 8080 порту. Для запуска на другом порту нужно указать параметр -p:
Я расскажу, как добавить сертификат mitmproxy в браузер chromium. Открываем настройки, дополнительные настройки, настроить сертификаты:
Папка .mitmproxy по умолчанию не видна, если вы не можете ее найти в домашнем каталоге, нажмите комбинацию клавиш ctrl h для отображения всех скрытых файлов и папок.
Читайте также: