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, и, переведя на русский язык, получаем следующую последовательность шагов:
-
Для генерации корневого сертификата создаем файл настроек 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
Код: Выделить всё
[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
-
Для генерации корневого сертификата создаем командный файл (скрипт) 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
Код: Выделить всё
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
-
Запускаем файл createRootCA.bat и в папке SSL получаем три файла с расширениями .key, .pem и .srl.
-
С помощью оснастки консоли управления (MMC) «Сертификаты», полученный сертификат (файл с расширением .pem) импортируем в хранилище «Доверенные корневые сертификаты» текущего пользователя.
-
Для генерации сертификата для сайта, создаем файл настроек 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
Код: Выделить всё
[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
-
Для создания сертификата версии 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
Код: Выделить всё
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
-
Для генерации сертификата (дочернего сгенерированному на 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
Код: Выделить всё
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
-
Запускаем файл createselfsignedcertificate.bat и получаем три файла с расширениями .key, .crt и .csr.
-
Пользуемся сгенерированными сертификатами. И в Internet Explorer и в Google Chrome сайты, подписанные такими сертификатами будут отображаться как надежные (конечно, если установить на конечный компьютер в хранилище «Доверенные корневые сертификаты» текущего пользователя либо корневой сертификат либо сертификат сайта).
Чтобы внутри домена AD все компьютеры сразу доверяли новому сертификату, Генерируем сертификат SHA256, подписанный AD на Windows 2003.
Примечание 1:
Утилита openssl входит в стандартную поставку MS Windows 7 и выше (возможно, входит и в XP - не проверял).
Примечание 2:
Для распространения сертификатов на клиентских компьютерах в домене пользуемся доменными политиками, а за пределами домена, для этой цели можно создать скрипт. Как создавать такие скрипты читаем в статье Добавляем сертификат в корневые из командной строки
[b][size=150]Задача:[/size][/b]
Необходимо сгенерировать самоподписанный сертификат SHA256.
[b][size=120]Почему самоподписанный?[/size][/b] - Потому что собственного центра сертификации не имеется, а платить за сертификат не хочется.
[b][size=120]Почему SHA256?[/size][/b] - Потому что хоть SHA1 - одна из наиболее популярных функций хеширования находится на грани исчезновения. Алгоритм SHA1 был разработан в далеком 1995 году, а его первые слабые стороны обнаружили в 2005-м - почти 10 лет назад. Расчеты, проведенные два года назад, показали, что возможности взлома SHA1 значительно возросли. В связи с этим еще в ноябре прошлого года (2013) Microsoft заявил о том, что начиная с 2016 года компания полностью откажется от поддержки сертификатов, основанных на SHA1.
Кроме того, Google заявила о том, что компания будет постепенно отказываться от поддержки SHA1 в новых версиях наиболее используемого браузера Chrome. В первую очередь это отразится на том, что веб-сайты, использующие SSL сертификаты с хешированием SHA1 и сроком действия, заканчивающемся в 2016 году и позже, будут отмечены в браузере как ненадежные.
[b][size=120]Почему бы просто не сгенерировать сертификат в Windows 7[/size][/b] или в поздних версиях Windows командой [code]openssl req -newkey rsa:2048 -nodes -sha256 -keyout my.domain.ru.key -x509 -days 3650 -out my.domain.ru.crt[/code] - Потому что, начиная с 58-й версии, Google Chrome при использовании SSL сочтет сайт ненадежным и будет выдавать ошибку [b][i]NET::ERR_CERT_COMMON_NAME_INVALID[/i][/b] [b][i][missing_subjectAltName][/i][/b] для самоподписанных сертификатов. Дело в том, что, начиная с 58-й версии, Chrome требует, чтобы SSL сертификаты использовали [url=https://en.wikipedia.org/wiki/Subject_Alternative_Name]SAN (Subject Alternative Name)[/url] вместо устаревшего [url=https://ru.wikipedia.org/wiki/X.509]Common Name (CN)[/url], из-за [url=https://groups.google.com/a/chromium.org/forum/#!msg/security-dev/IGT2fLJrAeo/csf_1Rh1AwAJ]прекращения поддержки CN[/url].
Поэтому, если сертификат сайта имеет только атрибут CN, то такой сайт будет считаться ненадежным.
[hr][/hr]
[b][size=150]Решение:[/size][/b]
Суммируя все вышеуказанные факторы, мы видим, что нам нужен самоподписанный сертификат SHA256 с заполненным полем SAN.
Создание такого сертификата хорошо описано в статье [url=https://alexanderzeitler.com/articles/Fixing-Chrome-missing_subjectAltName-selfsigned-cert-openssl/]Fixing Chrome 58+ [missing_subjectAltName] with openssl when using self signed certificates[/url].
Подкорректировав этот алгоритм для Windows, и, переведя на русский язык, получаем следующую последовательность шагов:
[list=1][*] Для генерации корневого сертификата создаем файл настроек [b][i]set.txt[/i][/b]. Вместо указанных здесь параметров, нужно подставить свои. Если назначение каких-то полей непонятно, смотрим справку команды [b][i]openssl[/i][/b]:[spoiler title=содержимое файла][code][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[/code][/spoiler][spoiler title=Пример для manaeff.ru:][code][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[/code][/spoiler]
[*] Для генерации корневого сертификата создаем командный файл (скрипт) [b][i]createRootCA.bat[/i][/b], подставляя свои параметры, со следующим содержанием:[spoiler][code]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[/code][/spoiler][spoiler title=Пример для manaeff.ru:][code]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[/code][/spoiler]
[*] Запускаем файл [b][i]createRootCA.bat[/i][/b] и в папке [b][i]SSL[/i][/b] получаем три файла с расширениями [b][i].key[/i][/b], [b][i].pem[/i][/b] и [b][i].srl[/i][/b].
[*] С помощью оснастки консоли управления (MMC) «Сертификаты», полученный сертификат (файл с расширением [b][i].pem[/i][/b]) импортируем в хранилище «Доверенные корневые сертификаты» текущего пользователя.
[*] Для генерации сертификата для сайта, создаем файл настроек [b][i]server.csr.cnf[/i][/b]. Вместо указанных здесь параметров, нужно подставить свои. Если назначение каких-то полей непонятно, смотрим справку команды [b][i]openssl[/i][/b]:[spoiler title=содержимое файла][code][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
[/code][/spoiler][spoiler title=Пример для manaeff.ru:][code][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
[/code][/spoiler]
[*] Для создания сертификата версии X509 v3 (вместо v1, который создается по умолчанию, если не указан файл расширений), создаем файл расширений [b][i]v3.ext[/i][/b]. Вместо указанных здесь параметров, нужно подставить свои:[spoiler title=содержимое файла][code]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
[/code][/spoiler][spoiler title=Пример для manaeff.ru:][code]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[/code][/spoiler]
[*] Для генерации сертификата (дочернего сгенерированному на 3-ем шаге корневому [b][i]root[/i][/b]), который мы будем использовать для сайта, создаем командный файл (скрипт) [b][i]createselfsignedcertificate.bat[/i][/b]. Вместо указанных здесь параметров, нужно подставить свои. Если назначение каких-то полей непонятно, смотрим справку команды [b][i]openssl[/i][/b]:[spoiler title=листинг скрипта][code]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[/code][/spoiler][spoiler title=Пример для manaeff.ru:][code]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[/code][/spoiler]
[*] Запускаем файл [b][i]createselfsignedcertificate.bat[/i][/b] и получаем три файла с расширениями [b][i].key[/i][/b], [b][i].crt[/i][/b] и [b][i].csr[/i][/b].
[*] Пользуемся сгенерированными сертификатами. И в [i]Internet Explorer[/i] и в [i]Google Chrome[/i] сайты, подписанные такими сертификатами будут отображаться как надежные (конечно, если установить на конечный компьютер в хранилище «Доверенные корневые сертификаты» текущего пользователя либо корневой сертификат либо сертификат сайта).[/list]
Чтобы внутри домена AD все компьютеры сразу доверяли новому сертификату, [url=http://manaeff.ru/forum/viewtopic.php?p=2276#p2276]Генерируем сертификат SHA256, подписанный AD на Windows 2003[/url].
[hr][/hr]
[b][size=150]Примечание 1: [/size][/b]
Утилита [b][i]openssl[/i][/b] входит в стандартную поставку MS Windows 7 и выше (возможно, входит и в XP - не проверял).
[hr][/hr]
[b][size=150]Примечание 2: [/size][/b]
Для распространения сертификатов на клиентских компьютерах в домене пользуемся доменными политиками, а за пределами домена, для этой цели можно создать скрипт. Как создавать такие скрипты читаем в статье [url=http://manaeff.ru/forum/viewtopic.php?p=1987#p1987]Добавляем сертификат в корневые из командной строки[/url]