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

Обновлено: 04.07.2024

Мы будем использовать скрипт OpenSSL и htrace.sh.

Кроме того, он также может быть использован для сканирования домена с помощью внешних средств безопасности, в основном Mozilla Observatory и SSL Labs API.

1) Использование скрипта htrace

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

Он включает в себя:

Требования

Прежде чем продолжить, убедитесь, что в вашей системе установлено следующее:

  1. Curl 7.49 или более поздний
  2. OpenSSL
  3. 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 кое что поясню, когда я зашел в настройки прокси в браузере, я увидел это:

Ошибка при настройке прокси для chromium в ubuntu

и после перезапустить браузер.

В моем случае mitmproxy установлен на локальный компьютер, то есть в поле «адрес» нужно будет прописать адрес локального хоста 127.0.0.1.

Как указать прокси сервер для некоторых других приложений в ubuntu, описано здесь.

Всё, можно приступать к запуску mitmproxy. Запускается он из терминала:

По умолчанию mitmproxy запускается на 8080 порту. Для запуска на другом порту нужно указать параметр -p:

mitmproxy -p 3000

Пример работы mitmproxy

Mitmproxy - подробные сведение об http потоке

Mitmproxy - сведения об http ответе от сервера

Я расскажу, как добавить сертификат mitmproxy в браузер chromium. Открываем настройки, дополнительные настройки, настроить сертификаты:

Добавление сертификата mitmproxy в браузер chromium - шаг 1

Далее открываем вкладку «Центры сертификации»:

Добавление сертификата mitmproxy в браузер chromim - шаг 2

Внизу в этой же вкладке нажимаем кнопку «импорт»:

Добавление сертификата mitmproxy в браузер chromim - шаг 2.2

Во вновь открывшемся окне выбираем домашний каталог, в нем открываем папку .mitmproxy и выбираем файл «mitmproxy-ca.pem»:

Добавление сертификата mitmproxy в браузер chromim - шаг 3

Папка .mitmproxy по умолчанию не видна, если вы не можете ее найти в домашнем каталоге, нажмите комбинацию клавиш ctrl h для отображения всех скрытых файлов и папок.

После выбора сертификата должно появиться окно, поставьте галочку напротив фразы «доверять этому сертификату при идентификации сайтов» и нажмите «ОК»:

Добавление сертификата mitmproxy в браузер chromim - шаг 4

Но всё больше в последнее время давление на владельцев веб-ресурсов:

Зачем нужен сертификат сайту

Подробнее остановимся на последнем. Всё ещё можно купить сертификат, в котором будет указано, что домен подписан сертификатом, который принадлежит компании «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 кое что поясню, когда я зашел в настройки прокси в браузере, я увидел это:

Ошибка при настройке прокси для chromium в ubuntu

и после перезапустить браузер.

Как указать прокси сервер для некоторых других приложений в ubuntu, описано здесь.

Всё, можно приступать к запуску mitmproxy. Запускается он из терминала:

По умолчанию mitmproxy запускается на 8080 порту. Для запуска на другом порту нужно указать параметр -p:

Пример работы mitmproxy

Mitmproxy - подробные сведение об http потоке

Mitmproxy - сведения об http ответе от сервера

Я расскажу, как добавить сертификат mitmproxy в браузер chromium. Открываем настройки, дополнительные настройки, настроить сертификаты:

Добавление сертификата mitmproxy в браузер chromium - шаг 1

Добавление сертификата mitmproxy в браузер chromim - шаг 2

Добавление сертификата mitmproxy в браузер chromim - шаг 2.2

Добавление сертификата mitmproxy в браузер chromim - шаг 3

Папка .mitmproxy по умолчанию не видна, если вы не можете ее найти в домашнем каталоге, нажмите комбинацию клавиш ctrl h для отображения всех скрытых файлов и папок.

Добавление сертификата mitmproxy в браузер chromim - шаг 4

Читайте также: