Типы SSL-сертификатов: какой выбрать и где его купить

Типы SSL-сертификатов: какой выбрать и где его купить Сертификаты
Содержание
  1. Что такое ssl-сертификат
  2. Безопасность данных
  3. Где купить ssl-сертификат?
  4. Доверие к сайту
  5. Есть ли финансовые гарантии от вендоров ssl-сертификатов?
  6. Зачем нужен ssl-сертификат?
  7. Как выбрать центр сертификации?
  8. Какие типы ssl-сертификатов существуют?
  9. Каким сайтам нужен ssl?
  10. Каковы особенности типов ssl-сертификатов?
  11. Какой ssl-сертификат выбрать?
  12. Конвертация pem > der
  13. Конвертация pem в p7b / pkcs#7
  14. Конвертация pfx / pkcs#12 в pem
  15. Конвертация ssl сертификатов в openssl
  16. Конвертировать der-кодированный сертификат в pem
  17. Конвертировать сертификат pem в der
  18. Общие преобразования pem
  19. Отличаются ли алгоритмы шифрования разных ssl-сертификатов?
  20. Получение данных о сертификате
  21. Преобразовать сертификат в кодировке der с цепочкой доверия и закрытым ключом в pkcs # 12
  22. Просмотр содержимого файла сертификата pem
  23. Просмотр содержимого файла сертификата в кодировке der
  24. Распространенные расширения файлов
  25. Расширения имени файла der
  26. Расширения файла x509
  27. Типы ssl-сертификатов и разница между ними
  28. Часть 1. самоподписанный сертификат
  29. Часть 2. сертификат 2-го уровня
  30. Заключение

Что такое ssl-сертификат

SSL (Secure Sockets Layer — уровень защищённых сокетов) — это протокол шифрования, который позволяет кодировать данные для более безопасного обмена.

Безопасность данных

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

Где купить ssl-сертификат?

Самым логичным ответом на этот вопрос видится: «Непосредственно у центра сертификации». Но не всё так просто. Дело в том, что центры сертификации, как правило, работают через посредников (ресселеров), поставляя им сертификаты на «оптовых условиях». Реселлер же, в свою очередь, берёт на себя все процедуры по работе с клиентом, начиная с формы заказа сертификата и заканчивая поддержкой в преодолении затруднений, которые могут возникнуть у покупателя.

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

Скорость реакции провайдера важна не только в решение возникших трудностей, но и на более раннем этапе – оформлении сертификата. Компания, у которой вы приобретаете сертификат, не должна нарушать заявленных сроков заказа. В противном случае, возможны задержки запуска ваших проектов, казалось бы, на ровном месте.

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

Доверие к сайту

Пользователи привыкают, что все крупные проекты используют SSL-сертификаты. Надпись «Защищено» и замочек дают посетителю сайта представление о том, что он и его данные находятся в безопасности.

Есть ли финансовые гарантии от вендоров ssl-сертификатов?

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

Зачем нужен ssl-сертификат?

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

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

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

Как выбрать центр сертификации?

Несмотря на жёсткую конкуренцию компаний-эмитентов сертификатов, весьма затруднительно выделить существенные различия между ними. Конечно, речь здесь идёт о общепризнанных мировых лидеров индустрии SSL-сертификации, например, Symantec, Comodo, RapidSSL или Thawte.

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

Какие типы ssl-сертификатов существуют?

  • DV — Domain Validation — для подтверждения домена;
  • OV — Organization Validation — для подтверждения организации и домена;
  • EV — Extended Validation — для расширенного подтверждения организации и домена.

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

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

Каким сайтам нужен ssl?

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

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

Каковы особенности типов ssl-сертификатов?

Рассмотрим подробнее виды предлагаемых сегодня на рынке SSL-сертификатов. Их отличия условно можно разделить на две группы

По методу проверки

Какой ssl-сертификат выбрать?

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

