Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

SSL Сертификаты. Установка купленного и самозаверенного SSL сертификата на для Nginx и Apache. Настройка HTTPS

Лекция



Привет, Вы узнаете о том , что такое ssl сертификат, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое ssl сертификат, установка ssl сертификата, настройка https , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .

ssl сертификат ы

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

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

Что такое SSL и что такое TLS?

TLS (англ. Transport Layer Security — безопасность транспортного уровня), как и его предшественник SSL (англ. Secure Sockets Layer — уровень защищенных сокетов) — криптографические протоколы, обеспечивающие защищенную передачу данных между узлами в сети Интернет . TLS и SSL используют асимметричную криптографию для аутентификации, симметричное шифрование для конфиденциальности и коды аутентичности сообщений для сохранения целостности сообщений.

Данный протокол широко используется в приложениях, работающих с сетью Интернет, таких как веб-браузеры, работа с электронной почтой, обмен мгновенными сообщениями и IP-телефония (VoIP).

TLS-протокол основан на спецификации протокола SSL версии 3.0, разработанной компанией Netscape Communications . Сейчас развитием стандарта TLS занимается IETF. Последнее обновление протокола было в RFC 5246 (Август 2008) и RFC 6176 (Март 2011).

SSL является более ранней системой, TLS появился позднее и он основан на спецификации SSL 3.0, разработанной компанией Netscape Communications. Тем не менее, задача у этих протоколов одна — обеспечение защищенной передачи данных между двумя компьютерами в сети Интернет. Такую передачу используют для различных сайтов, для электронной почты, для обмена сообщениями и много еще для чего. В принципе, можно передавать любую информацию таким образом, об этом чуть ниже.

Безопасная передача обеспечивается при помощи аутентификации и шифрования передаваемой информации. По сути эти протоколы, TLS и SSL, работают одинаково, принципиальных различий нет. TLS, можно сказать, является преемником SSL, хотя они и могут использоваться одновременно, причем даже на одном и том же сервере. Такая поддержка необходима для того, чтобы обеспечить работу как с новыми клиентами (устройствами и браузерами), так и с устаревшими, которые TLS не поддерживают. Последовательность возникновения этих протоколов выглядит вот так:

SSL 1.0 — никогда не публиковался
SSL 2.0 — февраль 1995 года
SSL 3.0 — 1996 год
TLS 1.0 — январь 1999 года
TLS 1.1 — апрель 2006 года
TLS 1.2 — август 2008 года

Принцип работы SSL и TLS

Принцип работы SSL и TLS, один и тот же. Поверх протокола TCP/IP устанавливается зашифрованный канал, внутри которого передаются данные по прикладному протоколу — HTTP, FTP, и так далее. Вот как это можно представить графически:

SSL Сертификаты. Установка купленного и самозаверенного SSL сертификата на для Nginx и  Apache. Настройка HTTPS

Прикладной протокол «заворачивается» в TLS/SSL, а тот в свою очередь в TCP/IP. По сути данные по прикладному протоколу передаются по TCP/IP, но они зашифрованы. И расшифровать передаваемые данные может только та машина, которая установила соединения. Для всех остальных, кто получит передаваемые пакеты, эта информация будет бессмысленной, если они не смогут ее расшифровать.

SSL Сертификаты. Установка купленного и самозаверенного SSL сертификата на для Nginx и  Apache. Настройка HTTPS

Установка соединения обеспечивается в несколько этапов:

1) Клиент устанавливает соединение с сервером и запрашивает защищенное подключение. Это может обеспечиваться либо установлением соединения на порт, который изначально предназначен для работы с SSL/TLS, например, 443, либо дополнительным запросом клиентом установки защищенного соединения после установки обычного.

2) При установке соединения клиент предоставляет список алгоритмов шифрования, которые он «знает». Сервер сверяет полученный список со списком алгоритмов, которые «знает» сам сервер, и выбирает наиболее надежный алгоритм, после чего сообщает клиенту, какой алгоритм использовать

3) Сервер отправляет клиенту свой цифровой сертификат, подписанный удостоверяющим центром, и открытый ключ сервера.

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

5) Генерируется сеансовый ключ для защищенного соединения. Это делается следующим образом:
— Клиент генерирует случайную цифровую последовательность
— Клиент шифрует ее открытым ключом сервера и посылает результат на сервер
— Сервер расшифровывает полученную последовательность при помощи закрытого ключа
Учитывая, что алгоритм шифрования является асимметричным, расшифровать последовательность может только сервер. При использовании асимметричного шифрования используется два ключа — приватный и публичный. Публичным отправляемое сообщение шифруется, а приватным расшифровывается. Расшифровать сообщение, имея публичный, ключ нельзя.

6) Таким образом устанавливается зашифрованное соединение. Данные, передаваемые по нему, шифруются и расшифровываются до тех пор, пока соединение не будет разорвано.

Алгоритмы, использующиеся в TLS

В текущей версии протокола доступны следующие алгоритмы:

  • Для обмена ключами и проверки их подлинности применяются комбинации алгоритмов: RSA (асимметричный шифр), Diffie-Hellman (безопасный обмен ключами), DSA (алгоритм цифровой подписи), ECDSA;
  • Для симметричного шифрования: RC4, IDEA, Triple DES, SEED, Camellia или AES;
  • Для хеш-функций: MD5, SHA, SHA-256/384.

Алгоритмы могут дополняться в зависимости от версии протокола. До последней версии протокола TLS 1.2 были доступны также следующие алгоритмы симметричного шифрования, но они были убраны как небезопасные: RC2, IDEA, DES.

Корневой сертификат

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

Запрос на подпись (CSR, Certificate Sign Request)

Для получения подписанного серверного сертификата необходимо сгенерировать запрос на подпись (CSR, Certificate Sign Request) и отправить этот запрос авторизационному центру, который вернет подписанный сертификат, устанавливаемый непосредственно на сервер, чуть ниже посмотрим, как это сделать на практике. Сначала генерируется ключ для шифрования, затем на основании этого ключа генерируется запрос на подпись, CSR-файл.

Клиентский сертификат (PUBLIC KEY)

Клиентский сертификат может быть сгенерирован как для использования в устройствах, так и для использования пользователями. Обычно такие сертификаты используются при двусторонней верификации, когда клиент верифицирует, что сервер действительно тот, за кого себя выдает, и сервер в ответ делает то же самое. Такое взаимодействие называется двусторонней аутентификацией или mutual authentication. Двусторонняя аутентификация позволяет повысить уровень безопасности по сравнению с односторонней, а также может служить заменой аутентификации с использованием логина и пароля.

Приватный ключ (PRIVATE KEY)

генерируеся клиентом вместе с запросом на получение открытого ключа. Приватный ключ ОБЯЗАТЕЛЬНО необходимо хранить в надежном месте, имея его можно подписать от вашего имени любой сертификат. Данный сертификат никому не раскрывается.

Типы SSL-сертификатов:

  • DV — Domain Validation — подтверждает домен;

  • OV — Organization Validation — подтверждает организацию и домен;
  • EV — Extended Validation — подтверждает организацию и домен после углубленной проверки.

У этих сертификатов есть дополнительные опции:

  • WildCard — подтверждает домен и все его поддомены следующего уровня;
  • SAN — подтверждает домены по списку, указанному при получении SSL-сертификата.

Виды цифровых сертификатов (открытый ключ)

С проверкой домена

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

Для такого сертификата есть как платный вариант его получения, так и бесплатный.

Среди платных сервисов является наиболее известный comodo

Среди бесплатных сервисов -

Let's Encrypt - это некоммерческий центр сертификации (certificate authority, CA), который выпускает SSL-сертификаты бесплатно и создан для того, чтобы большая часть сайтов смогла перейти к работе по шифрованному протоколу (HTTPS).

Сертификаты Let’s Encrypt распознаются как подтвержденные во всех основных браузерах.

Бесплатные SSL-сертификаты — на 3 года от WoSign https://buy.wosign.com/free/

StartSSL https://www.startssl.com/

и другие


Для сертификата не требуется предоставление каких-либо документов. Оформление происходит в течение одного-двух рабочих дней.

С проверкой компании

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

Выпуск сертификата обычно осуществляется в течение 4-7 дней. Сертификат может быть выпущен только на юридическое лицо.

С поддержкой субдоменов (Wildcard)

Wildcard SSL сертификаты предназначены для защиты неограниченного количества субдоменов одним сертификатом. Сертификат выдается на доменное имя *.domain.com и при этом защищает доменные имена вида www.domain.com, mail.domain.com, something.domain.com и т.д.

Существуют Wildcard SSL сертификаты с проверкой домена и проверкой организации. Сертификат с проверкой домена может также получить физическое лицо.

Расширенной проверки (EV)

Сертификаты расширенной проверки имеют самый высокий кредит доверия у клиентов. Когда пользователь находится на сайте с Extended Validation SSL сертификатом, браузер подсвечивает адресную строку зеленым цветом.

Данные сертификаты особенно рекомендуются для использования банкам и другим финансовым организациям.

Разработчикам (Code Signing)

Сертификаты разработчика (Code Signing) предназначены для подписания программного кода цифровой подписью. Широко используются для подписания ПО, которое распространяется через интернет.

Самоподписанные сертификаты (self-signed),

Самозаверенный сертификат — специальный тип сертификата, подписанный самим его субъектом. Технически данный тип ничем не отличается от сертификата, заверенного подписью удостоверяющего центра (УЦ), только вместо передачи на подпись в УЦ пользователь создает свою собственную сигнатуру. Проще говоря, создатель сертификата сам является в данном случае УЦ. Все корневые сертификаты доверенных УЦ являются самозаверенными.

Ненадежность self-signed сертификата

Поскольку самозаверенный сертификат не заверяется удостоверяющим центром, в соответствии с п. 3.3 RFC 2459, такой сертификат невозможно отозвать.
Теоретически, это позволяет осуществить Man-in-The-Middle-атаку, при которой злоумышленник может перехватить сертификат узла-инициатора шифрованного соединения и вместо него отправить узлу назначения свой поддельный, с помощью которого передаваемые данные можно будет дешифровать
При этом, подобным образом скомпрометированный сертификат нельзя будет отозвать, так как он не заверен УЦ.

Как оформить SSL сертификат?

Чтобы защитить сервер при помощи SSL сертификата нужно пройти несколько шагов:
1) Оформить заказ в системе и провести оплату .
2) Создать CSR запрос.
3) Установить ваш SSL сертификат.

Так же существуют срвисы предоставлящи выдачу , подтверждение и продление сертификатов - бесплатно, напрмиер certbot letscrypt

Как продлить сертификат?

Как такого продления не существует. Об этом говорит сайт https://intellect.icu . Просто заказывается выпуск нового сертификата с новым сроком дейтвия. и заменяются существующие настройки и сертификаты на сервере на новые.

Что такое отзыв сертификата?

Сертификат должен быть отозван если:

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

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

Отзыв сертификата - досрочное прекращение его действия. Отозванные сертификаты возобновлению не подлежат.

Методы отзыва сертификата:

  • в бумажном виде - заявление необходимо подписать и заверить печатью предприятия. Заявление в бумажном виде подать в центр сертификации ключей;
  • в электронном виде - по аналогии с предыдущим пунктом, только заявление необходимо отправить в центр сертификациив электронном виде.

Что такое блокировка сертификата?

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

Методы блокировки сертификата:

  • по телефону , при этом необходимо будет назвать парольный диалог, который был указан во время формирования заявок на сертификаты ;
  • в бумажном виде - Заявление в бумажном виде подать в центр сертификации ключей;
  • в электронном виде - по аналогии с предыдущим пунктом, только заявление необходимо отправить в центр сертификации,в электронном виде.

Для возобновления заблокированного сертификата необходимо подать заявление установленного образца в центр сертификации ключей.

Что такое CSR и как его создать?

Чтобы приобрести SSL сертификат вам необходимо будет сгенерировать CSR (Certificate Signing Request) на вашем сервере. CSR представляет собой кусок зашифрованного текста, содержащий информацию о компании и доменном имени.

В большинстве случаев CSR содержит следующие поля: страна (Country), регион (State/Province), город (Locality/City), организация (Organization), отдел (Organizational Unit) и доменное имя (Common Name). Обратите внимание:

1. Поле "страна" должно содержать код из двух символов, соответствующий стране. Для Украины код "UA", для России "RU", для остальных стран смотрите полный список кодов.
2. Поля "регион" и "город" должны содержать полные названия, например "Kievskaya Oblast", "Kiev".
3. Поле "организация" — полное юридическое название компании или ФИО предпринимателя, если сертификат оформляется на него.
4. Поле "отдел" — отдел организации, который занимается покупкой сертификата, например "IT".
5. "Доменное имя" — полное доменное имя, на которое приобретается сертификат, например "www.ssl.com".

Если вы генерируете CSR для Wildcard SSL сертификата, доменное имя должно быть указано с "*." (например *.ssl.com). Символ звездочки (*) будет означать любую последовательность символов, не содержащих точку.

После создания CSR вы сможете передать нам его в процессе оформления сертификата.

Итак для того, чтобы получить SSL сертификат самое первое, что нужно сделать, это сформировать специальный запрос на выпуск сертификата, так называемый (Certificate Signing Request). При формировании этого запроса вам будет задан ряд вопросов, для уточнения деталей о вашем домене и вашей компании. После завершения ваш веб сервер создаст 2 типа криптографических ключей — приватный ключ и публичный ключ.

Публичный ключ не является секретным и он помещается в запрос CSR.
Вот пример такого запроса:
-----BEGIN CERTIFICATE REQUEST-----
MIIC3 ...........................................

... ....
Px9x4fm+/xfgjfgjfgjLxJ+EHzQ==
-----END CERTIFICATE REQUEST-----

Данные которые содержатся в этом ключе можно легко проверить с помощью сервисов CSR Decoder.

Как пример:

CSR Decoder 1 https://www.sslshopper.com/csr-decoder.html или

CSR Decoder 2. https://certlogik.com/decoder/

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

Если мы вставим такой запрос в форму для его расшифровки, то увидим, какие данные содержатся в публичном ключе.

CSR Information:
Common Name: site.com — доменное имя, которое мы защищаем таким сертификатом
Organization: MyOrg — название организации, которой принадлежит домен
Organization Unit: Hosting department — подразделение организации
Locality: Kiev — город, где находится офис организации
State: Kiev — область или штат
Country: UA — двухбуквенный код, страны офиса.
Email: support@site.com — контактный email технического администратора или службы поддержки

Важный момент — обратите внимание на поле Country — формат этого поля подразумевает только двухбуквенный код по стандарту ISO 3166-1, если вы не уверены в коде вашей страны, то проверить его можно например тут: Таблица ISO-3166-1. Я обращаю внимание на это поле, потому, что самая частая ошибка у наших клиентов при генерации запроса CSR — это неправильный код страны. И как следствие с такой CSR произвести выпуск сертификата невозможно.

После того как CSR сгенерирован вы можете приступать к оформлению заявки на выпуск сертификата. Во время этого процесса центр сертификации (CA — Certification Authority) произведет проверку введенных вами данных, и после успешной проверки выпустит SSL сертификат с вашими данными и даст возможность вам использовать HTTPS. Ваш сервер автоматически сопоставит выпущенный сертификат, со сгенерированным приватным ключем. Это означает, что вы готовы предоставлять зашифрованное и безопасное соединение между вашим сайтом и браузером клиентов.

Какие данные содержит в себе SSL сертификат?


В сертификате хранится следующая информация:

  • полное (уникальное) имя владельца сертификата
  • открытый ключ владельца
  • дата выдачи ssl сертификата
  • дата окончания сертификата
  • полное (уникальное) имя центра сертификации
  • цифровая подпись издателя

SSL Сертификаты. Установка купленного и самозаверенного SSL сертификата на для Nginx и  Apache. Настройка HTTPS

Что такое центры сертификации (CA)?


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

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

Говоря в общем, SSL сертификаты содержат и отображают (как минимум одно из) ваше доменное имя, ваше название организации, ваш адрес, город и страницу. Также сертификат всегда имеет дату окончания и данные о центре сертификации, ответственного за выпуск сертификата. Браузер подключается к защищенному сайту, получает от него SSL сертификат и делает ряд проверок: он не просрочен ли сертификат, потом он проверяет, выпущен ли сертификат известным ему центром сертификации (CA) используется ли сертификат на сайте, для которого он был выпущен.

Если один из этих параметров не проходит проверку, браузер отображает предупреждение посетителю, чтобы уведомить, что этот сайт не использует безопастное соединение SSL. Он предлагает покинуть сайт или продолжить просмотр, но с большой осторожностью. Это последнее, что вы должны увидеть ваши потенциальные клиенты.

Центров сертификации существует достаточно много, вот перечень самых популярных:
Comodo — работает с 1998 штабквартира в Jersey City, New Jersey, США.
Geotrust — основан в 2001, в 2006 продан Verisign, штабквартира Mountain View, California, США
Symantec — бывший Verisign в состав которого входит и Geotrust. Купил всех в 2010 году.
Thawte — основан в 1995, продан Verisign в 1999.
Trustwave — работает с 1995, штабквартира Chicago, Illinois, США.

Как видим самый крупный игрок на рынке SSL сертификатов это Symantec, который владеет тремя крупнейшими центрами сертификации — Thawte, Verisgin и Geotrust.

Есть ли разница в каком центре сертификации заказывать сертификат?


Основное отличие между разными центрами сертификации — в цене сертификатов и в том, в каком количестве браузеров установлен их корневой сертификат. Ведь если в браузере нет корневного сертификата этого центра сертификации, то посетитель с таким браузером все равно получит ошибку при входе на сайт с сертификатом от такого центра.
Что касается перечисленных выше центров сертификации, то их корневые сертификаты установлены в, пожалуй, 99,99% всех существующих браузеров.

Чтобы проверить, корневые сертификаты каких центров сертификации установлены в вашем браузере, достаточно в настройках вашего браузера найти такую опцию. (В Chrome Настройки -> показать дополнительные настройки -> управление сертификатами -> Доверенные корневые центры сертификации). В Chrome установлено более 50 таких корневых сертификатов.

Важный момент — частенько у клиентов возникала ситуация, когда SSL сертификат на серверe установлен, но при заходе на сайт браузер все равно выдает ошибку. Такая ситуация может возникнуть или из-за отсутствия в файле ca-bundle.crt корневого сертификата центра выдавшего сертификат или из-за того, что корневой сертификат устарел. Корневые сертификаты также имеют свой срок действия (в браузерах они обновляются при обновлении браузера).

С июля 2010 года сертификационные центры перешли на использование ключей 2048bit RSA Keys, поэтому для корректной работы всех новых сертификатов необходимо устанавливать новые корневые сертификаты.
Если новые корневые сертификаты не установлены — это может вызвать проблемы с корректной установкой сертификата и распознаванием его некоторыми из браузеров.

Как установить SSL сертификат?

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

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

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

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

Установка SSL сертификата на Apache

1. Скопируйте файлы сертификата на ваш сервер.

2. Найдите файл конфигурации Apache для редактирования.

Обычно такие файлы конфигурации хранятся в /etc/httpd. Основной файл конфигурации в большинстве случаев называется httpd.conf. В некоторых случаях блоки могут находиться в нижней части файла httpd.conf. Иногда вы можете найти блоки отдельно под директорией, например /etc/httpd/vhosts.d/ или /etc/httpd/sites/ или в файле с названием ssl.conf.

Если вы открываете файл в текстовом редакторе, вы должны убедиться в наличии блоков которые содержат настройки Apache.

3. Установите блоки SSL для задания конфигурации.

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

4. Создайте блоки для подключения SSL-соединения.

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


DocumentRoot /var/www/html2
ServerName www.yourdomain.com
SSLEngine on
SSLCertificateFile /path/to/your_domain_name.crt
SSLCertificateKeyFile /path/to/your_private.key
SSLCertificateChainFile /path/to/root.crt



Поисправляйте имена файлов для согласования с файлами сертификатов:

  • SSLCertificateFile должен быть файлом вашего сертификата (например: your_domain_name.crt).
  • SSLCertificateKeyFile должен быть файлом ключа, созданного при генерации CSR.
  • SSLCertificateChainFile должен быть файлом корневого сертификата.

    5. Проверьте конфигурацию Apache до перезапуска.

    Всегда лучше проверить файлы конфигурации Apache на ошибки до перезапуска, потому что Apache не запустится заново, если в файлах конфигурации будут синтаксические ошибки. Используйте следующую команду:

    apachectl configtest

    6. Перезапустите Apache.

Установка SSL сертификата на Nginx

1. Скопируйте файлы сертификата на сервер.

Скопируйте ваш сертификат (your_domain_name.crt) и корневой сертификат (root.crt), вместе с .key-файлом, который вы генерировали при создании CSR-запроса в директорию на вашем сервере, куда вы собираетесь установить сертификат. Для обеспечения безопасности, сохраняйте файлы с пометкой "только чтение".

2. Соедените сертификат с корневым сертификатом.

