Alexander A Manaeff -

 
 

Генерирование самоподписанного сертификата SHA256

Все об администрировании Windows NT/2000/2003/2008/2012 Server (в т.ч. R2) серверов. Групповые политики, домены, безопасность и пр. То, чего не найдешь в бескрайних просторах Интернета. Решения тех проблем, которые не решаются типовыми ответами, которые можно получить в техподдержке Майкрософта - а именно: переустановить продукт или купить какой-ть другой лицензионный диск.

Модератор: UncleFather

Генерирование самоподписанного сертификата SHA256

Сообщение UncleFather » 03 май 2017 15:39, Ср




Задача:

Необходимо сгенерировать самоподписанный сертификат SHA256.

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

Почему SHA256? - Потому что хоть SHA1 - одна из наиболее популярных функций хеширования находится на грани исчезновения. Алгоритм SHA1 был разработан в далеком 1995 году, а его первые слабые стороны обнаружили в 2005-м - почти 10 лет назад. Расчеты, проведенные два года назад, показали, что возможности взлома SHA1 значительно возросли. В связи с этим еще в ноябре прошлого года (2013) Microsoft заявил о том, что начиная с 2016 года компания полностью откажется от поддержки сертификатов, основанных на SHA1.

Кроме того, Google заявила о том, что компания будет постепенно отказываться от поддержки SHA1 в новых версиях наиболее используемого браузера Chrome. В первую очередь это отразится на том, что веб-сайты, использующие SSL сертификаты с хешированием SHA1 и сроком действия, заканчивающемся в 2016 году и позже, будут отмечены в браузере как ненадежные.

Почему бы просто не сгенерировать сертификат в Windows 7 или в поздних версиях Windows командой
Код: Выделить всё
openssl req -newkey rsa:2048 -nodes -sha256 -keyout my.domain.ru.key -x509 -days 3650 -out my.domain.ru.crt
- Потому что, начиная с 58-й версии, Google Chrome при использовании SSL сочтет сайт ненадежным и будет выдавать ошибку NET::ERR_CERT_COMMON_NAME_INVALID [missing_subjectAltName] для самоподписанных сертификатов. Дело в том, что, начиная с 58-й версии, Chrome требует, чтобы SSL сертификаты использовали SAN (Subject Alternative Name) вместо устаревшего Common Name (CN), из-за прекращения поддержки CN.
Поэтому, если сертификат сайта имеет только атрибут CN, то такой сайт будет считаться ненадежным.




Решение:

Суммируя все вышеуказанные факторы, мы видим, что нам нужен самоподписанный сертификат SHA256 с заполненным полем SAN.

Создание такого сертификата хорошо описано в статье Fixing Chrome 58+ [missing_subjectAltName] with openssl when using self signed certificates.

