Четверг, 27 Август 2015 20:45

Добавление бесплатного доверенного SSL-сертификата на свой сайт.

Автор
Оцените материал
(4 голосов)

Лучше поздно, чем никогда! Так гласит народная мудрость.

Вот и я с некоторым опозданием расчухал, что оказывается доверенный SSL-сертификат для вэб-ресурса можно получить бесплатно. Да и не одного, а для сотни вэб-ресурсов! Я этому очень даже обрадовался! Крутой Ну и принялся за дело.

А помогли мне в этом вот эти статьи:

http://habrahabr.ru/post/257207/
http://habrahabr.ru/post/252821/
http://habrahabr.ru/post/252529/
http://habrahabr.ru/post/254231/
http://www.8host.com/blog/nastrojka-ocsp-stapling-na-serverax-apache-i-nginx/

Респект их авторам!

Собственно, раздаёт направо и налево бесплатные доверенные сертификаты китайский ресурс wosign.com. Поначалу китайские иероглифы смущают, но это только вначале. С помощью гугл-переводчика там вполне можно ориентироваться.

Итак, регистрируемся (скриншоты взяты из статей выше):

Вводим свои регистрационные данные и получаем уведомление, что на почту выслан код активации:

Входим под своей только что созданной учёткой:

Поле чего переходим на страничку для получения сертификата:

https://buy.wosign.com/free/

Вводим домены, для которых нужен сертификат (одна строка -- один домен):

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

После подтверждения доменов система предложит сгенерировать сертификат. Причём вручную:

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

Всё, скачиваем готовый сертификат:

Скачается запароленный zip-архив. Пароль тот, что ввели на один скриншот выше. В этом архиве обнаружите ещё несколько вложенных архивов. В каждом их них лежат готовые сертификаты под тот или иной вэб-сервер. Меня, естественно, интересует сертификат под nginx.

Теперь этот сертификат надо установить у себя на сервере.
НО! перед тем, как ставить сертификат, я наткнулся вот на эту информацию:

http://habrahabr.ru/post/254231/#comment_8350543

Поэтому сначала решил обновить nginx. Для этого надо сначала не забыть обновить порты. Как это делать, знает даже новичок во FreeBSD. И я об этом уже писал в других своих статьях, поищите, если совсем туго В рот мне ноги

К этому моменту в портах уже была версия nginx 1.9.3. Обновляем его с помощью portupgrade.
НО! Перед обновлением надо сначала зайти в каталог с портом: /usr/ports/www/nginx-devel. И выполнить там команду:

config

Команда вызовет меню с опциями сборки. Я выставил опции сборки ровно такие же, как у меня были и раньше. Но к ним добавил опцию SPDY. Эта опция потянула за собой установку более свежего пакета OpenSSL. Видимо, тот пакет, что идёт вместе с системой, для поддержки SPDY не подходит. Опции сборки OpenSSL я вот такие сделал:

Оба пакета установились удачно. Ну а поскольку в системе теперь присутствует свежий пакет OpenSSL, то в файл /etc/make.conf имеет смысл добавить строчку:

WITH_OPENSSL_PORT=yes

Это для того, чтобы последующие пакеты, которые я, возможно, когда-то буду устанавливать, использовали версию OpenSSL свежую, которую только что поставили из портов.

Значит, пробую запустить свежий nginx и получаю ошибку:

Performing sanity check on nginx configuration:
Can't locate nginx.pm in @INC (@INC contains: /usr/local/lib/perl5/5.14.2/BSDPAN /usr/local/lib/perl5/site_perl/5.14.2/mach /usr/local/lib/perl5/site_perl/5.14.2 /usr/local/lib/perl5/5.14.2/mach /usr/local/lib/perl5/5.14.2 .).
BEGIN failed--compilation aborted.
nginx: [alert] perl_parse() failed: 2
nginx: configuration file /usr/local/etc/nginx/nginx.conf test failed
Starting nginx.
Can't locate nginx.pm in @INC (@INC contains: /usr/local/lib/perl5/5.14.2/BSDPAN /usr/local/lib/perl5/site_perl/5.14.2/mach /usr/local/lib/perl5/site_perl/5.14.2 /usr/local/lib/perl5/5.14.2/mach /usr/local/lib/perl5/5.14.2 .).
BEGIN failed--compilation aborted.
nginx: [alert] perl_parse() failed: 2
/usr/local/etc/rc.d/nginx: WARNING: failed to start nginx

Це значимо, что он не может найти перловский модуль nginx.pm по известным ему путям. Проблема в том, что этот модуль лежит по НЕизвестному ему пути. Решается это добавлением параметра в секцию http:

perl_modules /usr/local/lib/perl5/site_perl/mach/5.14/;

Этот параметр задаёт дополнительный путь для модулей Perl.

Значит, свежий nginx рабочий, убедились. Теперь надобно его настроить под наш новый доверенный сертификат. Для этого сначала требуется скачать промежуточный сертификат и преобразовать его. Попробовал это сделать непосредственно на FreeBSD, но ничего не вышло:

fetch http://aia6.wosign.com/ca6.server1.free.cer | /usr/local/bin/openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null
WARNING: can't open config file: /usr/local/openssl/openssl.cnf
ca6.server1.free.cer 100% of 1456 B 5875 kBps
unable to load certificate
34381231656:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:157:

Заморачиваться не стал, а просто взял и сделал это на Linux-машине. Там команда отлично отработала:

wget -O - http://aia1.wosign.com/ca1g2-server1-free.cer | openssl x509 -inform DER -outform PEM | tee -a ca-certs.pem > /dev/null
--2015-08-08 19:23:13-- http://aia1.wosign.com/ca1g2-server1-free.cer
Распознаётся aia1.wosign.com (aia1.wosign.com)... 54.229.101.94, 54.154.148.49
Подключение к aia1.wosign.com (aia1.wosign.com)|54.229.101.94|:80... соединение установлено.
HTTP-запрос отправлен. Ожидание ответа... 200 OK
Длина: 1402 (1,4K) [application/pkix-cert]
Сохранение в каталог: ««STDOUT»». 100%[=============================================>] 1 402 --.-K/s за 0s 2015-08-08 19:23:14 (115 MB/s) - written to stdout [1402/1402]

Все доверенные сертификаты безопасным методом копирую на свой сервер и складываю в отдельную папку. У меня она тут: /usr/local/etc/nginx/trustcert
Правлю секции конфига nginx. Показываю не весь конфиг, а только кусок, касающийся SSL.

Было:

server {
        listen       443;
        server_name  technotrance.su www.technotrance.su;
        ssl                  on;
        ssl_certificate      cert.pem;
        ssl_certificate_key  cert.key;

        ssl_session_timeout  5m;

        ssl_protocols  SSLv2 SSLv3 TLSv1;
        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;

И стало:

server {
        listen       443 ssl spdy;
        server_name  technotrance.su www.technotrance.su;
        ssl                  on;
        resolver  8.8.8.8;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_certificate  ./trustcert/1_technotrance.su_bundle.crt;
        ssl_certificate_key  ./trustcert/2_technotrance.su.key;
        ssl_trusted_certificate ./trustcert/ca-certs.pem;
        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout  15m;

        ssl_protocols  SSLv2 SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
        ssl_prefer_server_ciphers   on;

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

Собственно, пояснения по важным добавившимся опциям:

SPDY—протокол прикладного уровня для передачи веб-контента. По замыслу разработчиков, данный протокол позиционируется как замена некоторых частей протокола HTTP — таких, как управление соединениями и форматы передачи данных. Основной задачей SPDY является снижение времени загрузки веб-страниц и их элементов. Статистика говорит о том, что в ряде случаев веб-страницы загружались на 55% быстрее, чем при использовании HTTP-протокола. В документации также сказано, что время загрузки страниц стало меньше на 36%.

OCSP stapling – это расширение TLS/SSL, целью которого является повышение производительности SSL-переговоров при сохранении конфиденциальности посетителя. Две основные проблемы OCSP – это приватность и большая нагрузка на серверы центров сертификации. Чтобы связаться с центром сертификации (или ЦС) и подтвердить статус сертификата, OCSP требуется браузер. Это нарушает конфиденциальность, поскольку ЦС знает, какой именно сайт был открыт и кто именно получает доступ к нему. При большом количестве посетителей веб-сайта HTTPS OCSP-сервер ЦС должен обрабатывать все запросы посетителей. OCSP stapling позволяет владельцу сертификата запрашивать сам OCSP-сервер и кэширует полученный ответ. Этот ответ «сшивается» (staple) с TLS/SSL рукопожатием через Certificate Status Request. В результате серверы ЦС не перегружаются запросами, а браузеры больше не раскрывают подробностей третьим лицам.

Вот и всё! Теперь я наслаждаюсь вот такой красотой:

Прочитано 13445 раз Последнее изменение Суббота, 02 Апрель 2016 16:01

Комментарии  

Андрей
0 # Андрей 06.11.2015 10:58
Как сделать сертификат для внутреннего сайта?? я много чего не понимаю но на предприятии внутренний сайт у которого сертификат самоподписанный.
И данный wosign.com ругается на домен и правильно ругается, но как решить проблему? поменять шифрование и сделать новый сертификат или как?
Николай
0 # Николай 11.11.2015 19:25
Описанный здесь метод не подойдёт для внутреннего сайта. И я не понимаю, зачем вообще на внутреннем сайте SSL нужен? Защищаться от кого? От своих же сотрудников? Моё мнение: для внутреннего сайта достаточно обычного http без шифрования.
Игорь
0 # Игорь 02.12.2016 01:21
В общем шары уже нет на данном сайте :)

You have no rights to post comments

Вы здесь: Home Мои статьи FreeBSD Добавление бесплатного доверенного SSL-сертификата на свой сайт.