Вам необходимо соединить файл сертификата с файлом корневого сертификата в единый .pem файл, выполнив следующую команду:

cat root.crt >> your_domain_name.crt

3. Измените файл виртуального хоста Nginx.

Откройте ваш файл виртуального хоста Nginx для сайта, который вы защищаете. Если вам необходимо, чтобы сайт работал и с защищенным соединением (https), и с незащищенным (http), вам нужен серверный модуль для каждого типа соединения. Сделайте копию существующего серверного модуля для незащищенного соединения и вставьте ниже оригинала. После этого добавьте строчки, который приведены ниже жирным шрифтом:

server {

listen 443;

ssl on;
ssl_certificate /etc/ssl/your_domain_name.crt;
(or .pem)
ssl_certificate_key /etc/ssl/your_domain_name.key;

server_name your.domain.com;
access_log /var/log/nginx/nginx.vhost.access.log;
error_log /var/log/nginx/nginx.vhost.error.log;
location / {
root /home/www/public_html/your.domain.com/public/;
index index.html;
}

}

Настройка имен файлов:

  • ssl_certificate - файл, содержащий основной и корневой сертификаты (шаг 2).
  • ssl_certificate_key - файл с ключем, который был сгенерирован при создании CSR.

    4. Перезагрузите Nginx.

    Введите следующую команду для перезагрузки Nginx:

    sudo /etc/init.d/nginx restart

Сздание самозаверенного сертификата

Создание клиентского закрытого ключа и запроса на сертификат (CSR).

   Для создания подписанного клиентского сертификата предварительно    необходимо создать запрос на сертификат, для его последующей подписи.
   Аргументы команды полностью аналогичны аргументам использовавшимся при    создании самоподписанного доверенного сертификата (см. $1), но
   отсутсвует параметр -x509.

        # openssl req -new -newkey rsa:1024 -nodes -keyout client01.key \
        -subj /C=RU/ST=Msk/L=Msk/O=Inc/OU=Web/CN=usr/emailAddress=usr@dm.ru \
        -out client01.csr


   В результате выполнения команды появятся два файла 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

   Описание аргументов:

   ca     Подпись запроса с помощью CA.
   -config ca.config    Использовать конфигурационный файл ca.config.
   -in client01.csr     CSR находится в файле client01.csr
   -out client01.crt   Сохранить сертификат в файл client01.crt
   -batch        Не спрашивать подтверждения подписи.

   В результате выполнения команды появится файл клиентского сертификата    client01.crt. Просмотреть данные сертификата вы можете с помощью
   команды:

        # openssl x509 -noout -text -in client01.crt


Подготовка данных для передачи клиенту.

   Для передачи полученных в результате предыдущих операций файлов    клиенту, обычно используется файл в формате PKCS#12. В этот файл
   упаковывается и защищается паролем вся информация необходимая клиенту   для инсталяции сертификата в броузер.

        # openssl pkcs12 -export -in client01.crt -inkey client01.key \
        -certfile ca.crt -out client01.p12 -passout pass:passwwww

   Описание аргументов:

   pkcs12        Работа с файлами формата PKCS#12.
   -export        Экспортирование данных в файл.
   -in client01.crt          Файл клиентского сертификата.
   -inkey client01.key          Файл закрытого ключа.
   -certfile ca.crt          Файл доверенного сертификата.
   -out client01.p12          Сохранить данные в файл client01.p12.
   -passout pass:passwwww          Установить пароль passwwww на файл (пароль может быть любым, в    том числе и пустым)

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

Пример создания самозаверенного сертификата

Создадим файлы cert.key и cert.crt, в которых будут храниться секретный ключ и открытый сертификат, основанный на нем. Сертификат будет действителен в течение Хдней; (ключ с опцией -nodes будет нешифрованным).

openssl req -x509 -nodes -days X -newkey rsa:2048 -keyout cert.key -out cert.crt

Х нужно заменить на нужное кол-во дней. После вызова команды надо будет ответить на вопросы о владельце и т.д. На вопрос “Common Name” нужно отвечать именем домена для которого планируется использовать этот сертификат. В результате выполнения команды у вас будет 2 файла: cert.key(с секретным ключом сервера) и cert.crt(с публичным ключом), которые уже можно использовать в конфигах серверов.

Например(файлы сертификата предварительно положены в каталог /etc/ssl/ ):
Nginx

