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 сайты, подписанные такими сертификатами будут отображаться как надежные (конечно, если установить на конечный компьютер в хранилище «Доверенные корневые сертификаты» текущего пользователя либо корневой сертификат либо сертификат сайта).


Чтобы внутри домена AD все компьютеры сразу доверяли новому сертификату, Генерируем сертификат SHA256, подписанный AD на Windows 2003.



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

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




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

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




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










Alexander A. Manaeff©

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

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



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

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

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

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

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