Например, если вы просто хотите уберечь пользователей вашего веб-сайта от навязчивых предупреждений браузера о посещении непроверенного сайта, будет достаточно за несколько минут получить простой DV (Domain Validation) сертификат. Если же вы используете свою интернет-площадку для операций, требующих повышенного уровня безопасности данных компании и клиентов — стоит задуматься об EV (Extended Validation) сертификате.

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

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

Конвертация pem > der

Что бы сконвертировать PEM в DER — выполните:

# openssl x509 -outform der -in /etc/apache2/ssl/apache.pem -out /etc/apache2/ssl/apache.der

Получить данные из DER-файла ключа можно так:

# openssl x509 -in /etc/apache2/ssl/apache.der -inform der -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 15118644328740439277 (0xd1d036ea3c0c44ed)
    Signature Algorithm: sha256WithRSAEncryption
        ...
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (1024 bit)
                ...
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                45:31:3E:0F:DF:12:FE:12:1A:52:00:5F:D5:9B:F5:70:9D:20:A6:A0
            X509v3 Authority Key Identifier:
                keyid:45:31:3E:0F:DF:12:FE:12:1A:52:00:5F:D5:9B:F5:70:9D:20:A6:A0

            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
        ...
-----BEGIN CERTIFICATE-----
MIICsjCCAhugAwIBAgIJANHQNuo8DETtMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNV
...
7agttGBmXpVSy0Gu0uwyz3d4Loq0Nxz/UNXf00kH6p6taTSJWtqJC8yCBvMVSuVn
3TTE1C50wQTP3d7FPRY01/zc9guxUg==
-----END CERTIFICATE-----

Ссылки по теме

Конвертация pem в p7b / pkcs#7

Если же вам нужно преобразовать ваш стандартный SSL сертификат в файл формата P7B / PKCS#7, вы можете кроме SSL сертификата вашего домена загрузить также файлы с цепочками сертификатов.

Конвертация pfx / pkcs#12 в pem

Если вам необходимо преобразовать SSL сертификат формата PFX в PEM-формат, следует открыть файл сертификата в любом текстовом редакторе и скопировать текст каждого сертификата вместе с тегами BEGIN / END в отдельные файлы, после чего их следует сохранить их как certificate.cer (для сертификата вашего сервера) и cacert.cer (для цепочки промежуточных сертификатов). То же самое следует проделать с текстом приватного ключа и сохранить его под названием privatekey.key.

Конвертация ssl сертификатов в openssl

Данные команды OpenSSL дают возможность преобразовать сертификаты и ключи в разные форматы. Для того чтобы сделать их совместимыми с определенными видами серверов, либо ПО. К примеру, Вам необходимо конвертировать обыкновенный файл PEM, который будет работать с Apache, в формат PFX (PKCS # 12) с целью применения его с Tomcat, либо IIS.

  • Конвертировать PEM в DER openssl x509 -outform der -in certificate.pem -out certificate.der
  • Конвертировать PEM в P7B openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
  • Конвертировать PEM в PFX openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
  • Конвертировать DER в PEM openssl x509 -inform der -in certificate.cer -out certificate.pem
  • Конвертировать P7B в PEM openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
  • Конвертировать P7B в PFX openssl pkcs7 -print_certs -in certificate.p7b -out certificate.ceropenssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
  • Конвертировать PFX в PEM openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

Конвертировать der-кодированный сертификат в pem

openssl x509 -inform der -in CERTIFICATE.der -out CERTIFICATE.pem

Конвертировать сертификат pem в der

openssl x509 -outform der -in CERTIFICATE.pem -out CERTIFICATE.der

Общие преобразования pem

В приведенных ниже командах OpenSSL замените имена файлов ВСЕМИ ЗАГЛАВНЫМИ буквами фактическими путями и именами файлов, с которыми вы работаете.

Отличаются ли алгоритмы шифрования разных ssl-сертификатов?

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

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

Про сертификаты:  Как создать подарочный сертификат в "1С:КА" и "1С:ERP"? :: Отвечает специалист 1С

Многие провайдеры предлагают, так называемые, онлайн-генераторы CSR-запроса. Для генерации таким сервисам необходимо также создать для вас пару открытый/закрытый ключ. Последний является конфиденциальным и не должен передаваться третьим лицам. Но соблюдение данного требования сделает работу CSR-генераторов технически невозможной, поэтому сервис так или иначе будет иметь доступ к вашему файлу секретного ключа.

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

Для получения данных о сертификаты — можно использовать openssl, например:

# openssl x509 -in /etc/apache2/ssl/apache.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 15118644328740439277 (0xd1d036ea3c0c44ed)
    Signature Algorithm: sha256WithRSAEncryption
        ...
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (1024 bit)
                ...
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                45:31:3E:0F:DF:12:FE:12:1A:52:00:5F:D5:9B:F5:70:9D:20:A6:A0
            X509v3 Authority Key Identifier:
                keyid:45:31:3E:0F:DF:12:FE:12:1A:52:00:5F:D5:9B:F5:70:9D:20:A6:A0

            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
    ...
-----BEGIN CERTIFICATE-----
MIICsjCCAhugAwIBAgIJANHQNuo8DETtMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNV
...
3TTE1C50wQTP3d7FPRY01/zc9guxUg==
-----END CERTIFICATE-----

Преобразовать сертификат в кодировке der с цепочкой доверия и закрытым ключом в pkcs # 12

Чтобы преобразовать сертификат DER в PKCS # 12, его следует сначала преобразовать в PEM, а затем объединить с любыми дополнительными сертификатами и / или закрытым ключом, как показано выше. Для более подробного описания преобразования DER в PKCS # 12, пожалуйста, смотрите это как.

Просмотр содержимого файла сертификата pem

openssl x509 -в CERTIFICATE.pem -text -noout 

Просмотр содержимого файла сертификата в кодировке der

openssl x509 -inform der -in CERTIFICATE.der -text -noout

Распространенные расширения файлов

  • .CRT — расширение для файлов сертификатов. Сам сертификат может быть бинарным файлом .DER или ASCII — .PEM. Расширения .CER и .CRT фактически являются синонимами. Наиболее часто встречаются в UNIX-системах.
  • .CER — альтернативная форма .CRT у Microsoft.
  • .KEY — это расширение используется для публичных и приватных ключей PKCS#8, которые могут храниться в бинарном .DER или ASCII.PEM формате.

.CRT и .CER могут быть взаимозаменяемы только если они имеют один формат (т.е. — CRT-ключ в формате PEM == CER-ключу в PEM формате).

Расширения имени файла der

DER-кодированные файлы обычно находятся с расширениями .der и .cer.

Расширения файла x509

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

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

Кодировка (так же известна как расширение)

  • .DER — расширение .DER примеяется к двоичным файлам сертификатов. Такие файлы так же могут иметь расширение .CER или .CRT. Правильным примером использования в английском языке будет «I have a DER encoded certificate» или «I have a DER certificate«.
  • .PEM — используется для различных типов файлов X.509v3, которые содержат данные в виде ASCII (Base64), и начинаются со строки —– BEGIN.

Типы ssl-сертификатов и разница между ними

Работаю в хостинге: размещаем сайты пользователей на своих серверах.

Ввиду гигантского количества вопросов, которые нам задают и начинающие, и опытные пользователи, при помощи Пикабу хочу разъяснить некоторые принципы, аспекты и особенности этого ответвления IT-сферы. Не уверен, что количество вопросов от наших пользователей уменьшится, но попытаться стоит.

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

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

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

D — сертификаты с проверкой домена. При регистрации такого сертификата производится только проверка доменного имени. Это самый простой в оформлении и дешевый тип SSL сертификатов. Купить такой SSL сертификат может любая организация и любое физическое лицо. При заказе сертификата необходимо указывать «E-mail адрес для подтверждения» в сертифицируемом домене: на этот адрес будет приходить письмо для подтверждения «владения доменом». То есть, если оформляется сертификат на домен my-sertif.ru, то серт. центр предоставит выбор из нескольких ящиков, который можно будет указать в проверочных данных, например info@my-sertif.ru, admin@my-sertif.ru и другие. Указанный адрес должен обязательно существовать, все письма с инструкциями сертификационного центра будут высылаться на этот E-mail. При этом оформление сертификатов на домены, в имени которых содержатся намёки на банк, финансы и прочие подозрения на «фишинг» невозможно. Если нужен сертификат для домена кредитной организации, то оформление такого сертификата только с проверкой организации. Сайт с таким сертификатом будет показывать в адресной строке браузера «зелёный замочек» (у разных браузеров по-разному).

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

IDN (Internationalized Domain Names) — поддержка национальных доменов. Поддержка доменов не с латинскими символами. Если у вас домен например в зоне .рф, то такой вид сертификатов — ваш выбор.

EV (Extended Validation) — расширенная проверка. Такие сертификаты получают самое высокое доверие со стороны браузеров. Для этого вида сертификатов проводится полная проверка организации, включая обязательное заполнение форм с данными компании, заверяемых подписью и печатью. Но столь «сложное» оформление даёт самый высокий уровень доверия, чему свидетельствует «зеленая адресная строка» в браузере посетителя сайта, которая говорит о том, что сайт прошёл серьёзную проверку и все данные передаваемые между посетителем и сайтом надёжно защищены.

WildCard — поддержка субдоменов. Wildcard сертификат можно использовать на всех субдоменах (поддоменах) доменного имени. Один такой сертификат будет действителен на доменах www.my-sertif.ru, test.my-sertif.ru, accounts.my-sertif.ru и т.д. без каких либо ограничений на количество субдоменов.

SGC (Server Gated Cryptography) — высокий уровень шифрования. Сертификаты с поддержкой принудительно высокого уровня шифрования обеспечивают максимально высокий уровень шифрования вне зависимости от типов и версий браузеров клиентов. Если пользователь использует старую версию браузера, поддерживающую только 40 или 56 битное шифрование, то при использовании SGC-сертификата соединение все равно будет использовать 128(и более) битное шифрование.

SAN/UCC (United Communications Certificate) — мульти-доменные сертификаты. SAN SSL-сертификаты, так же известные как Единые сертификаты связи (UCC) идеальны для продуктов Microsoft Exchange, а так же для защиты мульти-доменных проектов. Такие сертификаты защищают все описанные в заявке домены, субдомены, локальные имена используя лишь 1 сертификат.

Помимо глубины проверки данных, разные типы сертификатов дают разные страховые возмещения. Об этом стоит рассказать отдельно.

Каждый платный сертификат подразумевает наличии страховки. Страховка покрывает финансовые риски посетителя сайта. Например, сертификат гарантирует страховое возмещение в размере $10000. Значит, если на домене установлен такой сертификат, и посетитель сайта домена в результате операций сайте понёс какие-либо финансовые убытки из-за взлома ключа сертификата, то такие убытки будут покрыты сертифкационным центром вплоть до $10000. На практике же лично мне не известно ни одного случая, когда такое возмещение было бы выплачено. И дело не в том, что SSL настолько суровая технология, что взломать ключи, а, следовательно, подсмотреть шифрованный трафик, невозможно. Скорее очень сложно доказать, что это произошло. Даже когда пару лет назад была анонсирована катастрофическая уязвимость в протоколе SSL, которая получила название «HeartBleed», информации о каких-то возмещениях не было.

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

Второй способ получить сертификат чуть более сложный. Его можно сгенерировать самостоятельно. Для его воплощения потребуется как минимум командная строка любой unix-системы, пара часов «курения» интернетов по запросам «Генерируем SSL сертификат самостоятельно», а затем пара несложных команд в командной строке.

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

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

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

Про сертификаты:  РПЦ против Макаронного монстра: краткая история пастафарианства в России: vasily_sergeev — LiveJournal

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

Способ третий. Немного издалека.

Пару лет назад группа интернет-компаний скооперировалась и создала свой собственный лунапарк сертификационный центр, который занимается выпуском бесплатных сертификатов для всех желающих. Центр называется «Let’s Encrypt». Каждый выпускаемый ими сертификат проходит проверку типа D, действует в течение 90 дней, а по истечении этого периода может быть бесплатно перевыпущен. Количество перевыпусков не ограничено.

Именно такой сертификат от Let’s Encrypt я советую почти всем, кто столкнулся с необходимостью использовать SSL.

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

Не сочтите за рекламу. Проект не получает никакой финансовой выгоды из выпуска таких сертификатов. Группа компаний лишь ратует за безопасный интернет.

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

картинка кнопок Let’s Encrypt в панели isp

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

Небольшой бонус. Какой сертификат мне выбрать для своего проекта? Здесь всё достаточно просто.

Всё зависит от того, для чего именно вам нужен сертификат? Большинству пользователей сейчас подойдёт бесплатный сертификат от Let’s Encrypt.

Если вам нужен сертифткат для сайта финаснсового учреждения, то нужно задуматься о платном сертификате с уровнем проверки минимум D O.

Все остальные сертификаты это:

1. Ваши амбиции — зелёная адресная строка в браузере не более, чем понты

2. Финансовые возможности.

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

Всем спасибо за внимание. Если есть какие-то вопросы — добро пожаловать в комментарии.

P.S.:

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

Часть 1. самоподписанный сертификат

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

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


Сделать это можно с помощью библиотеки Bouncy Castle, следующим образом:

private void button1_Click(object sender, EventArgs e)
        {            

            var KeyGenerate = new RsaKeyPairGenerator();

            KeyGenerate.Init(new KeyGenerationParameters(new SecureRandom(new CryptoApiRandomGenerator()), 1024));

            AsymmetricCipherKeyPair kp = KeyGenerate.GenerateKeyPair();

            var gen = new X509V3CertificateGenerator();

            var certName = new X509Name("CN=CA");
            var serialNo = new BigInteger("1",10);            

            gen.SetSerialNumber(serialNo);
            gen.SetSubjectDN(certName);            
            gen.SetIssuerDN(certName);
            gen.SetNotAfter(DateTime.Now.AddYears(100));
            gen.SetNotBefore(DateTime.Now);
            gen.SetSignatureAlgorithm("SHA1WITHRSA");            
            gen.SetPublicKey(kp.Public);     
            var myCert = gen.Generate(kp.Private);
            byte[] result = DotNetUtilities.ToX509Certificate(myCert).Export(X509ContentType.Cert);

            FileStream fs = new FileStream("D:\test1.crt", FileMode.CreateNew);
            fs.Write(result, 0, result.Length);
            fs.Flush();
            fs.Close();
        }

В результате выполнения данной процедуры будет создан стандартный x.509 сертификат, который, будучи открытым с помощью hex-редактора, выглядит вот таким чудесным образом:

30 82 01 8F 30 81 F9 A0  03 02 01 02 02 01 01 30
0D 06 09 2A 86 48 86 F7  0D 01 01 05 05 00 30 0D
31 0B 30 09 06 03 55 04  03 0C 02 43 41 30 20 17
0D 31 33 30 39 31 35 31  35 33 35 30 32 5A 18 0F
32 31 31 33 30 39 32 32  31 35 33 35 30 32 5A 30
0D 31 0B 30 09 06 03 55  04 03 0C 02 43 41 30 81
9F 30 0D 06 09 2A 86 48  86 F7 0D 01 01 01 05 00
03 81 8D 00 30 81 89 02  81 81 00 8D 80 B5 8E 80
8E 94 D1 04 03 6A 45 1A  54 5E 7E EE 6D 0C CB 0B
82 03 F1 7D C9 6F ED 52  02 B2 08 C3 48 D1 24 70
C3 50 C2 1C 40 BC B5 9D  F8 E8 A8 41 16 7B 0B 34
1F 27 8D 32 2D 38 BA 18  A5 31 A9 E3 15 20 3D E4
0A DC D8 CD 42 B0 E3 66  53 85 21 7C 90 13 E9 F9
C9 26 5A F3 FF 8C A8 92  25 CD 23 08 69 F4 A2 F8
7B BF CD 45 E8 19 33 F1  AA E0 2B 92 31 22 34 60
27 2E D7 56 04 8B 1B 59  64 77 5F 02 03 01 00 01
30 0D 06 09 2A 86 48 86  F7 0D 01 01 05 05 00 03
81 81 00 0A 1C ED 77 F4  79 D5 EC 73 51 32 25 09
61 F7 00 C4 64 74 29 86  5B 67 F2 3D A9 39 34 6B
3C A9 92 B8 BF 07 13 0B  A0 9B DF 41 E2 8A F6 D3
17 53 E1 BA 7F C0 D0 BC  10 B7 9B 63 4F 06 D0 7B
AC C6 FB CE 95 F7 8A 72  AA 10 EA B0 D1 6D 74 69
5E 20 68 5D 1A 66 28 C5  59 33 43 DB EE DA 00 80
99 5E DD 17 AC 43 36 1E  D0 5B 06 0F 8C 6C 82 D3
BB 3E 2B A5 F1 94 FB 53  7B B0 54 22 6F F6 4C 18
1B 72 1C

Тот же самый сертификат, но уже открытый с помощью стандартных средств windows:

Имя сертификата	CA
Издатель	CA
Версия сертификата	3
Серийный номер	0x1
Недействителен до...	15.09.2021 15:35:00 GMT
Недействителен после...	22.09.2113 15:35:00 GMT
Цифровая подпись (SHA-1)	F9 AD 58 B5 50 3D F6 36 5E B8 89 D4 DC C8 5F CC 25 4B 93 A2
Цифровая подпись (SHA-256)	42 02 24 20 4E 8F 3A 3E 31 38 88 E5 C5 E7 C3 03 14 3A A6 52 EA 78 B9 77 42 5B 99 EB 4B BA 23 82
Открытый ключ(1024 битный)		Алгоритм открытого ключа	rsaEncryption
Модуль	
00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E
10: EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08
20: C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8
30: 41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9
40: E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21
50: 7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23
60: 08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B
70: 92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F
Экспонента	01 00 01                                       

Подпись		Алгоритм подписи	sha1WithRSAEncryption
Подпись	
00: 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09 61 F7 00
10: C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B 3C A9 92
20: B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3 17 53 E1
30: BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B AC C6 FB
40: CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69 5E 20 68
50: 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80 99 5E DD
60: 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3 BB 3E 2B
70: A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18 1B 72 1C

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

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

ASN.1 — стандарт записи, описывающий структуры данных для представления, кодирования, передачи и декодирования данных. Wikipedia

Про сертификаты:  Дешевые авиабилеты – цены, поиск и покупка билетов на самолет ✈ Ozon Travel

С помощью языка ASN.1 можно описывать сложные структуры, состоящие из данных различных типов. Типичный пример ASN.1-файла выглядит как-то так:

Однако ASN.1 разрабатывался в те светлые времена, когда «640 КБ должно было хватать каждому» и тратить место на такую громоздкую запись не было никакой возможности. Поэтому, в целях экономии места, а также более удобной обработки хранимой в ASN.1-форме информации, был разработан специальный метод кодирования — DER.

DER-кодировка описывается следующим правилом. Первым записывается байт, характеризующий тип данных, затем последовательность байтов хранящих сведения о длине данных и затем уже записываются сами данные.

К примеру, для кодировки целого числа INTEGER 65537 используется следующая форма: 0203 01 00 01.Здесь первый байт 02, определяет тип INTEGER (полную таблицу типов вы можете найти например тут), второй байт 03 показывает длину блока. А следующие за этим байты 01 00 01, являются шестнадцатеричной записью нашего числа 65537.

В нашем случае, для описание простейшего самоподписаного сертификата, достаточно 9 типов данных. Приведем таблицу кодирования для этих типов:

Зная как кодируется каждый из этих типов, мы можем попытаться распарсить наш *.crt файл.

3082 01 8F3081 F9A0030201 02 0201 01 30
0D0609 2A 86 48 86 F7 0D 01 01 05 0500300D
310B30090603 55 04 03 0C02 43 41 302017
0D 31 33 30 39 31 35 31 35 33 35 30 32 5A 180F
32 31 31 33 30 39 32 32 31 35 33 35 30 32 5A 30
0D310B30090603 55 04 03 0C02 43 41 3081
9F 300D0609 2A 86 48 86 F7 0D 01 01 01 0500
0381 8D 00 3081 890281 81 00 8D 80 B5 8E 80
8E 94 D1 04 03 6A 45 1A 54 5E 7E EE 6D 0C CB 0B
82 03 F1 7D C9 6F ED 52 02 B2 08 C3 48 D1 24 70
C3 50 C2 1C 40 BC B5 9D F8 E8 A8 41 16 7B 0B 34
1F 27 8D 32 2D 38 BA 18 A5 31 A9 E3 15 20 3D E4
0A DC D8 CD 42 B0 E3 66 53 85 21 7C 90 13 E9 F9
C9 26 5A F3 FF 8C A8 92 25 CD 23 08 69 F4 A2 F8
7B BF CD 45 E8 19 33 F1 AA E0 2B 92 31 22 34 60
27 2E D7 56 04 8B 1B 59 64 77 5F 0203 01 00 01
300D0609 2A 86 48 86 F7 0D 01 01 05 050003
81 81 00 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09
61 F7 00 C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B
3C A9 92 B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3
17 53 E1 BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B
AC C6 FB CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69
5E 20 68 5D 1A 66 28 C5 59 33 43 DB EE DA 00 80
99 5E DD 17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3
BB 3E 2B A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18
1B 72 1C


Преобразуя байты-идентификаторы типов и убирая байты описывающие длину блоков получим следующую структуру:

SEQUENCE(3 elem)
	SEQUENCE(7 elem)
		[0](1 elem)
			INTEGER 2
		INTEGER 1
		SEQUENCE(2 elem)
			OBJECT IDENTIFIER 1.2.840.113549.1.1.5
			NULL
		SEQUENCE(1 elem)
			SET(1 elem)
				SEQUENCE(2 elem)
					OBJECT IDENTIFIER 2.5.4.3
					UTF8String CA
		SEQUENCE(2 elem)
			UTCTime 13-09-15 15:35:02 UTC
			GeneralizedTime 2113-09-22 15:35:02 UTC
		SEQUENCE(1 elem)
			SET(1 elem)
				SEQUENCE(2 elem)
					OBJECT IDENTIFIER 2.5.4.3
					UTF8String CA
		SEQUENCE(2 elem)
			SEQUENCE(2 elem)
				OBJECT IDENTIFIER 1.2.840.113549.1.1.1
				NULL
			BIT STRING(1 elem)
				SEQUENCE(2 elem)
					INTEGER 00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E
						        EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08
						        C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8
						        41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9
						        E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21
						        7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23
						        08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B
						        92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F
					INTEGER 65537
		SEQUENCE(2 elem)
			OBJECT IDENTIFIER 1.2.840.113549.1.1.5
			NULL
	BIT STRING 00: 0A 1C ED 77 F4 79 D5 EC 73 51 32 25 09 61 F7 00
		           C4 64 74 29 86 5B 67 F2 3D A9 39 34 6B 3C A9 92
		           B8 BF 07 13 0B A0 9B DF 41 E2 8A F6 D3 17 53 E1
		           BA 7F C0 D0 BC 10 B7 9B 63 4F 06 D0 7B AC C6 FB
		           CE 95 F7 8A 72 AA 10 EA B0 D1 6D 74 69 5E 20 68
		           5D 1A 66 28 C5 59 33 43 DB EE DA 00 80 99 5E DD
		           17 AC 43 36 1E D0 5B 06 0F 8C 6C 82 D3 BB 3E 2B
		           A5 F1 94 FB 53 7B B0 54 22 6F F6 4C 18 1B 72 1C

Это уже более похоже на то, что мы видим при открытии сертификатов в браузере или Windows. Пробежимся по каждому элементу:

Важным моментом, о котором стоит особенно упомянуть являются данные, для которых вычисляется подпись. Интуитивно может показаться, что подписываются все данные идущие до последнего поля BIT STRING, содержащего подпись. Но на самом деле это не так. В стандарте x.

	SEQUENCE(7 elem)
		[0](1 elem)
			INTEGER 2
		INTEGER 1
		SEQUENCE(2 elem)
			OBJECT IDENTIFIER 1.2.840.113549.1.1.5
			NULL
		SEQUENCE(1 elem)
			SET(1 elem)
				SEQUENCE(2 elem)
					OBJECT IDENTIFIER 2.5.4.3
					UTF8String CA
		SEQUENCE(2 elem)
			UTCTime 13-09-15 15:35:02 UTC
			GeneralizedTime 2113-09-22 15:35:02 UTC
		SEQUENCE(1 elem)
			SET(1 elem)
				SEQUENCE(2 elem)
					OBJECT IDENTIFIER 2.5.4.3
					UTF8String CA
		SEQUENCE(2 elem)
			SEQUENCE(2 elem)
				OBJECT IDENTIFIER 1.2.840.113549.1.1.1
				NULL
			BIT STRING(1 elem)
				SEQUENCE(2 elem)
					INTEGER 00: 8D 80 B5 8E 80 8E 94 D1 04 03 6A 45 1A 54 5E 7E
						        EE 6D 0C CB 0B 82 03 F1 7D C9 6F ED 52 02 B2 08
						        C3 48 D1 24 70 C3 50 C2 1C 40 BC B5 9D F8 E8 A8
						        41 16 7B 0B 34 1F 27 8D 32 2D 38 BA 18 A5 31 A9
						        E3 15 20 3D E4 0A DC D8 CD 42 B0 E3 66 53 85 21
						        7C 90 13 E9 F9 C9 26 5A F3 FF 8C A8 92 25 CD 23
						        08 69 F4 A2 F8 7B BF CD 45 E8 19 33 F1 AA E0 2B
						        92 31 22 34 60 27 2E D7 56 04 8B 1B 59 64 77 5F
					INTEGER 65537


Т.о. если перед вами будет стоять задача проверить ЭЦП x.509 сертификата, то для этого сперва необходимо извлечь TBS-сертификат.

Еще одно замечание относится к отпечатку сертификата. Как видите сам сертификат не содержит никаких сведений об отпечатке. Это объясняется тем, что отпечаток представляет собой обычное хеш-значение SHA-1 от всего файла сертификата, со всеми его полями, включая подпись издателя. Поэтому хранить отпечаток не обязательно, можно просто вычислять хеш при каждом просмотре сертификата.

Часть 2. сертификат 2-го уровня

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

Заключение

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

Ну и как всегда немного ссылок для тех, кому хочется больше подробностей.

  1. RFC5280 — спецификация x.509 сертификата и списка отзывов сертификатов.
  2. Руководство по выживанию — SSL/TLS и сертификаты X.509
  3. ASN.1 простыми словами, вариант статьи для хабра
  4. on-line утилита для декодирования DER-файлов
  5. Первичный стандарт ITU-T X.509 ( русский перевод). Спасибо ystr за ссылку.
Оцените статью
Мой сертификат
Добавить комментарий