Подкорректировав этот алгоритм для Windows, и, переведя на русский язык, получаем следующую последовательность шагов:



  1. Для генерации корневого сертификата создаем файл настроек set.txt. Вместо указанных здесь параметров, нужно подставить свои. Если назначение каких-то полей непонятно, смотрим справку команды openssl:
     содержимое файла
    Код: Выделить всё
    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    req_extensions = req_ext
    distinguished_name = dn

    [ dn ]
    C=RU
    ST=Region
    L=City
    O=Organization
    OU=Organization unit
    emailAddress=address@domain.ru
    CN = root.ru

    [ req_ext ]
    subjectAltName = @alt_names

    [ alt_names ]
    DNS.1 = localhost
    DNS.2 = www.root.ru
    DNS.3 = root.ru
     Пример для manaeff.ru:
    Код: Выделить всё
    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    req_extensions = req_ext
    distinguished_name = dn

    [ dn ]
    C=RU
    ST=South Ural
    L=Chelyabinsk
    O=Alexander A. Manaeff
    OU=Web site
    emailAddress=man@manaeff.ru
    CN = manaeff.ru

    [ req_ext ]
    subjectAltName = @alt_names

    [ alt_names ]
    DNS.1 = localhost
    DNS.2 = www.manaeff.ru
    DNS.3 = manaeff.ru



  2. Для генерации корневого сертификата создаем командный файл (скрипт) createRootCA.bat, подставляя свои параметры, со следующим содержанием:
     
    Код: Выделить всё
    mkdir ssl
    openssl genrsa -des3 -out ssl\root.ru.key 2048
    openssl req -x509 -new -config set.txt -nodes -key ssl\root.ru.key -sha256 -days 700 -out ssl\root.ru.pem
     Пример для manaeff.ru:
    Код: Выделить всё
    mkdir ssl
    openssl genrsa -des3 -out ssl\manaeff.ru.key 2048
    openssl req -x509 -new -config set.txt -nodes -key ssl\manaeff.ru.key -sha256 -days 8000 -out ssl\manaeff.ru.pem


  3. Запускаем файл createRootCA.bat и в папке SSL получаем три файла с расширениями .key, .pem и .srl.

  4. С помощью оснастки консоли управления (MMC) «Сертификаты», полученный сертификат (файл с расширением .pem) импортируем в хранилище «Доверенные корневые сертификаты» текущего пользователя.

  5. Для генерации сертификата для сайта, создаем файл настроек server.csr.cnf. Вместо указанных здесь параметров, нужно подставить свои. Если назначение каких-то полей непонятно, смотрим справку команды openssl:
     содержимое файла
    Код: Выделить всё
    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    distinguished_name = dn

    [dn]
    C=RU
    ST=Region
    L=City
    O=Organization
    OU=Organization unit
    emailAddress=address@domain.ru
    CN = site.root.ru
     Пример для manaeff.ru:
    Код: Выделить всё
    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    distinguished_name = dn

    [dn]
    C=RU
    ST=South Ural
    L=Chelyabinsk
    O=Alexander A. Manaeff
    OU=Web site
    emailAddress=man@manaeff.ru
    CN = manaeff.ru


  6. Для создания сертификата версии X509 v3 (вместо v1, который создается по умолчанию, если не указан файл расширений), создаем файл расширений v3.ext. Вместо указанных здесь параметров, нужно подставить свои:
     содержимое файла
    Код: Выделить всё
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names

    [alt_names]
    DNS.1 = localhost
    DNS.2 = site.root.ru
    DNS.3 = www.site.root.ru
     Пример для manaeff.ru:
    Код: Выделить всё
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names

    [alt_names]
    DNS.1 = localhost
    DNS.2 = manaeff.ru
    DNS.3 = www.manaeff.ru


  7. Для генерации сертификата (дочернего сгенерированному на 3-ем шаге корневому root), который мы будем использовать для сайта, создаем командный файл (скрипт) createselfsignedcertificate.bat. Вместо указанных здесь параметров, нужно подставить свои. Если назначение каких-то полей непонятно, смотрим справку команды openssl:
     листинг скрипта
    Код: Выделить всё
    openssl req -new -sha256 -nodes -out site.root.ru.csr -newkey rsa:2048 -keyout site.root.ru.key -config server.csr.cnf

    openssl x509 -req -in site.root.ru.csr -CA ssl\root.ru.pem -CAkey ssl\root.ru.key -CAcreateserial -out site.root.ru.crt -days 365 -sha256 -extfile v3.ext
     Пример для manaeff.ru:
    Код: Выделить всё
    openssl req -new -sha256 -nodes -out manaeff.ru.csr -newkey rsa:2048 -keyout manaeff.ru.key -config server.csr.cnf

    openssl x509 -req -in manaeff.ru.csr -CA ssl\manaeff.ru.pem -CAkey ssl\manaeff.ru.key -CAcreateserial -out manaeff.ru.crt -days 7000 -sha256 -extfile v3.ext


  8. Запускаем файл createselfsignedcertificate.bat и получаем три файла с расширениями .key, .crt и .csr.

  9. Пользуемся сгенерированными сертификатами. И в Internet Explorer и в Google Chrome сайты, подписанные такими сертификатами будут отображаться как надежные (конечно, если установить на конечный компьютер в хранилище «Доверенные корневые сертификаты» текущего пользователя либо корневой сертификат либо сертификат сайта).





Примечание 1:

Утилита openssl входит в стандартную поставку MS Windows 7 и выше (возможно, входит и в XP - не проверял).




Примечание 2:

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




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










Alexander A. Manaeff©

Понравилась статья? Будем крайне признательны за репосты в соцсетях! Материально поддержать проект можно здесь

Мои странички:
ВКонтакте
Одноклассники
Youtube
Facebook
Instagram
Изображение
Изображение
Изображение
Изображение
Аватара пользователя
UncleFather
Site Admin
 
Сообщения: 1343
Зарегистрирован: 17 авг 2004 16:20, Вт



Вернуться в Администрирование Windows Server

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

cron
Alexander A Manaeff - нижняя граница
Рейтинг@Mail.ru Яндекс.Метрика Яндекс цитирования

Счетчик посещений