server {
       listen   443;
       server_name  site.ru;

       ssl on;
       ssl_certificate         /etc/ssl/cert.crt;
       ssl_certificate_key     /etc/ssl/cert.key;

       location / {
           root /var/www/site.ru;
       }
}

Apache

NameVirtualHost *:443

        ServerName site.ru
        ServerAdmin admin@site.ru

        SSLEngine on
        SSLCertificateKeyFile /etc/ssl/cert.key
        SSLCertificateFile /etc/ssl/cert.crt
        DocumentRoot /var/www/site.ru/
        
                Options -Indexes FollowSymLinks -MultiViews
                AllowOverride All
        
        
                Options -Indexes FollowSymLinks -MultiViews
                AllowOverride All
                Order deny,allow
                allow from all
        
    DirectoryIndex index.htm index.php    



Можно автоматизировать ввод ответов с помощью опции -subj:

openssl req \
  -x509 -nodes -days 365 \
  '''-subj '/C=RU/..../CN=имя_домена' \'''
  -newkey rsa:2048 -keyout cert.key -out cert.crt

Пример установки и настройки беспланого сертификата от certbot

Важное замечание, эти сертификаты имеют короткий срок дйствия- 4 месяца , возможно автоматические пробление с подтверждением, так же существуют ограничение по типу выдаваемого суртификата

Проверить что никто не слушает 80 порт

sudo apt-get update

установить apt-get install nginx

если нужно , то удалить и перустановить

sudo apt-get remove nginx*

sudo apt-get purge nginx*

 

add the repository.


 
  • sudo add-apt-repository ppa:certbot/certbot

если не установлен
apt-get install certbot


Регистрацию нужно сделать только один раз:

certbot register --email me@example.com

начала попробуем получить необходимый сертификат в режиме для тестов:

certbot certonly --dry-run -d example.com -d www.example.com

В конце программа должна отчитаться об успешной работе:

The dry run was successful.

Теперь можно смело получать сертификат уже в самом деле. Не забудьте явно указать все необходимые поддомены, такие как www.

Так можно сгенерировать только сертификат
certbot certonly -d example.com -d www.example.com


Проверим полученный сертификат

Убедимся что полученный сертификат — именно тот, что нам нужен:

# openssl x509 -text -in /etc/letsencrypt/live/example.com/cert.pem
Certificate:
    Signature Algorithm: ...
      Validity
        Not Before: Jan  3 06:00:00 2022 GMT
        Not After : Apr  3 06:00:00 2022 GMT
        X509v3 extensions:
            ...
            X509v3 Subject Alternative Name: 
                DNS:example.com, DNS:www.example.com

Или, если подробности вам не нужны:

cat /etc/letsencrypt/live/*/cert.pem | openssl x509 -text | 
        grep -o 'DNS:[^,]*' | cut -f2 -d:

Команда должна вывести список доменов в сертификате.

Полный рабочий пример конфига:

server {
    server_name www.example.com;
    listen www.example.com:443 ssl; # default_server;
    # выше можно добавить default_server для клиентов без SNI

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 127.0.0.1 8.8.8.8;

    # исключим возврат на http-версию сайта
    add_header Strict-Transport-Security "max-age=31536000";

    # явно "сломаем" все картинки с http://
    add_header Content-Security-Policy "img-src https: data:; upgrade-insecure-requests";

    # далее все что вы обычно указываете
    #location / {
    #    proxy_pass ...;
    #}
}

Так ж существуют плагины которые позволяют не только генерировать . продлевать сертифкаты но и изменять автоматически конфиги вебсрвера для полученных сертифкатов например certbot для nginx

And finally, install sudo certbot renew --dry-run package with apt-get.


 
  • sudo apt-get install python-certbot-nginx

/etc/nginx/sites-available/example.com

. . .
server_name example.com www.example.com;
. . .

nginx -t sudo ufw status sudo systemctl reload nginx sudo certbot --nginx -d example.com -d www.example.com sudo certbot renew --dry-run

Чтобы уставноить сертифкат просто дя нового домена, то запустите certbot

root@user# certbot

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx

Which names would you like to activate HTTPS for?
-------------------------------------------------------------------------------
1: intellect.icu  - ваш домен которыйимеет сертифкат
2: www.intellect.icu  - ваш домен который еще не имет сртифкат

-------------------------------------------------------------------------------
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):  ___

выберите нужный, в нашем случае - 2

SSL Сертификаты. Установка купленного и самозаверенного SSL сертификата на для Nginx и  Apache. Настройка HTTPS

выберите 2 есили нужен принудитльный редирект (ркоменднутся)

SSL Сертификаты. Установка купленного и самозаверенного SSL сертификата на для Nginx и  Apache. Настройка HTTPS

Возможные проблемы

1) При создании соединения например с сервисом Push сообщений
возникает ошибка
OpenSSL Error messages: error:14094416:SSL routines:SSL3_READ_BYTES:sslv3 alert certificate unknown

причина- или сертификат вооще неверный или закончился срок его действия

2) при запуске certbot ошибка

ERROR:certbot.log:The server experienced an internal error :: The service is down for maintenance or had an internal error. Check https://letsen
SSL Сертификаты. Установка купленного и самозаверенного SSL сертификата на для Nginx и  Apache. Настройка HTTPS
DEBUG:acme.client:Received response:
HTTP 503
Server: nginx
Content-Type: application/problem+json
Content-Length: 178
Connection: keep-alive
ETag: "5a590733-b2"

b'{\n "type": "urn:acme:error:serverInternal",\n "detail": "The service is down for maintenance or had an internal error. Check https://letsencrypt.status.io/ for mor
2019-11-17 21:07:08,312:DEBUG:certbot.log:Exiting abnormally:
Traceback (most recent call last):
File "/usr/bin/certbot", line 11, in
load_entry_point('certbot==0.23.0', 'console_scripts', 'certbot')()
File "/usr/lib/python3/dist-packages/certbot/main.py", line 1266, in main
return config.func(config, plugins)
File "/usr/lib/python3/dist-packages/certbot/main.py", line 1023, in run
le_client = _init_le_client(config, authenticator, installer)
File "/usr/lib/python3/dist-packages/certbot/main.py", line 642, in _init_le_client
return client.Client(config, acc, authenticator, installer, acme=acme)
File "/usr/lib/python3/dist-packages/certbot/client.py", line 230, in __init__
acme = acme_from_config_key(config, self.account.key, self.account.regr)
File "/usr/lib/python3/dist-packages/certbot/client.py", line 46, in acme_from_config_key
return acme_client.BackwardsCompatibleClientV2(net, key, config.server)
File "/usr/lib/python3/dist-packages/acme/client.py", line 718, in __init__
directory = messages.Directory.from_json(net.get(server).json())
File "/usr/lib/python3/dist-packages/acme/client.py", line 1041, in get
self._send_request('GET', url, **kwargs), content_type=content_type)
File "/usr/lib/python3/dist-packages/acme/client.py", line 943, in _check_response
raise messages.Error.from_json(jobj)
acme.messages.Error: urn:acme:error:serverInternal :: The server experienced an internal error :: The service is down for maintenance or had an internal error. Check ht
certbot.log:An unexpected error occurred:
:ERROR:certbot.log:The server experienced an internal error :: The service is down for maintenance or had an internal error. Check https://letsen

зайдите на сайт https://letsencrypt.status.io/

или установите certbot

проверьте статус системы возможно временная неполадка

SSL Сертификаты. Установка купленного и самозаверенного SSL сертификата на для Nginx и  Apache. Настройка HTTPS

Service Disruption API UnavailableService Disruption

Incident Status

Service Disruption

Components

acme-v01.api.letsencrypt.org (Production), acme-v02.api.letsencrypt.org (Production)

Locations

High Assurance Datacenter 1, High Assurance Datacenter 2
18:41 UTC

[Identified] We have identified the problem with our production database and expect to restore service within one hour.


API прерывания обслуживания недоступен

Статус инцидента

Нарушение обслуживания

[Определено] Мы определили проблему с нашей производственной базой данных и ожидаем восстановить обслуживание в течение одного часа.

Места


ЦОД 1 с высокой степенью надежности, ЦОД 2 с высокой степенью надежности




Выводы из данной статьи про ssl сертификат указывают на необходимость использования современных методов для оптимизации любых систем. Надеюсь, что теперь ты понял что такое ssl сертификат, установка ssl сертификата, настройка https и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.

создано: 2016-09-07
обновлено: 2021-11-27
132642



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)

Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)