Как из сертификата сайта сделать клиентский сертификат?

16 ответов на вопрос “Как из сертификата сайта сделать клиентский сертификат?”

  1. Huzius Ответить


    Все крупные сайты давно перешли на протокол https. Тенденция продолжается, и многие наши клиенты хотят, чтобы их сайт работал по защищенному протоколу. А если разрабатывается backend для мобильного приложения, то https обязателен. Например, Apple требует, чтобы обмен данными сервера с приложением велся по безопасному протоколу. Это требование введено с конца 2016 года.
    На production нет проблем с сертификатами. Обычно хостинг провайдер предоставляет удобный интерфейс для подключения сертификата. Выпуск сертификата тоже дело не сложное. Но во время работы над проектом каждый разработчик должен позаботиться о сертификате сам.
    В этой статье я расскажу, как выпустить самоподписанный SSL сертификат и заставить браузер доверять ему.
    Чтобы выпустить сертификат для вашего локального домена, понадобится корневой сертификат. На его основе будут выпускаться все остальные сертификаты. Да, для каждого нового top level домена нужно выпускать свой сертификат. Получить корневой сертификат достаточно просто.
    Сначала сформируем закрытый ключ:
    openssl genrsa -out rootCA.key 2048
    Затем сам сертификат:
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
    Нужно будет ввести страну, город, компанию и т.д. В результате получаем два файла: rootCA.key и rootCA.pem
    Переходим к главному, выпуск самоподписанного сертификата. Так же как и в случае с корневым, это две команды. Но параметров у команд будет значительно больше. И нам понадобится вспомогательный конфигурационный файл. Поэтому оформим все это в виде bash скрипта create_certificate_for_domain.sh
    Первый параметр обязателен, выведем небольшую инструкцию для пользователя.
    if [ -z “$1” ]
    then
    echo “Please supply a subdomain to create a certificate for”;
    echo “e.g. mysite.localhost”
    exit;
    fi
    Создадим новый приватный ключ, если он не существует или будем использовать существующий:
    if [ -f device.key ]; then
    KEY_OPT=”-key”
    else
    KEY_OPT=”-keyout”
    fi
    Запросим у пользователя название домена. Добавим возможность задания “общего имени” (оно используется при формировании сертификата):
    DOMAIN=$1
    COMMON_NAME=${2:-$1}
    Чтобы не отвечать на вопросы в интерактивном режиме, сформируем строку с ответами. И зададим время действия сертификата:
    SUBJECT=”/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME”
    NUM_OF_DAYS=999
    В переменной SUBJECT перечислены все те же вопросы, который задавались при создании корневого сертификата (страна, город, компания и т.д). Все значение, кроме CN можно поменять на свое усмотрение.
    Сформируем csr файл (Certificate Signing Request) на основе ключа. Подробнее о файле запроса сертификата можно почитать в этой статье.
    openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj “$SUBJECT” -out device.csr
    Формируем файл сертификата. Для этого нам понадобится вспомогательный файл с настройками. В этот файл мы запишем домены, для которых будет валиден сертификат и некоторые другие настройки. Назовем его v3.ext. Обращаю ваше внимание, что это отдельный файл, а не часть bash скрипта.
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = %%DOMAIN%%
    DNS.2 = *.%%DOMAIN%%
    Да, верно, наш сертификат будет валидным для основного домена, а также для всех поддоменов. Сохраняем указанные выше строки в файл v3.ext
    Возвращаемся в наш bash скрипт. На основе вспомогательного файла v3.ext создаем временный файл с указанием нашего домена:
    cat v3.ext | sed s/%%DOMAIN%%/$COMMON_NAME/g > /tmp/__v3.ext
    Выпускаем сертификат:
    openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext
    Переименовываем сертификат и удаляем временный файл:
    mv device.csr $DOMAIN.csr
    cp device.crt $DOMAIN.crt
    # remove temp file
    rm -f device.crt;
    Скрипт готов. Запускаем его:
    ./create_certificate_for_domain.sh mysite.localhost
    Получаем два файла: mysite.localhost.crt и device.key
    Теперь нужно указать web серверу пути к этим файлам. На примере nginx это будет выглядеть так:

    Запускаем браузер, открываем https://mysite.localhost и видим:

    Браузер не доверяет этому сертификату. Как быть?
    Нужно отметить выпущенный нами сертификат как Trusted. На Linux (Ubuntu и, наверное, остальных Debian-based дистрибутивах) это можно сделать через сам браузер. В Mac OS X это можно сделать через приложение Keychain Access. Запускаем приложение и перетаскиваем в окно файл mysite.localhost.crt. Затем открываем добавленный файл и выбираем Always Trust:

    Обновляем страницу в браузере и:

    Успех! Браузер доверяет нашему сертификату.
    Сертификатом можно поделиться с другими разработчиками, чтобы они добавили его к себе. А если вы используете Docker, то сертификат можно сохранить там. Именно так это реализовано на всех наших проектах.
    Делитесь в комментариях, используете ли вы https для локальной разработки?
    Максим Ковтун,
    Руководитель отдела разработки

  2. white_rabbit Ответить

    Привет, хабр!
    О StartSSL я узнал от небезызвестного lissyara, в связи с чем ему очень благодарен.
    Для начала расскажу, что же за зверь это. Как известно, SSL сертификаты выдаются центрами сертификации, чьи корневые сертификаты хранятся в хранилище сертификатов браузера\ОС (либо другого ПО, использующего SSL). Цена на большинство сертификатов зашкаливает, и платить приходится за каждый сертификат. Но у StartSSL весьма интересный подход — сами сертификаты у них бесплатные, вы платите только за проверку вашей личности.
    Так же не может не радовать наличие русскоязычной поддержки.
    Сертификат можно получить проверив только email адрес и владение доменом, но в таком случае вы не можете создать wildcard сертификат, использовать сертификат для финансовых операций и электронной коммерции. Сертификат выдается сроком на год. Снятие этих ограничений будет стоить вам 59.90$ и подразумевает вашу идентификацию (так же вы сможете выпускать сертификаты сроком на 2 года). Итого за 59.90$ вы можете создать ? количество WildCard сертификатов сроком на 3 года (350 дней, в течении которых вы можете перевыпускать сертификат + 2 года, на которые можно выдать сертификат).

    Регистрация

    Выбрав на сайте русский язык вы получаете прекрасный англо-русский интерфейс. Регистрация находится здесь.

    Жмем Sing-up и переходим к регистрации, где заполняем небольшую форму. Все поля обязательны к заполнению, нужно вводить настоящие данные, могут проверить вашу личность и отозвать сертификат, заблокировать аккаунт. Адрес нужно указывать домашний, а не рабочий. Так же желательно чтобы при регистрации использовалась латиница — это поможет весьма сократить то время за которое подтвердят регистрацию аккаунта.

    Нам предлагают ввести проверочный код, который был выслан на email. Вводим. Далее нам предлагают выбрать размер ключа для вашего сертификата (для авторизации на сайте) 2048 или 4096.

    Сертификат сгенерирован, и мы должны подтвердить его установку в браузер.


    На этом регистрация завершена. Рекомендую сохранить сертификат на физическом носителе (например, записать на болванку).

    Верификация домена

    Перед получением сертификата нам нужно подтвердить право владения доменом. Для этого переходим в раздел Validations Wizard и выбираем пункт Domain Name Validation

    Вводим домен

    Выбираем email, на который будет отослано письмо для подтверждения (postmaster, hostmaster, webmaster либо email из whois)

    Получаем письмо и вводим код из него в поле. Все — домен подтвержден, можно приступать к генерации сертификата. В течении 30 дней мы можем генерировать сертификат. Далее нужно будет повторить процедуру верификации.

    Генерация сертификата

    Идем в раздел Certificates Wizard и там выбираем Web Server SSL/TSL Certificate

    Далее у нас 2 варианта — либо нажать на Skip и ввести запрос на генерацию сертификата, либо генерировать все в мастере. Допустим, запроса сертификата у нас нет, поэтому будем генерировать все в данном мастере.
    Вводим пароль для ключа (мин. 10 символов — макс. 32) и размер ключа (2048\4096).

    Получаем и сохраняем ключ.

    Выбираем домен, для которого будем генерировать сертификат (домен должен быть уже подтвержден).

    Нам дают право на включение в сертификат один поддомен — пусть будет стандартный www

    Получили немного информации о сертификате, жмем на Continue.

    Теперь ждем подтверждения сотрудником StartSSL сертификата. Обещают в течении 3-х часов, однако на практике все происходит намного быстрее, мне пришлось ждать 10 минут. Ранее заказывал ночью — примерно за такое же время подтверждали запрос.

    Получение сертификата

    Нам осталось только получить сертификат и установить его на сервере. Идем в Tool Box -> Retrieve Certificate, выбираем домен и копируем сертификат.

    Про установку не буду писать, информация есть на хабре и на StartSSL.

    Проходим проверку (2-й уровень верификации)

    Для снятия ограничений бесплатного сертификата нужно пройти идентификацию. Для этого в Validations Wizard выбираем Personal Identity Validation, проходим несколько шагов и нам предлагают загрузить документы

    Для загрузки документов нужно только выбрать их в поле. Загрузить нужно не менее 2-х документов, подтверждающих вашу личность (главный разворот паспорта, водительские права, удостоверение личности, карточку социального обеспечения, свидетельство о рождении и т.д., я загружал главный разворот паспорта и студенческого билета). Могут запросить дополнительные документы — у меня запросили счет за телефон, в котором указан мой адрес, номере телефона и имя, в качестве альтернативы можно получить аналоговой почтой письмо для верификации адреса.
    Далее вам нужно будет ввести данные своей кредитной карты\PayPal. Идем в Tool Box ->Add Credit Card | PayPal | Ticket

    Все, на этом подготовка к верификации окончена. Вам должно будет прийти письмо от поддержки с дальнейшими инструкциями. По окончании верификации вы сможете выпускать WildCart сертификаты в течении 350 дней. Далее нужно будет проходить проверку заново.

    Несколько фактов о StartSSL

    25 мая 2011 StartSSL был подвергнут атаке сетевых взломщиков (в простонародии хакеров), однако получить фиктивные сертификаты им не удалось. Закрытый ключ, лежащий в основе всех операций, хранится на отдельном компьютере, не подключенном к интернету.
    StartSSL поставляет помимо SSL сертификатов для Web, сертификаты для шифрования почты (S/MIME), для шифрования серверов XMPP (Jabber), сертификаты для подписи ПО Object code signing certificates).
    StartSSL проверяет верность установки сертификатов. После установки сертификата (через некоторое время) я получил уведомление о отсутствии промежуточного сертификата, и ссылка на информацию по установки.
    После установки промежуточного сертификата пришло соответствующее письмо.
    StartSSL поддерживается множеством ПО: Android, Camino, Firefox, Flock, Chrome, Konqueror, IE, Mozilla Software, Netscape, Opera, Safari, SeaMonkey, Iphone, Windows
    Дружелюбная поддержка на русском языке
    Сравнительная таблица вариантов верификации
    За 59.90$ вы можете создать ? количество WildCard сертификатов сроком на 3 года (350 дней, в течении которых вы можете перевыпускать сертификат + 2 года, на которые можно выдать сертификат).
    Отзыв сертификата платный — 24,90$. 2-й класс верификации позволяет пересоздать сертификат (насколько я понял, всего один раз). Extended Validation сертификаты освобождены от этого сбора.

  3. Malalmeena Ответить

    Let’s Encrypt (letsencrypt.org) – некоммерческая организация, созданная уже как 7 лет назад (в 2012 году), обрела свою популярность из-за исключительно бесплатных сертификатов (на 90 дней).
    Плюсы:
    + сертификат сроком 90 дней,
    + поддержка IDN (с 2016 года),
    + поддержка поддоменов,
    + уведомления об истечении сертификата.
    Минусы:
    − требуется установить клиент на сервер для получения сертификата или пользоваться сторонними сервисами, как sslforfree.com или zerossl.com,
    − из-за этого увеличивается время выдачи – в среднем от 15 минут,
    − на сторонних сервисах всего один способ подтверждения — по HTTP, например, на бесплатных хостингах часто используется система против ботов — тут-то получить сертификат и не получится,
    − не поддерживаются некоторые операционные системы и старые браузеры, не очень большая совместимость,
    − нет гарантии безопасности,
    − нет SiteSeal.

    Cloudflare – хитрый вариант

    Cloudflare (cloudflare.com) – американская компания, предоставляющая услуги защиты от DDoS-атак и имеющая бесплатный тариф, который как раз нас и интересует. Если размещать на нём сайт – SSL-сертификат предоставляется на бесплатной основе.
    Плюсы:
    + поддержка нескольких сайтов сразу и поддоменов,
    + сертификат сроком один год с продлением,
    + поддержка IDN.
    Минусы:
    − поддержка далеко не всех операционных систем,
    − обязателен перенос DNS на их сервера,
    − в сертификате будете не только вы, он будет выдан один на 50 сайтов — недостаток в безопасности,
    − придётся помучиться с настройкой, быстро получить сертификат не получится,
    − нет гарантии безопасности,
    − нет SiteSeal.

    Free SSL Space – новый вариант

    Free SSL Space (freessl.space) – довольно новый проект, партнёрами которого являются один из крупнейших сертифицирующих центров – Sectigo CA (sectigo.com, ранее Comodo CA), выпускающий эти сертификаты, и крупный продавец платных сертификатов GoGetSSL (gogetssl.com).
    Плюсы:
    + защита www и основного сайта,
    + получение сертификата — не более 5 минут,
    + разные способы подтверждения домена (HTTP, CNAME и почта),
    + сертификат на 90 дней с безлимитными продлениями,
    + поддержка IDN,
    + есть SiteSeal,
    + уведомления об истечении сертификата,
    + гарантия 10,000$ от GoGetSSL,
    + поддержка 99,6% устройств (очень высокая совместимость).
    Минусы:
    − нет возможности добавить поддомены, для каждого нужно заказывать свой сертификат.

    Немного о платных сертификатах

    Под конец статьи хочется напомнить, что бесплатный сертификат никогда не заменит платного и рекомендуется для использования только во время тестирования. Если ваш проект уже является серьёзным, советуем купить платный сертификат: и надежнее, и волноваться меньше.
    Хорошим примером соотношения цены и качества будет Sectigo Positive SSL — можете купить по низкой цене в панели Timeweb: один домен, но на год, а не на 90 дней.

    Выводы

    Если выбирать среди бесплатных.
    По времени сертификата побеждает Cloudflare, однако его настройка будет проблематичной, и по поводу безопасности есть сомнения. Let’s Encrypt выигрывает в номинации поддержка поддоменов, но проигрывает в количестве поддерживаемых устройств, как и Cloudflare.
    По быстроте и удобству выдачи несомненная победа у Free SSL Space, безопасность и гарантия тоже на его стороне, именно поэтому мы рекомендуем использовать именно его, лучше сделать для доменов отдельный сертификат, чем жалеть потом об убытках.

  4. Kes_Neiker Ответить

    Во-первых, мы должны знать Закрытый ключ / Открытый ключ:
    Шифрование с использованием пары закрытый ключ / открытый ключ гарантирует, что данные могут быть зашифрованы одним ключом, но могут быть расшифрованы только другой парой ключей. Ключи схожи по своей природе и могут использоваться альтернативно: то, что один ключ шифрует, другая пара ключей может расшифровать. Пара ключей основана на простых числах, а их длина в терминах битов обеспечивает сложность возможности расшифровки сообщения без пар ключей. Хитрость в паре ключей заключается в том, чтобы сохранить один ключ в секрете (закрытый ключ) и распространить другой ключ (открытый ключ) среди всех. Любой может отправить вам зашифрованное сообщение, которое только вы сможете расшифровать. Вы единственный, у кого есть другая пара ключей, верно? Напротив, вы можете подтвердить, что сообщение приходит только от вас, потому что вы зашифровали его с помощью своего закрытого ключа, и только соответствующий открытый ключ расшифровывает его правильно. Осторожно, в этом случае сообщение не защищено, вы только подписали его. У всех есть открытый ключ!
    Message–>[Public Key]–>Encrypted Message–>[Private Key]–>Message
    Одна из оставшихся проблем — узнать открытый ключ вашего корреспондента. Обычно вы просите его отправить вам не конфиденциальное подписанное сообщение, которое будет содержать его открытый ключ, а также сертификат.
    Откуда вы знаете, что имеете дело с правильным человеком или, вернее, с правильным веб-сайтом? Ну, кто-то потратил много времени (если он серьезен), чтобы убедиться, что владельцы веб-сайтов являются теми, кем себя называют. Этот человек, которому вы должны безоговорочно доверять: у вас есть его / ее сертификат, загруженный в ваш браузер (корневой сертификат). Сертификат содержит информацию о владельце сертификата, например адрес электронной почты, имя владельца, использование сертификата, срок действия, местоположение ресурса или отличительное имя (DN), которое включает в себя общее имя (CN) (адрес веб-сайта или электронный адрес). -адрес электронной почты в зависимости от использования) и идентификатор сертификата лица, которое сертифицирует (подписывает) эту информацию. Он также содержит открытый ключ и, наконец, хеш, чтобы гарантировать, что сертификат не был подделан. Поскольку вы сделали выбор в пользу доверенного лица, подписывающего этот сертификат, вы также доверяете этому сертификату. Это дерево доверия сертификата или путь сертификата. Обычно ваш браузер или приложение уже загрузили корневой сертификат хорошо известных центров сертификации (CA) или корневые сертификаты CA. CA поддерживает список всех подписанных сертификатов, а также список отозванных сертификатов. Сертификат небезопасен, пока не подписан, так как только подписанный сертификат не может быть изменен. Вы можете подписать сертификат с помощью самого себя, он называется самоподписанным сертификатом. Все корневые сертификаты CA являются самозаверяющими.
    Клиентские сертификаты:
    Клиентские сертификаты выдаются пользователю центром сертификации. Они состоят из части открытого ключа сертификата и личного ключа, который хранится только у субъекта, которому выдан сертификат. Центром сертификации может быть известная общественная организация, предоставляющая услуги по сертификации в рамках своей деятельности, или внутренний сервер, которым пользуется только ваша компания. В любом случае клиентский сертификат будет иметь определенную информацию, которая идентифицирует пользователя по отдельности или как часть группы. Они предназначены для аутентификации клиента на сервере.
    Например, вы можете создать самозаверяющий сертификат клиента так же, как сертификат сервера:
    openssl req -nodes -new -x509 -keyout clientkey.pem -out clientreq.pem -days 365 -config openssl.cnf
    Ответьте на необходимые вопросы, затем подпишите:
    openssl x509 -x509toreq -in clientreq.pem -signkey clientkey.pem -out tmp.pem
    openssl ca -config openssl.cnf -policy policy_anything -out clientcert.pem -infiles tmp.pem
    Затем вы можете попробовать подключиться к серверу с помощью сертификата клиента:
    openssl s_client -connect host:443 -cert clientcert.pem -key clientkey.pe -state -quiet
    Одна важная деталь в клиентских сертификатах (сертификаты в целом) заключается в том, что их можно экспортировать, и большинство реализаций не блокируют переносимость сертификата. Независимо от того, будут ли храниться сертификаты клиента или как они будут храниться, без надлежащих мер сертификат может быть легко скопирован с устройства на устройство. Некоторые реализации хранят сертификат в файловой системе (файлы, оканчивающиеся на .cer, .der, .key, .crt, обычно указывают на то, что сертификаты хранятся в файловой системе). Более сильные реализации (зависящие от приложения) могут хранить сертификаты и ключи в хранилище ключей (то есть хранилище ключей Java). Хранилище ключей может добавить дополнительную защиту, например, гарантировать, что закрытый ключ не экспортируется. Однако уверенность в том, что ключ не был экспортирован, так же сильна, как и само хранилище ключей. Хранилища аппаратных ключей (например, смарт-карты, usb hsm, ironkey и т. Д.) Дают гораздо более надежную гарантию того, что закрытый ключ не экспортируется, чем хранилища программных ключей.

  5. Ne Sk@Жy Ответить

    Добрый день, вечер или ночь, все зависит от времени суток в который вам довелось прочитать мою статью.
    В связи с ростом количества корпоративных клиентов, было принято решение дать доступ к учетной системе внешним пользователям. Для самостоятельного оформления заказов и отслеживания их состояний. Реализация была создан web интерфейс с необходимым функционалом и доступом. Тут же стал вопрос безопасности, кроме стандартных пользователь-пароль было решено еще усилить безопасность, для этого применили OpenVPN, но появились клиенты, для которых нельзя применять OpenVPN (политики безопасности, нежелания и.д.), тут на глаза попались статьи про доступ по ssl сертификату.

    Исходные данные:
    Сервер с учетной программой + web интерфейс находятся в DMZ;
    WEB-server на nginx, на него проброшены порты http(80) и https(443);
    На web-server настроен proxy_pass на сервер с учетной программой, доступ только по порту 8080 и только с IP web-server, большего доступа с серверу нет(обычная безопасность);
    На сайт для доступа установлен сертификат от Let’s Encrypt.
    Переходим к самому процессу создания сертификата пользователя:
    Для сертификатов будем использовать каталог “/etc/ssl/crm.example.ru”
    Создаём структуру каталогов:
    # mkdir /etc/ssl/crm.example.ru
    # cd /etc/ssl/crm.example.ru
    # mkdir db
    # mkdir db/certs
    # mkdir db/newcerts
    # touch db/index.txt
    # echo “01” > db/serial
    # chmod 700 ./
    Создаем конфигурационный файл для подписи сертификатов.
    /etc/ssl/crm.example.ru/ca.conf”
    [ ca ]
    default_ca = CA_CITENAME # Секция по умолчанию для подписи сертификатов
    [ CA_CITENAME ]
    droot = /etc/ssl/crm.example.ru # Корневой каталог хранилища
    dir = $droot/db # Каталог базы хранилища
    certs = $dir/certs # Каталог сертификатов
    new_certs_dir = $dir/newcerts # Каталог для новых сертификатов (pem)
    database = $dir/index.txt # Файл базы сертификатов
    serial = $dir/serial # Файл серийного номера
    # Файл доверенного сертификата
    certificate = $droot/ca.crt
    # Закрытый ключ доверенного сертификата
    private_key = $droot/ca.key
    default_days = 365 # Срок действия нового сертификата (дни)
    default_crl_days = 7 # Срок действия списка отозванных сертификатов
    default_md = md5 # Использовать алгоритм MD5
    policy = policy_citename # Политика секции
    [ policy_citename ]
    countryName = optional # Необязательный параметр
    stateOrProvinceName = optional # …………………..
    localityName = optional # …………………..
    organizationName = optional # …………………..
    organizationalUnitName = optional # …………………..
    commonName = supplied # обязательный параметр
    emailAddress = supplied # …………………
    [ req_distinguished_name ]
    countryName = Название страны (2-буквенный код)
    countryName_default = RU
    countryName_min = 2
    countryName_max = 2
    stateOrProvinceName = Название области (полное название)
    stateOrProvinceName_default = Tyumen region
    localityName = Название местности (например, город)
    localityName_default = Tyumen
    0.organizationName = Название организации
    0.organizationName_default = EXAMPLE
    organizationalUnitName = Название организационной единицы (например, отдел)
    commonName = Ваше имя
    commonName_max = 64
    emailAddress = Email адрес
    emailAddress_max = 64
    Создаем самоподписанный сертификат и новый ключ сервера без пароля:
    # openssl req -new -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 365 \
    -subj “/C=RU/ST=Tyumen region/L=Tyumen/O=EXAMPLE/OU=CRM/CN=crm.example.ru/emailAddress=crm@example.ru” \
    -out ca.crt
    Либо, если хотите всё вводить вручную.
    # openssl req -new -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 365 -out ca.crt
    Просмотреть данные закрытого ключа и сертификата вы можете с помощью команд:
    # openssl rsa -noout -text -in ca.key (для ключа)
    # openssl x509 -noout -text -in ca.crt (для сертификата)
    Создание клиентского закрытого ключа и запроса на сертификат (CSR):
    # openssl req -new -newkey rsa:2048 -nodes -keyout client01.key \
    -subj “/C=RU/ST=Tyumen region/L=Tyumen/O=EXAMPLE/OU=CRM/CN=User example1/emailAddress=user@example1.ru” \
    -out client01.csr
    Либо, если хотите всё вводить вручную.
    #openssl req -new -newkey rsa:2048 -nodes -keyout client01.key -out client01.csr
    Заместо User example1 можно указать почту клиента, а за место EXAMPLE компанию клиента, это поможет отслеживать сертификаты.
    В результате выполнения команды появятся два файла client01.key и client01.csr. Просмотреть данные закрытого ключа и запроса на сертификат (CSR) вы можете с помощью команд:
    # openssl rsa -noout -text -in client01.key (для ключа)
    # openssl req -noout -text -in client01.csr (для запроса)
    Подпись запроса на сертификат (CSR) с помощью доверенного сертификата (CA). При подписи запроса используются параметры заданные в файле ca.config
    # openssl ca -config ca.config -in client01.csr -out client01.crt -batch
    Подготовка данных для передачи клиенту. Для передачи полученных в результате предыдущих операций файлов клиенту, обычно используется файл в формате PKCS#12. В этот файл упаковывается и защищается паролем вся информация необходимая клиенту для инсталляции сертификата в броузер.
    # openssl pkcs12 -export -in client01.crt -inkey client01.key \
    -certfile ca.crt -out client01.p12 -passout pass:123ewqasdcxz
    Выставляем права доступа на ключи.
    # chmod 600 /etc/ssl/crm.example.ru/client*.crt
    # chmod 600 /etc/ssl/crm.example.ru/client*.key
    Переместим все созданные файлы в каталог db/certs на хранение.
    # mv ./client01.* db/certs/
    В nginx надо установить:
    ssl_client_certificate /etc/ssl/crm.example.ru/ca.crt;
    ssl_verify_client on;
    ssl_verify_depth 1;
    Для того чтобы клиент смог подключиться по сертификату ему необходимо отправить файл client01.p12 и ca.crt, а так же сообщить пароль для установки сертификата. ca.crt необходим, так как мы не используем его для сертификации сервера, для этомо используеться Let’s Encrypt.
    Процесс выдачи сертификатов можно автоматизировать, написать просто скрипт не составит труда. У нас таких клиентов не много, около 15, так что вбить всё руками не составило проблем.
    Мой рабочий пример:
    Окно выбора сертификата:

    Сам сертификат:

    Работоспособность Let’s Encrypt:

    В подготовке материала помогли статьи:
    > «Авторизация клиентов в nginx посредством SSL сертификатов»
    > «Авторизация по SSL сертификатам»
    > «Авторизация с помощью клиентских SSL сертификатов. (ssl crypt mod_ssl apache)»
    > «Великий и могучий Google»
    P.S. Проверка проводилась на Google Chrome.

  6. 1-WoTeR Ответить

    Я уже описывал что такое SSL в одном из материалов на iklife. Если говорить кратко, то ССЛ позволит вам использовать защищенный протокол шифрования данных на вашем сайте. Данные, передаваемые от сайта к клиенту (посетителю) будут надежно зашифрованы. Никакие злодеи не смогут получить к ним доступ, как бы они не пытались.
    Реализация такого подхода возможна благодаря математически связанным ключам шифрования. От сервера (веб-ресурса) к клиенту (компьютеру посетителя) информация передается с помощью трех ключей шифрования. Два из них – закрытые. Они есть и у сервера, и у клиента. Третий ключ – открытый, он используется обеими машинами.
    Все три ключа связаны между собой, даже если злоумышленник узнает открытый ключ, он никогда не сможет расшифровать информацию из-за отсутствия двух других ключей. Также во время обмена данными между клиентом и сервером создается ключ сессии, который является гарантом безопасности ваших данных.

    Безопасность и конфиденциальность – две вещи, к которым стремится интернет-сообщество. Именно по этой причине к сайтам, не использующим защищенное соединение, доверие неуклонно падает.
    Даже браузеры, такие как Google Chrome, Opera или Mozilla Firefox, стали помечать сайты без https как нежелательные. Пока что просто обходятся предупреждением, однако в будущем на такие сайты, возможно, будут вешаться заглушки от браузера, где пользователь должен подтвердить, что он осознает весь риск и берет на себя ответственность в случае потери данных.
    Наличие или отсутствие защищенного соединения может учитываться и поисковыми системами. Если Яндекс пока что говорит о том, что сайты с http и https индексируются равнозначно, то в Гугле уже прослеживаются некоторые изменения. В скором времени сайты могут помечаться как небезопасные и начать очень сильно проседать по позициям.
    По этим причинам можно сделать вывод, что установка зашифрованного соединения не просто желательна, а необходима. Все без исключения пользователи хотят, чтобы их данные были в целости и сохранности. Так зачем же лишать их этих благ, тем более, что сделать все это можно абсолютно бесплатно, с помощью того же Let`s Encrypt.

    Где взять SSL-сертификат?

    Обычно этими сертификатами приторговывают сами хостинги. Если вы используете один из них, то вам не придется ломать голову над тем, какой выбрать. Достаточно взглянуть на список предложенных и выбрать самый дешевый или наоборот подороже.
    Сейчас популярен вариант от Let`s Encrypt. Они распространяются бесплатно, и многие хостеры поддерживают возможность быстрой установки и подключения.
    Кроме этого, в интернете можно найти очень много компаний, которые как раз занимаются тем, что проверяют домены и выдают соответствующие полномочия для установки зашифрованного протокола.
    Есть даже огромные сервисы, которые проводят персональную проверку, после чего выдают именной сертификат. От обычного он отличается тем, что прямо в адресной строке, возле зеленого замочка, будет видно название вашей компании. Подобный подход покажет вашим клиентам, что они имеют дело с серьезной организацией. Само собой, именная проверка стоит в несколько раз (а то и десятков) дороже.
    Приведу вам список самых популярных сервисов, где вы сможете купить SSL:
    Comodo
    Thawte
    Symantec
    Geotrust
    Trustwave
    Вы можете поискать и другие компании самостоятельно. Достаточно просто ввести в поиск нужный запрос, вся необходимая информация будет как на ладони.

    Установка SSL на хостинг

    В этой части обзора мы будем рассматривать установку SSL на хостинге Beget и REG.RU. Если у вас другой хостинг-провайдер, не отчаивайтесь. Скорее всего инструкции из этого материала будут применимы и на вашем хост-сервере. Большая часть панелей управления, которые используют хостинги, схожи между собой.

    SSL на хостинге REG.RU

    Чтобы установить ССЛ через форму на сайте, вам нужно перейти на сам сайт и залогиниться. Далее ваш путь лежит на страницу подключения SSL. После регистрации/авторизации вы увидите такое окно.

    Если вы покупали SSL прямо в REG.RU, то вам необходимо выбрать нужный сертификат в выпадающем списке. После того, как отметили нужный, вы должны загрузить файл с приватным ключом. Он обычно выдается той компанией, которая сертифицировала вас. При настройке защищенного протокола вам предложат как раз сохранить такой ключ.
    В случае с Let`s Encrypt или продажи другим сервисом, приватный ключ высылается на указанный e-mail. При утере ключа придется заниматься переизданием, что обещает большое количество проблем.

    При получении SSL-сертификата от сторонних компаний, вам нужно выбрать вторую вкладку. Там будет 4 поля, куда вы должны загрузить все файлы, которые вам выдал центр сертификации.

    Теперь остается лишь выбрать хостинг, на который должен быть установлен сертификат. Выберите в списке нужный и нажмите на кнопку для отправления заявки.

    Обратите внимание, что нужный домен должен быть добавлен в панель управления вашего хостинга. Сразу после отправления заявки, в случае, если вы используете виртуальный хостинг – ССЛ будет установлен автоматически. Если же речь идет о выделенном сервере, то придется подождать, пока специалисты из REG.RU настроят и установят все в ручном режиме.

    SSL на хостинге Beget

    Для установки защищенного протокола на хостинге Beget перейдите в раздел “Домены и поддомены”, после чего нажмите на кнопку “Управление SSL-сертификатами”. Она будет напротив нужного домена.

    Во всплывающем окошке вы можете выбрать параметры установки для домена.

    Здесь для установки доступен Let`s Encrypt. Данный центр сертификации предоставляет свои услуги абсолютно бесплатно. Вы можете воспользоваться им или любым другим. Для доступа к настройке сертификата нужно использовать две соседние вкладки.
    После заказа к вам на почту придут подробности. Скорее всего, от вас не потребуется больше никаких действий. На почту придет уведомление о завершении установки на хостинг, и вы сможете начать пользоваться SSL.
    Проблемы могут возникнуть в том случае, если домен размещен на сторонних (не бегетовских) NS-серверах. Тогда вам вручную придется создавать A-запись в DNS вашего домена.

    Установка SSL в ISPmanager

    Чтобы установить ССЛ в ISPmanager 4, вам нужно перейти в панель управления и в соответствующий раздел. Он имеет название SSL-сертификаты.
    В правом углу найдите кнопку “Создать”, после чего перед вашими глазами появится такое окно.

    Нужно ввести все необходимые данные вручную. Поле “Имя сертификата” задается произвольно. Все остальное нужно предоставить по требованию. Выбираем “существующий” тип, и далее “указать вручную” в поле “Использовать ключ”.
    Приватный ключ и сертификат выдаются сервисом, который проводит сертификацию. В поле “Цепочка сертификатов” нужно ввести два вида: промежуточный, а сразу за ним корневой. Обратите внимание, что на скриншоте отмечено, как именно должны быть расположены эти два ключа относительно друг друга.

    Если при установке возникают ошибки, проверьте еще раз все введенные данные на наличие лишних пробелов и символов.
    Как только SSL будет установлен, мы должны перейти в раздел “WWW домен” и поставить там вот такую галочку.

    В обведенном красным поле необходимо выбрать нужное название, которое мы произвольно указывали при настройке SSL.
    В ISPmanager 5 этот процесс мало чем отличается, тем не менее, я считаю необходимым описать и его.
    Перейдите в одноименный раздел, который находится в “WWW”. Я думаю, вы сразу заметите его.

    Далее вам нужно кликнуть по кнопке “Создать” и перейти непосредственно к настройке.

    Сервис предложит вам выбрать тип сертификата – выбираем “Существующий”.

    Нам необходимо будет заполнить все поля (имя, ключи и сам сертификат). Их выдает компания, у которой был куплен сертификат.

    На завершающем этапе нам необходимо перейти в раздел WWW-домены и найти нужный из списка. Кликаем по домену два раза, после чего переходим к параметрам.

    Отмечаем галочками “Защищенное соединение” и “Повышенная безопасность”, выбираем нужный SSL-сертификат в выпадающем списке.

    Готово! Теперь ваш сайт будет использовать защищенное соединение.

    Установка SSL на Cpanel

    Для подключения SSL на хостинге Cpanel нужно перейти в соответствующий раздел на вашей панели управления. Он находится во вкладке “Безопасность”.

    Теперь нужно кликнуть по кнопке “Управление сайтами с SSL”.

    Выбираем нужный домен.

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

    Вводим данные сертификата (после BEGIN CERTIFICATE). Заканчивается на END CERTIFICATE. Далее вставляем закрытый ключ и цепочку сертификатов.

    Закрытый ключ начинается со слов “BEGIN RSA PRIVATE KEY”.

    Здесь вставляется сначала промежуточный, а затем корневой сертификат. Конец первого и начало второго должны располагаться так, как показано на скриншоте.
    Теперь нам остается завершить установку. Для этого мы нажимаем соответствующую кнопку.

    Редирект с http на https

    После установки вам захочется, чтобы все пользователи работали по защищенному соединению. Да и поисковые системы должны произвести склейку, иначе будет какая-то неразбериха: один и тот же сайт с http и https будет считаться как два разных. Нам нужно, чтобы это не произошло. Поэтому мы должны настроить редиректы.
    Обычно это делается с помощью инструментов CMS или файла htaccess. В WordPress, например, можно настроить автоматические редиректы с незащищенного протокола на защищенный. Но здесь же отмечу, что далеко не все системы управления контентом могут поддерживать такую функцию. По этой причине редирект можно реализовать с помощью файла htaccess, который есть почти на любом сайте.
    Просто добавляем в начало файла этот кусок кода и вуаля – ваш сайт имеет 301-й редирект с http на https.
    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !=https
    RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
    Теперь мы можем проверить наличие переадресации, просто зайдя на сайт без прописывания протокола (или с http протоколом). Если мы все сделали правильно, то нас перекинет на https://сайт.ру.
    Обращаю ваше внимание, что после установки https-соединения как основного, ваш ресурс может потерпеть некоторые временные проблемы с индексацией. Происходить это будет на протяжении нескольких месяцев. Чтобы минимизировать ущерб и ускорить склейку двух версий сайта, вы должны выполнить ряд инструкций.
    Например, добавить в файл robots.txt строчку Host с указанием главного зеркала вашего веб-ресурса. Там же нужно прописать и https-протокол, чтобы поисковые системы считали этот вариант приоритетным.
    Уведомить поисковики об изменении протокола можно и с помощью специальных инструментов. В Яндекс.Вебмастере есть соответствующий раздел под названием “Переезд сайта”. Укажите в нем, что ваш проект “переехал” на использование защищенного соединения. В кратчайшие сроки Яндекс постарается учесть эту информацию и обновить поисковую базу в соответствии с новыми данными.

    Заключение

    В этой статье я подробно рассказал о том, как установить SSL на свой сайт. Благодаря встроенным инструментам в виртуальных хостингах, вы можете легко и без особых проблем реализовать https-соединение для своего проекта. В том же Бегете или REG.RU сделать все достаточно просто. А если учесть тот факт, что сейчас существует возможность установки бесплатной версии, это необходимо сделать как можно скорее.
    Кстати говоря, не забудьте сделать проверку SSL-сертификата на сайте. Если все сделано правильно, то вас всегда будет редиректить на https-соединение.
    Хотите создать свой собственный блог и зарабатывать на нем? Тогда я приглашаю вас на курс Василия Блинова “Как создать блог”. В нем вы получите все необходимые знания для создания своего сайта на WordPress и примените их в области поискового продвижения и оптимизации своего проекта.
    Расскажите, получилось ли установить SSL-сертификат для вашего веб-ресурса?

  7. VideoAnswer Ответить

Добавить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *