Google заявил что использование https на сайтах будет восприниматься как положительный фактор для ранжирования и даже ходят слухи что сайты без https будут помечаться в Google Chrome как не надежные. Информация о https и ssl на данный момент очень актуальна. В этой записи как раз пойдет речь на эту тему - в ней описана общая информация о SSL сертификатах, их видах, форматах и способах конвертации.
P.S.: сам пока на https еще не перешел, подготавливаюсь и собираю информацию.
Содержание
CSR Запрос SSL сертификата
При покупке SSL сертификата при помощи специальных утилит или сервисов генерируется CSR запрос (Certificate Signing Request) в котором закодированы следующие данные:
- Common Name: elims.org.ua — доменное имя, защищаемое сертификатом
- Organization: elimS — компания-владелец домена
- Organization Unit: IT — департамент\отдел компании
- Locality: Kiev — город
- State: Kiev — область
- Country: UA — двухбуквенный код страны
- Email: admin@elims.org.ua — почтовый ящик
При генерации запроса получаем две части: публичную, которую нужно сообщить тому, кто генерирует нам сертификат (центру сертификации) и приватную, которую нужно будет прописать на сервере, где будет находиться ваш сайт с ssl-сертификатом.
Ниже пример публичной части такого CSR запроса, в котором закодированы указанные выше данные:
-----BEGIN CERTIFICATE REQUEST----- MIICyDCCAbACAQAwgYIxCzAJBgNVBAYTAlVBMQ0wCwYDVQQIDARLaWV2MQ0wCwYD VQQHDARLaWV2MQ4wDAYDVQQKDAVlbGltUzELMAkGA1UECwwCSVQxFTATBgNVBAMM DGVsaW1zLm9yZy51YTEhMB8GCSqGSIb3DQEJARYSYWRtaW5AZWxpbXMub3JnLnVh MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvcvusWoQJ+iVE9Z8bD6F k00/GMiwLNi+mR0EJwp2TGybVgUnydlK2FV8o0091ZuGrkniwnoimX+8N4ATzem1 jMeXlScqmLdWL2R6DnUTWHiIWezAmyIO51gBiMJ0E+jbfnauog2rNXTgGZbzJRvR 7y8hnL10DYtCfbCObxERynJWzxBFmK0qm8NREMMTa1dZGgmT7e9+afLMaKYqLlcM DGQNvIQyehI4g8aQwS2OJ7JuTcTXMusWjSQFIMeleg8nkuWJZ6awtTN6Rubh/VHI XO7LC4zdo8xzo8ub4calLSwi5Flr5iZUyzYxrqj2raBQ9pH1nCCyczlkH6I1HaHq nwIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAG2HoDX4zfmk331tp+VCEIpGooUt 1EgwGLf73SD7x7ZH6K0fe44cKECmc//Gdvr3UObckYw/aMgR88eGmWnpkjhGz0kX IfCqpK5zkoaBihofbs1G8+liuocvnMtKCphH/56GPAxPG/K7breJMGiaEkAq0Axn ozbvvSBbzILdV7xygSib6D20rvdsNOh7fKzo0bSgBhizuQ4/c0uPCTRzFrOvVVNW mY1NPF4IkurN2iEhbrGlJbKTki+SNh8oRrLyXDzqJE8QcZHKnO69JECGMTjhCDGI Kr/rxRB/p7qmlCUqhlVS2A6NhicKvAs+s9gE8BZE4uKXtp5vaOXxlJofpC0= -----END CERTIFICATE REQUEST-----
Раскодировать CSR и посмотреть что в нем зашифровано, например при помощи этих сервисов:
Или утилиты openssl и команды:
openssl req -in mycsr.csr -noout -text
После того как центр сертификации убедится в правильности переданных данных (в CSR запросе) Вам будет выдан SSL сертификат. Время проверки зависит от типа сертификата. Сертификаты подтверждающие только доменное имя (самые дешевые сертификаты) выдаются в автоматическом режиме, так как в них не нужно проверять существует ли указанная компания, ее контакты тд. и тп.
Создать CSR с новым сертификатом через утилиту OpenSSL
openssl req -new -newkey rsa:2048 -nodes -keyout domain_name.key -out domain_name.csr
Типы SSL сертификатов по проверке
- Подтверждающие доменное имя (Domain Validation — DV) - выпускаются в автоматическом режиме. Проверка проходит через отправку письма с ссылкой (по которой нужно пройти) или кодом (который нужно где-то ввести). Письмо отправляется по выбору либо на почтовый ящик, который указан во whois-домена, либо на один из ящиков домена, для которого создается сертификат: admin@, administrator@, hostmaster@, postmaster@, webmaster@.
- Подтверждающие домен и компанию (Organization Validation — OV) - не для частных лиц. Срок выдачи от 3 до 10 дней. Центр сертификации проверяет действительно ли существует указанная компания, принадлежит ли ей домен и правильны ли указаны контакты этой компании.
- С расширенной проверкой (Extendet Validation — EV) - самые дорогие сертификаты. Они отличаются от других тем, что в адресной строке написано название компании на зеленом фоне.
Типы SSL сертификатов по свойствам
- Обычные SSL сертификаты - сертификаты которые подтверждают домен и выпускаются автоматически
- SGC сертификаты - сертификаты с поддержкой повышения уровня шифрования, актуальны только для старых браузеров, которые по умолчанию поддерживали 40 или 56 битное шифрование.
- Wildcard сертификаты - сертификаты которые можно установить не только на основной домен, но и на поддомены.
- SAN сертификаты - сертификат который можно установить сразу на несколько разных доменов, их количество и имена заранее оговариваются.
- EV сертификаты - сертификаты с расширенной проверкой и названием компании на зеленом фоне в адресной строке.
- Сертификаты c поддержкой IDN - интернационализованные доменные имена, то есть домена в имени которых есть, например, кириллические символы.
Центры сертификации
Центр сертификации - организация имеющая право выдавать ssl-сертификаты, она проверяет данные, которые присылаются в CSR запросе.
Наиболее популярные центры сертификации:
- Comodo — работает с 1998. Jersey City, New Jersey, США.
- Symantec — бывший Verisign в состав которого входит и Geotrust. Купил всех в 2010 году.
- Geotrust — основан в 2001, в 2006 продан Verisign. Mountain View, California, США
- Thawte — основан в 1995, продан Verisign в 1999.
- Trustwave — работает с 1995. Chicago, Illinois, США.
Центры сертификации между собой отличаются ценой самого сертификата и тем, в скольких браузерах предустановленны их корневые сертификаты, а значит купленный сертификат не будет подсвечиваться красным, будет зеленый, то есть доверенный. Какие центры сертификации доверенные именно в вашем браузере можно посмотреть в настройках браузера касающихся https и ssl, во вкладках "доверенные центры сертификации" и "промежуточные центры сертификации". Стоит учитывать что корневые сертификаты центров сертификации также имеют свой срок "действия". Если у Вас старый не обновляемый браузер - то в нем скорее всего предустановленны уже устаревшие корневые сертификаты - повод устанавливать более новые версии браузеров.
Сертификаты перечисленных выше центров сертификации считаются доверенными в 99.99% браузеров. Покупать сертификаты значительно дешевле у партнеров центров сертификации, а не напрямую.
Форматы SSL сертификатов
Различные платформы и устройства требуют SSL сертификаты в различных форматах, например, сервер Windows использует PFX файлы в то время как Apache сервер использует индивидуальный PEM (.crt .cer) файлы. Ниже информация о форматах сертификатов и как преобразовать SSL сертификаты из одного формата в другой.
- PEM - популярный среди сертификационных центров, имеют расширение .pem, .crt, .cer, и .key. Файлы закодированы в Base64 и обязательно начинаются со строки "----- BEGIN CERTIFICATE -----", заканчиваются строкой "----- END CERTIFICATE -----". Apache и аналогичные серверы используют сертификаты в PEM формате.
- DER - бинарная форма сертификата в формате PEM. Иногда имеет расширение файла .der но чаще .cer. DER обычно используется в платформах Java.
- PKCS # 7 / P7B - файлы PKCS # 7 или P7B закодированные Base64, начинаются со строки "----- BEGIN PKCS7 ------" и заканчиваются строкой "----- END PKCS7 -----". P7B файлы содержат только сертификат и промежуточные сертификаты, частный ключ используется как отдельный файл. Платформы поддерживающие P7B файлы: Microsoft Windows и Java Tomcat.
- PKCS # 12/PFX - бинарная форма, в одном файле хранится сертификат сервера, промежуточные сертификаты и закрытый ключ. PFX файлы обычно имеют расширения .pfx и .p12. Как правило, используется в Windows для импорта и экспорта сертификатов и закрытых ключей. При конвертации PFX-формата в PEM-формат необходимо открыть файл в текстовом редакторе и скопировать каждый сертификат и закрытый ключ (включая BEGIN / END включение) в свои отдельные текстовые файлы, сохранить их как certificate.cer, CACert.cer, и privateKey.key.
OpenSSL команды для конвертации форматов SSL сертификатов
- 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.cer
openssl 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
SEO и SSL
- Google заявлял о том, что присутствие https на сайте является положительным фактором для ранжирования. То есть из двух абсолютно одинаковых сайтов, в поисковой выдаче выше будет тот, который с https
- Если некоторые части сайта мигрировали в HTTPS, а некоторые - нет, то позитивный сигнал к ранжированию получат только страницы с https в URL-адресах.
- Есть слухи что Google Chrome будет помечать сайты без https как не надежные.
- Необходимо использовать 2048-разрядные ключи для всех сертификатов.
- Используйте относительные URL адреса, это облегчит переход с http на https
- Для перехода с http на https можно использовать редирект в файле htaccess
- Убедитесь что в теге rel="canonical" используются ссылки с http, а не https
- Убедитесь что в индексе поисковиков не присутствуют одновременно и http и htpps версии одной страницы - это может восприниматься как дублированный контент
- CSS, JS, изображения и прочие файлы также должны использовать https
Переход на HTTPS, SSL
Если у Вас WordPress, то рекомендую прочесть статью "WordPress: переход на https" - в ней этот вопрос подробно рассматривается.
Указать канонические url через https.
Изменить все внутренние ссылки с http на https: Это тоже можно сделать через запрос в базе данных
Настроить 301-ю переадресацию с http-версии на https-версию через .htaccess:
Вариантов кодов редиректа с http на https существует большое количество, для примера приведу два из них:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R,L] </IfModule>
Или еще один код:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR] RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC] RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC] </IfModule>
Не всегда такая переадресация работает, у меня например выбивало ошибку "ERR_TOO_MANY_REDIRECTS", то есть происходило зацикливание.
В этом случае может помочь 301 редирект через php-код:
<?php if ( !$_SERVER['HTTPS'] ) { $host = $_SERVER['HTTP_HOST']; $request_uri = $_SERVER['REQUEST_URI']; $good_url = "https://" . $host . $request_uri; header( "HTTP/1.1 301 Moved Permanently" ); header( "Location: $good_url" ); exit; } ?>
Полезная информация
Получить сертификат Active Directory можно при помощи ввода команды на контролере домена:
certutil -ca.cert cacert.bin
Генерация приватного 2048-битного ключа при помощи openssl:
openssl genrsa -out privat.key 2048
Пример config-файла утилиты OpenSSL для генерации SAN сертификата:
[req] distinguished_name = req_distinguished_name req_extensions = v3_req [req_distinguished_name] countryName = Country Name (2 letter code) countryName_default = UA stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Kiev localityName = Locality Name (eg, city) localityName_default = Kiev organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = IT commonName = Common Name commonName_max = 64 [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = server.domain.com.ua DNS.2 = server.domain2.com.ua DNS.3 = server IP.1 = 192.168.1.1 IP.2 = 192.168.2.2
Команда для генерации CSR запроса через OpenSSL
openssl req -new -out request.csr -key privat.key -config config.cfg
Не доверенный сертификат сайта для браузера в android
Помимо установки сертификата для сайта, нужно также установить промежуточные и корневой сертификаты, тогда браузеры в android не будут ругаться.
Связано это с тем, что браузеры на компьютерах при проверке сертификата умеют проходить весь "путь сертификации": от сертификата сайта, до корневого сертификата, проверяя кем подписан сертификат каждого промежуточного узла. В android устройствах браузеры проверяют лишь кто подписал сертификат сайта и если они не увидят корневой сертификат доверенного центра сертификации, то будут считать такой сертификат не доверенным.
При установке ssl сертификата на сайт укажите не только свой сертификат, но и сертификаты всех промежуточных центров сертификации включая с корневым сертификатом центра сертификации.
Например в настройках хостинга "Украина", в поле где указывается SSL-сертификат моего сайта я прописал:
-----BEGIN CERTIFICATE-----
Тут сертификат для elims.org.ua
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Тут сертификат промежуточного центра сертификации - Comodo RSA Domain Validation Secure Server CA
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Тут корневой сертификат центра сертификации - COMODO RSA Certification Authority
-----END CERTIFICATE-----
Как проверить соответствие SSL сертификата и CSR к приватному ключу
Нужно преобразовать приватный ключ, SSL сертификата и CSR в md5 хэши:
Вывести md5 хэш модуля SSL сертификата :
$ openssl x509 -noout -modulus -in CERTIFICATE.crt | openssl md5
Вывести md5 хэш модуля приватного ключа :
$ openssl rsa -noout -modulus -in PRIVATEKEY.key | openssl md5
Вывести md5 хэш модуля CSR :
$ openssl req -noout -modulus -in CSR.csr | openssl md5
Если полученные md5 хэши одинаковы, значит файлы (сертификат, приватный ключ и CSR) соответствую друг другу.
Полезные ссылки
- ssllabs.com/ssltest - тут можно проверить валидность SSL сертификата
- sslcheck.globalsign.com - средство проверки конфигурации SSL, интерфейс тот же что и у предыдущего
- gogetssl.com - удобный сервис где можно купить дешевый сертификат, стоимостью до 10$
- sslshopper.com/csr-decoder.html - дешифровка csr-запроса
- certlogik.com/decoder - дешифровка csr-запроса
- www.openssl.org - сайт утилиты openssl
- slproweb.com/products/Win32OpenSSL.html - openssl для Windows
- Центр сертификации контролера домена: https://сервер_контролера_домена/certsrv/
- WordPress: переход на https
- Бронируем TLS в Windows Server - толковая статья о TLS, которая применима не только к Windows, хорошо расписывает про ciphers - набор шифров.
- CAA Records
- https://sslmate.com/labs/caa/ - CAA Record Generator, тут можно узнать какие записи стоит прописать в dns + лаконично о CAA
- Почему при генерации сертификата не стоит устанавливать опцию Must Staple
- decoder.link - отличный онлайн набор инструментов для работы с сертификатами: CSR генератор, CSR декодер, конвертер из одного формата сертификата в другой и прочее:
- decoder.link/csr_generator - отличный онлайн генератор CSR, присутствует больше более тонких опций
- decoder.link/result - хороший онлайн декодер CSR
- Знакомьтесь, Basic Constraints
- Руководство по выживанию — TLS/SSL и сертификаты SSL (X.509)
- RFC 5280 — Описание сертификатов и списков отозванных сертификатов для Х.509/PKI-инфраструктуры Интернет-сети
- Как правильно задавать имя сертификата при использовании расширения Subject Alternative Name (SAN)
Владельцам онлайн-бизнеса пора побеспокоиться, поскольку с 2017 в Chrome сайты, которые принимают карты или пароли (читай: практически все сайты сети), будут выдавать предупреждение, если не установлен SSL-сертификат. Времени не так много осталось, чтобы осуществить переход.
Здравствуйте, Владимир.
Хочу перевести свои сайты на https. Какие нюансы с приобритением Сертификата Wildcard (которые выдаются на все поддомены одного домена) и на что нужно обратить внимание. Для того чтобы писало в строке так как у вас (зеленым цветом Надежный) нужно выбирать сертификат с подтверждением организации, как тут поступать если у меня нет зарегистрированной организации?
Здравствуйте, с wildcard не приобретал, не подскажу. Но в настройке отличия от простого сертификата не должно быть.
«Надежный» — это с недавних пор chrome начал сообщать если установлен любой https сертификат (не самоподписанный), у меня обычный сертификат без потверждения организации.
С потверждением организации сертификат выглядит вот так: https://www.privat24.ua/
спасибо, прояснили ситуацию…
хотел ещё спросить, у кого заказывали и сколько стоит сертификат в год?
gogetssl.com — 13$ за три года
благодарю, ситуация с этими SSL-сертификатами — это как обязательная автостраховка для владельца авто ;)
«Надежный» в строке браузера — это, конечно, не совсем правильно. Злоумышленники тоже могут получить такие SSL-сертификаты для своих фишинговых сайтов, а браузер будет выводить, что сайт надежный.