Пример настройки двухфакторной аутентификации в ОС Windows

Пример настройки двухфакторной аутентификации в ОС Windows Сертификаты

Генерация ключа

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

Ключевой алгоритм

OpenSSL поддерживает ключи RSA, DSA и ECDSA, но не все типы безоговорочно подходят для любого сценария использования. Например, в качестве ключа веб-сервера повсеместно используется RSA, поскольку ключи DSA по существу ограничены 1024 битами (Internet Explorer не поддерживает ничего более стойкого), а ключи ECDSA ещё не получили широкой поддержки УЦ. Для SSH везде используются DSA и RSA, поскольку ECDSA может не поддерживаться всеми клиентами.

Размер ключа

Размер ключа по умолчанию может быть небезопасным, поэтому его всегда следует настраивать явно. Например, размер по умолчанию для ключей RSA всего 512 бит, что попросту небезопасно. Если в наши дни вы будете использовать на своём сервере ключ длиной 512 бит, злоумышленник, получив ваш сертификат, может простым перебором (методом “грубой силы”) подобрать ваш закрытый ключ, после чего он или она сможет выдавать себя за ваш веб-сайт. В наши дни безопасными считаются ключи RSA в 2048 бит, их и нужно использовать. Также необходимо использовать ключи DSA длиной 2048 бит и не менее 256 бит для ECDSA.

Кодовая фраза

Использовать кодовую фразу (passphrase) с ключом необязательно, но настоятельно рекомендуется. Защищённые ключи можно безопасно хранить, транспортировать и создавать резервные копии. С другой стороны, такие ключи неудобны, поскольку без ввода кодовой фразы их использовать нельзя. Например, запрос на ввод кодовой фразы может возникать каждый раз, когда вы захотите перезапустить ваш веб-сервер. В большинстве случаев это либо слишком неудобно, либо создаёт неприемлемые условия для доступности сервисов. Кроме того, использование защищённых ключей в рабочей среде на самом деле не сильно повышает безопасность (если вообще повышает). Это связано с тем, что после первоначальной активации закрытые ключи хранятся в незащищённом виде в памяти программы; злоумышленник, проникнувший на сервер, может получить ключи оттуда, приложив при этом лишь немного больше усилий. Так что кодовые фразы следует рассматривать только в качестве механизма защиты закрытого ключа, пока он не установлен в рабочей среде. Другими словами, нет ничего страшного в том, чтобы в рабочей среде хранить кодовые фразы рядом с ключами. Если же в рабочей среде вам требуется повышенная безопасность, стоит рассмотреть вариант с инвестированием в аппаратные решения7.

Для генерации ключа RSA используйте команду genrsa:

$ openssl genrsa -aes128 -out fd.key 2048
Generating RSA private key, 2048 bit long modulus
....   
...................................................................................   
e is 65537 (0x10001)
Enter pass phrase for fd.key: ****************
Verifying - Enter pass phrase for fd.key: ****************

Здесь я указал, что ключ будет защищён с помощью AES-128. Также вы можете использовать AES-192 или AES-256 (параметры -aes192 и -aes256, соответственно), но лучше воздержаться от применения других алгоритмов (DES, 3DES и SEED).

Предупреждение: Значение e, которое вы видите в выводе, относится к открытой экспоненте (public exponent), которая по умолчанию установлена в 65537. Это так называемая короткая открытая экспонента, и она значительно повышает производительность верификации RSA.

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

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

$ cat fd.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,01EC21976A463CE36E9DB59FF6AF689A

vERmFJzsLeAEDqWdXX4rNwogJp y95uTnw bOjWRw1 O1qgGqxQXPtH3LWDUz1Ym
mkpxmIwlSidVSUuUrrUzIL V21EJ1W9iQ71SJoPOyzX7dYX5GCAwQm9Tsb40FhV/
[21 lines removed...]
4phGTprEnEwrffRnYrt7khQwrJhNsw6TTtthMhx/UCJdpQdaLW/TuylaJMWL1JRW
i321s5me5ej6Pr4fGccNOe7lZK 563d7v5znAx Wo1C F7YgF g8LOQ8emC 6AVV
-----END RSA PRIVATE KEY-----

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

$ openssl rsa -text -in fd.key
Enter pass phrase for fd.key: ****************
Private-Key: (2048 bit)
modulus:
    00:9e:57:1c:c1:0f:45:47:22:58:1c:cf:2c:14:db:
    [...]
publicExponent: 65537 (0x10001)
privateExponent:
    1a:12:ee:41:3c:6a:84:14:3b:be:42:bf:57:8f:dc:
    [...]
prime1:
    00:c9:7e:82:e4:74:69:20:ab:80:15:99:7d:5e:49:
    [...]
prime2:
    00:c9:2c:30:95:3e:cc:a4:07:88:33:32:a5:b1:d7:
    [...]
exponent1:
    68:f4:5e:07:d3:df:42:a6:32:84:8d:bb:f0:d6:36:
    [...]
exponent2:
    5e:b8:00:b3:f4:9a:93:cc:bc:13:27:10:9e:f8:7e:
    [...]
coefficient:
    34:28:cf:72:e5:3f:52:b2:dd:44:56:84:ac:19:00:
    [...]
writing RSA key
-----BEGIN RSA PRIVATE KEY-----
[...]
-----END RSA PRIVATE KEY-----

Если вам понадобится иметь отдельно только открытую часть ключа, выделить её можно следующей командой rsa:

$ openssl rsa -in fd.key -pubout -out fd-public.key
Enter pass phrase for fd.key: ****************

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

$ cat fd-public.key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnlccwQ9FRyJYHM8sFNsY
PUHJHJzhJdwcS7kBptutf/L6OvoEAzCVHi/m0qAA4QM5BziZgnvv FNnE3sgE5pz
iovEHJ3C959mNQmpvnedXwfcOIlbrNqdISJiP0js6mDCzYjSO1NCQoy3UpYwvwj7
0ryR1F abARehlts/Xs/PtX3VamrljiJN6JNgFICy3ZvEhLZEKxR7oob7TnyZDrj
IHxBbqPNzeiqLCFLFPGgJPa0cH8DdovBTesvu7wr/ecsf8CYyUCdEwGkZh9DKtdU
HFa9H8tWW2mX6uwYeHCnf2HTw0E8vjtOb8oYQxlQxtL7dpFyMgrpPOoOVkZZW/P0
NQIDAQAB
-----END PUBLIC KEY-----

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

Генерация ключа DSA происходит в два этапа: на первом создаются параметры DSA, а на втором — ключ. Можно выполнять их последовательно один за другим, но мне больше нравится использовать следующие две команды как одну:

$ openssl dsaparam -genkey 2048 | openssl dsa -out dsa.key -aes128
Generating DSA parameters, 2048 bit long prime
This could take some time
[...]
read DSA key
writing DSA key
Enter PEM pass phrase: ****************
Verifying - Enter PEM pass phrase: ****************

Этот подход позволяет мне генерировать защищённый кодовой фразой ключ, не оставляя при этом никаких временных файлов (с параметрами DSA) и/или временных ключей на диске.

Для ключей ECDSA процесс аналогичен, за исключением того, что отсутствует возможность создать ключи произвольных размеров. Вместо этого для каждого ключа вы выбираете именованную кривую (named curve), которая контролирует размер ключа, а также другие параметры EC. В следующем примере создаётся 256-битный ключ ECDSA с использованием именованной кривой secp256r1:

$ openssl ecparam -genkey -name secp256r1 | openssl ec -out ec.key -aes128
using curve name prime256v1 instead of secp256r1
read EC key
writing EC key
Enter PEM pass phrase: ****************
Verifying - Enter PEM pass phrase: ****************

OpenSSL поддерживает много именованных кривых (полный список можно получить с помощью параметра -list_curves), но для ключей веб-сервера выбор ограничен лишь двумя кривыми, которые поддерживаются всеми основными браузерами: secp256r1 (в OpenSSL используется имя prime256v1) и secp384r1.

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

Ключевые слова

Ключевые слова набора шифров являются базовыми строительными блоками конфигурации наборов шифров. Каждое имя набора (например, RC4-SHA) является ключевым словом, с помощью которого выбирается ровно один набор. Все остальные ключевые слова отбирают группу наборов в соответствии с некоторыми критериями.

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

Групповые ключевые слова — это сокращения для выбора часто используемых наборов шифров. Например, при наличии ключевого слова HIGH будут отобраны только очень стойкие наборы шифров.

Таблица 1.1. Групповые ключевые слова

Ключевое словоЗначение
DEFAULTСписок шифров по умолчанию. Определяется во время компиляции, для OpenSSL 1.0.0, как правило, ALL:!aNULL:!eNULL. При настройке отбора наборов шифров в приложении это ключевое слово должно быть указано первым в конфигурационной строке.
COMPLEMENTOFDEFAULTШифры, входящие в ALL, но не задействованные по умолчанию. В настоящий момент это ADH. Обратите внимание, что это правило не распространяется на шифры eNULL, которые не входят в ALL (если это необходимо, используйте COMPLEMENTOFALL).
ALLВсе наборы шифров, кроме шифров eNULL, которые должны быть включены явно.
COMPLEMENTOFALLНаборы шифров, не включённые в ALL, в настоящий момент это eNULL.
HIGHНаборы шифров “высокой” криптографической стойкости. В настоящий момент это означает наборы шифров с ключами, имеющими уровень криптостойкости более 128 бит, а также некоторые наборы шифров с уровнем криптостойкости в 128 бит.
MEDIUMНаборы шифров “средней” криптографической стойкости, в настоящий момент некоторые из них используют шифрование с уровнем криптостойкости 128 бит.
LOWНаборы шифров “низкой” криптографической стойкости. В настоящее время это те из них, в которых используются криптографические алгоритмы с уровнем криптостойкости 64 или 56 бит, за исключением экспортных наборов шифров. Небезопасные.
EXP, EXPORTЭкспортные криптографические алгоритмы. Включая алгоритмы с уровнем криптостойкости 40 и 56 бит. Небезопасные.
EXPORT40Экспортные алгоритмы с уровнем криптостойкости 40 бит. Небезопасные.
EXPORT56Экспортные алгоритмы с уровнем криптостойкости 56 бит. Небезопасные.
TLSv1, SSLv3, SSLv2Наборы шифров TLS 1.0, SSL 3 и SSL 2, соответственно.
Про сертификаты:  Избавляемся от назойливых предупреждений при входе на терминальный сервер / Хабр

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

Таблица 1.2. Ключевые слова алгоритмов хэширования

Ключевое словоЗначение
MD5Наборы шифров, использующие MD5. Устаревшие и небезопасные.
SHA, SHA1Наборы шифров, использующие SHA1.
SHA256 (v1.0.0 )Наборы шифров, использующие SHA256.
SHA384 (v1.0.0 )Наборы шифров, использующие SHA384.

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

При использовании так называемых наборов AEAD (Authenticated Encryption with Associated Data), протоколу не требуется обеспечивать дополнительную проверку целостности. По этой причине вы не сможете использовать ключевые слова алгоритмов хэширования для выбора наборов AEAD (в настоящее время это наборы, в названии которых присутствует GCM).

В названиях таких наборов используются суффиксы SHA256 и SHA384, но в данном случае они указывают на хэш-функции, используемые для построения используемой с набором псевдослучайной функции (что вносит некоторую путаницу).

С помощью ключевых слов аутентификации наборы выбираются на основании тех методов аутентификации, которые они используют. Сегодня для аутентификации практически во всех публичных сертификатах используется RSA. Со временем мы, вероятно, увидим очень медленный прирост использования сертификатов Elliptic Curve (ECDSA).

Табица 1.3. Ключевые слова аутентификации

Ключевое словоЗначение
aDHНаборы шифров, фактически использующие аутентификацию DH, то есть сертификаты содержат ключи DH. (v1.0.2 )
aDSS, DSSНаборы шифров, использующие аутентификацию DSS, то есть сертификаты содержат ключи DSS.
aECDH (v1.0.0 )Наборы шифров, использующие аутентификацию ECDH.
aECDSA (v1.0.0 )Наборы шифров, использующие аутентификацию ECDSA.
aNULLНаборы шифров, не предлагающие аутентификацию. В настоящее время это анонимные алгоритмы DH. Небезопасные.
aRSAНаборы шифров, использующие аутентификацию RSA, то есть сертификаты содержат ключи RSA.
PSKНаборы шифров, использующие аутентификацию PSK (Pre-Shared Key).
SRPНаборы шифров, использующие аутентификацию SRP (Secure Remote Password).

С помощью ключевых слов обмена ключами наборы выбираются на основании алгоритма обмена ключами. Когда речь заходит о наборах с эфемерным обменом по протоколу Диффи-Хеллмана, разработчики OpenSSL непоследовательны в именовании наборов и ключевых слов.

В названиях наборов эфемерные алгоритмы обмена ключами, как правило обозначаются буквой E на конце названия алгоритма (например, ECDHE-RSA-RC4-SHA и DHE-RSA-AES256-SHA), а в ключевых словах отбора буква E указывается в начале (например, EECDH и EDH).

Таблица 1.4. Ключевые слова обмена ключами

Ключевое словоЗначение
ADHНаборы шифров с анонимным обменом DH. Небезопасные.
AECDH (v1.0.0 )Наборы шифров с анонимным обменом ECDH. Небезопасные.
DHНаборы шифров, использующие обмен DH (в том числе эфемерный и анонимный обмен DH).
ECDH (v1.0.0 )Наборы шифров, использующие обмен ECDH (в том числе эфемерный и анонимный обмен ECDH).
EDH (v1.0.0 )Наборы шифров, использующие эфемерное согласование ключей DH.
EECDH (v1.0.0 )Наборы шифров, использующие эфемерный обмен ECDH.
kECDH (v1.0.0 )Наборы шифров, использующие эфемерное согласование ключей ECDH.
kEDHНаборы шифров, использующие эфемерное согласование ключей DH (включая анонимный обмен DH).
kEECDH (v1.0.0 )Наборы шифров, использующие эфемерное согласование ключей ECDH (включая анонимный обмен ECDH).
kRSA, RSAНаборы шифров, использующие алгоритм обмена ключами RSA.

С помощью ключевых слов шифров наборы выбираются на основании используемых ими шифров.

Таблица 1.5. Ключевые слова шифров

Ключевое словоЗначение
3DESНаборы шифров, использующие Triple DES. Устаревшие и небезопасные.
AESНаборы шифров, использующие AES.
AESGCM (v1.0.0 )Наборы шифров, использующие AES GCM.
CAMELLIAНаборы шифров, использующие Camellia. Устаревшие.
DESНаборы шифров, использующие Single DES. Устаревшие и небезопасные.
eNULL, NULLНаборы шифров не использующие шифрование. Небезопасные.
IDEAНаборы шифров, использующие IDEA. Устаревшие.
RC2Наборы шифров, использующие RC2. Устаревшие и небезопасные.
RC4Наборы шифров, использующие RC4. Небезопасные.
SEEDНаборы шифров, использующие SEED. Устаревшие.

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

Таблица 1.6. Прочие ключевые слова

Ключевое словоЗначение
@STRENGTHСортирует текущий список наборов шифров в порядке длины ключа алгоритма шифрования..
aGOSTНаборы шифров, использующие аутентификацию GOST R 34.10 (как 2001, так и 94). Для работы требуется модуль обеспечения совместимости с ГОСТ.
aGOST01Наборы шифров, использующие аутентификацию GOST R 34.10-2001.
aGOST94Наборы шифров, использующие аутентификацию GOST R 34.10-94. Устаревшие. Вместо них используйте GOST R 34.10-2001.
kGOSTНаборы шифров, использующие обмен ключами VKO 34.10, определённый в RFC 4357.
GOST94Наборы шифров, использующие HMAC, основанный на GOST R 34.11-94.
GOST89MACНаборы шифров, использующие GOST 28147-89 MAC вместо HMAC.

Собираем всё вместе

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

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

  1. Используются только стойкие шифры с фактическим уровнем криптостойкости 128 бит и выше (это исключает 3DES).

  2. Используются только наборы, обеспечивающие строгую аутентификацию (это исключает анонимные и экспортные наборы).

  3. Не используются любые наборы, полагающиеся на уязвимые исходные алгоритмы (например, MD5).

  4. Реализуется надежная поддержка прямой секретности, независимо от того, какие ключи и протоколы применяются. С этим требованием связано небольшое снижение производительности, потому что не будет возможности использовать быстрый обмен ключами RSA. Чтобы минимизировать это снижение, мы будем отдавать приоритет ECDHE, которые значительно быстрее, чем DHE.

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

  6. При работе с клиентами TLS 1.2 предпочтение отдаётся наборам AES GCM, обеспечивающим наилучший уровень безопасности, который только может предложить TLS.

  7. Поскольку недавно выяснилось, что шифры RC4 слабее, чем это считалось ранее11, поместим их в конец нашего списка. Это почти также эффективно, как и полное их отключение. Хотя BEAST всё ещё может быть проблемой в некоторых ситуациях, предполагается, что о минимизации этой атаки позаботились на стороне клиента.

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

Про сертификаты:  Keystore в Java | dev64

Слабые наборы могут быть идентифицированы следующими ключевыми словами:

  • aNULL; без аутентификации

  • eNULL; без шифрования

  • LOW; наборы с низкой стойкостью

  • 3DES; фактическая стойкость — 108 бит

  • MD5; наборы, использующие MD5

  • EXP; устаревшие экспортные наборы

Для уменьшения количества выводимых наборов я собираюсь полностью устранить все наборы DSA, PSK, SRP и ECDH, поскольку они используются крайне редко. Также я удалю шифры IDEA и SEED, которые устарели, но все еще могут поддерживаться OpenSSL. В своей конфигурации я также не буду использовать CAMELLIA, потому что он медленнее и не так хорошо поддерживается, как AES (например, на практике нет вариантов GCM или ECDHE).

!aNULL !eNULL !LOW !3DES !MD5 !EXP !DSS !PSK !SRP !kECDH !CAMELLIA !IDEA !SEED

Теперь мы можем сосредоточиться на том, чего хотим достичь. Поскольку нашим приоритетом является прямая секретность, мы можем начать с ключевых слов kEECDH и kEDH:

kEECDH kEDH !aNULL !eNULL !LOW !3DES !MD5 !EXP !DSS !PSK !SRP !kECDH !CAMELLIA !IDEA ↩
!SEED

Если протестировать эту конфигурацию, обнаружится, что наборы RSA перечислены первыми, хотя мы хотели бы видеть первыми ECDSA:

ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2 Kx=ECDH Au=RSA   Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384        TLSv1.2 Kx=ECDH Au=RSA   Enc=AES(256)    Mac=SHA384
ECDHE-ECDSA-AES256-SHA384      TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256)    Mac=SHA384
ECDHE-RSA-AES256-SHA           SSLv3   Kx=ECDH Au=RSA   Enc=AES(256)    Mac=SHA1
ECDHE-ECDSA-AES256-SHA         SSLv3   Kx=ECDH Au=ECDSA Enc=AES(256)    Mac=SHA1
ECDHE-RSA-AES128-GCM-SHA256    TLSv1.2 Kx=ECDH Au=RSA   Enc=AESGCM(128) Mac=AEAD
[...]

Чтобы это исправить, поместим kEECDH ECDSA в начало конфигурации:

kEECDH ECDSA kEECDH kEDH !aNULL !eNULL !LOW !3DES !MD5 !EXP !DSS !PSK !SRP !kECDH ↩
!CAMELLIA !IDEA !SEED

Следующая проблема — то, что более старые наборы (SSL 3) перемешаны с более новыми (TLS 1.2). Для обеспечения максимальной безопасности хотелось бы, чтобы клиенты, поддерживающие TLS 1.2, всегда согласовывали именно TLS 1.2. Чтобы переместить более старые наборы в конец списка, я использую ключевое слово SHA (наборы TLS 1.2 всегда используют либо SHA256, либо SHA384, то есть под это условие они не попадут):

kEECDH ECDSA kEECDH kEDH  SHA !aNULL !eNULL !LOW !3DES !MD5 !EXP !DSS !PSK !SRP !kECDH ↩
!CAMELLIA !IDEA !SEED

В таком виде конфигурация практически полностью отвечает нашим требованиям. Осталось поместить оставшиеся ещё неохваченными безопасные наборы в конец списка; сделаем это с помощью ключевого слова HIGH. Кроме того, нужно удостовериться, что наборы RC4 являются последними; с помощью ключевого слова RC4 мы переместим уже существующие наборы RC4 в конец списка, а с помощью ключевого слова RC4 добавим туда же ещё незадействованные наборы RC4:

kEECDH ECDSA kEECDH kEDH HIGH  SHA  RC4 RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !DSS ↩
!PSK !SRP !kECDH !CAMELLIA !IDEA !SEED

Давайте рассмотрим окончательный результат, который состоит из 28 наборов. В первой группе у нас наборы TLS 1.2:

ECDHE-ECDSA-AES256-GCM-SHA384  TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-SHA384      TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256)    Mac=SHA384
ECDHE-ECDSA-AES128-GCM-SHA256  TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
ECDHE-ECDSA-AES128-SHA256      TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(128)    Mac=SHA256
ECDHE-RSA-AES256-GCM-SHA384    TLSv1.2 Kx=ECDH Au=RSA   Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384        TLSv1.2 Kx=ECDH Au=RSA   Enc=AES(256)    Mac=SHA384
ECDHE-RSA-AES128-GCM-SHA256    TLSv1.2 Kx=ECDH Au=RSA   Enc=AESGCM(128) Mac=AEAD
ECDHE-RSA-AES128-SHA256        TLSv1.2 Kx=ECDH Au=RSA   Enc=AES(128)    Mac=SHA256
DHE-RSA-AES256-GCM-SHA384      TLSv1.2 Kx=DH   Au=RSA   Enc=AESGCM(256) Mac=AEAD
DHE-RSA-AES256-SHA256          TLSv1.2 Kx=DH   Au=RSA   Enc=AES(256)    Mac=SHA256
DHE-RSA-AES128-GCM-SHA256      TLSv1.2 Kx=DH   Au=RSA   Enc=AESGCM(128) Mac=AEAD
DHE-RSA-AES128-SHA256          TLSv1.2 Kx=DH   Au=RSA   Enc=AES(128)    Mac=SHA256
AES256-GCM-SHA384              TLSv1.2 Kx=RSA  Au=RSA   Enc=AESGCM(256) Mac=AEAD
AES256-SHA256                  TLSv1.2 Kx=RSA  Au=RSA   Enc=AES(256)    Mac=SHA256
AES128-GCM-SHA256              TLSv1.2 Kx=RSA  Au=RSA   Enc=AESGCM(128) Mac=AEAD
AES128-SHA256                  TLSv1.2 Kx=RSA  Au=RSA   Enc=AES(128)    Mac=SHA256

Сначала идут наборы ECDHE, затем — DHE, а за ними уже все остальные наборы TLS 1.2. В каждой из подгрупп приоритет имеют ECDSA и GCM.

Во второй группе представлены наборы, которые будут использоваться клиентами TLS 1.0. Приоритеты здесь такие же, как и в первой группе:

ECDHE-ECDSA-AES256-SHA         SSLv3   Kx=ECDH Au=ECDSA Enc=AES(256)    Mac=SHA1
ECDHE-ECDSA-AES128-SHA         SSLv3   Kx=ECDH Au=ECDSA Enc=AES(128)    Mac=SHA1
ECDHE-RSA-AES256-SHA           SSLv3   Kx=ECDH Au=RSA   Enc=AES(256)    Mac=SHA1
ECDHE-RSA-AES128-SHA           SSLv3   Kx=ECDH Au=RSA   Enc=AES(128)    Mac=SHA1
DHE-RSA-AES256-SHA             SSLv3   Kx=DH   Au=RSA   Enc=AES(256)    Mac=SHA1
DHE-RSA-AES128-SHA             SSLv3   Kx=DH   Au=RSA   Enc=AES(128)    Mac=SHA1
DHE-RSA-SEED-SHA               SSLv3   Kx=DH   Au=RSA   Enc=SEED(128  ) Mac=SHA1
AES256-SHA                     SSLv3   Kx=RSA  Au=RSA   Enc=AES(256)    Mac=SHA1
AES128-SHA                     SSLv3   Kx=RSA  Au=RSA   Enc=AES(128)    Mac=SHA1

И наконец, наборы RC4 представлены в конце списка:

ECDHE-ECDSA-RC4-SHA            SSLv3   Kx=ECDH Au=ECDSA Enc=RC4(128)    Mac=SHA1
ECDHE-RSA-RC4-SHA              SSLv3   Kx=ECDH Au=RSA   Enc=RC4(128)    Mac=SHA1
RC4-SHA                        SSLv3   Kx=RSA  Au=RSA   Enc=RC4(128)    Mac=SHA1

Создание сертификатов с помощью программы openssl

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

# mkdir /root/ca

# cd /root/ca

# mkdir certs crl newcerts private

# chmod 700 private

# touch index.txt

2. Сгенерируем приватный ключ.

# openssl genrsa -out /root/ca/private/ca_key.pem 2048

3. Создадим сертификат CA для этого приватного ключа

# openssl req -new -x509 -days 3650 -key /root/ca/private/ca_key.pem -out /root/ca/certs/ca.crt

Выводкоманды

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [AU]:RU

State or Province Name (full name) [Some-State]:NSO

Locality Name (eg, city) []:Novosibirsk

Organization Name (eg, company) [Internet Widgits Pty Ltd]:Kraftec

Organizational Unit Name (eg, section) []:

Common Name (e.g. server FQDN or YOUR name) []:www.kraftec.net

Email Address []:dit@kraftec.net

Для создания сертификата SSL для Captive портала и Веб-консоли необходимо создать файл конфигурации

Создадим конфигурационный файл для OpenSSL.

# touch /root/ca/openssl.cnf

Добавим в данный файл следующие блоки

##########################################################################

[ ca ]

default_ca = CA_default

[ CA_default ]

dir = /root/ca

certs = $dir/certs

crl_dir = $dir/crl

database = $dir/index.txt

new_certs_dir = $dir/newcerts

certificate = $certs/ca.crt

private_key = $dir/private/ca_key.pem

serial = $dir/serial

crlnumber = $dir/crlnumber

crl = $dir/crl/crl.pem

RANDFILE = $dir/private/.rand

x509_extensions = usr_cert

name_opt = ca_default

cert_opt = ca_default

crl_extensions = crl_ext

default_days = 365

default_crl_days= 30

default_md = sha256

preserve = no

policy = policy_match

[ policy_match ]

countryName = match

stateOrProvinceName = match

organizationName = match

organizationalUnitName = optional

commonName = supplied

emailAddress = optional

[ req ]

default_bits = 2048

distinguished_name = req_distinguished_name

x509_extensions = v3_ca

string_mask = utf8only

[ req_distinguished_name ]

countryName = Country Name (2 letter code)

countryName_default = RU

countryName_min = 2

countryName_max = 2

stateOrProvinceName = State or Province Name (full name)

stateOrProvinceName_default = NSO

localityName = Locality Name (eg, city)

localityName_default = Novosibirsk

0.organizationName = Organization Name (eg, company)

0.organizationName_default = Kraftec

organizationalUnitName = Organizational Unit Name (eg, section)

#organizationalUnitName_default =

commonName = Common Name (e.g. server FQDN or YOUR name)

commonName_max = 64

emailAddress = Email Address

emailAddress_max = 64

[ usr_cert ]

basicConstraints=CA:FALSE

nsCertType = server

keyUsage = nonRepudiation, digitalSignature, keyEncipherment

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid,issuer

subjectAltName=DNS:auth.kraftec.net, DNS:logout.kraftec.net, DNS:block.kraftec.net, DNS:ftpclient.kraftec.net, DNS:sslvpn.kraftec.net

[ v3_ca ]

subjectKeyIdentifier=hash

authorityKeyIdentifier=keyid:always,issuer

basicConstraints = critical,CA:true

keyUsage = nonRepudiation, digitalSignature, keyEncipherment

[ crl_ext ]

authorityKeyIdentifier=keyid:always

##########################################################################

Сгенерируем ключ для SSL сертификата Captive портала

# openssl genrsa -out /root/ca/private/Captiv_key.pem 2048

Сгенерируем ключ для SSL сертификата Веб-консоли

# openssl genrsa -out /root/ca/private/Web_key.pem 2048

Сгенерируем запрос на SSL сертификат Captive портала

# openssl req -new -key /root/ca/private/Captiv_key.pem -config /root/ca/openssl.cnf -out /root/ca/Captive.csr

Выводкоманды

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [RU]:

State or Province Name (full name) [NSO]:

Locality Name (eg, city) [Novosibirsk]:

Organization Name (eg, company) [Kraftec]:

Organizational Unit Name (eg, section) []:

Common Name (e.g. server FQDN or YOUR name) []:auth.kraftec.net

Email Address []:dit@kraftec.net

Про сертификаты:  Бложег: Генерация запроса на сертификат и загрузка сертификата в JKS

Подпишем полученный запрос с помощью сертификата УЦ.

# openssl x509 -req -days 365 -CA /root/ca/certs/ca.crt -CAkey /root/ca/private/ca_key.pem -extfile /root/ca/openssl.cnf -extensions usr_cert -in Captive.csr -out Captive.crt

Вывод команды

Signature ok

subject=/C=RU/ST=NSO/L=Novosibirsk/O=Kraftec/CN=auth.kraftec.net/emailAddress=dit@kraftec.net

Getting CA Private Key

Сгенерируем запрос на SSL сертификат Веб-консоли

Предварительно исправим конфигурационный файл в расширении usr_cert изменим параметр на subjectAltName=DNS:utm.kraftec.net

# openssl req -new -key /root/ca/private/Web_key.pem -config /root/ca/openssl.cnf -out /root/ca/Web.csr

Выводкоманды

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter ‘.’, the field will be left blank.

—–

Country Name (2 letter code) [RU]:

State or Province Name (full name) [NSO]:

Locality Name (eg, city) [Novosibirsk]:

Organization Name (eg, company) [Kraftec]:

Organizational Unit Name (eg, section) []:

Common Name (e.g. server FQDN or YOUR name) []:utm.kraftec.net

Email Address []:dit@kraftec.net

Подпишем полученные запросы с помощью сертификата УЦ.

# openssl x509 -req -days 365 -CA /root/ca/certs/ca.crt -CAkey /root/ca/private/ca_key.pem -extfile /root/ca/openssl.cnf -extensions usr_cert -in Web.csr -out Web.crt

Вывод команды

Signature ok

subject=/C=RU/ST=NSO/L=Novosibirsk/O=Kraftec/CN=utm.kraftec.net/emailAddress=dit@kraftec.net

Getting CA Private Key

Импортируем данные сертификаты и приватные ключи в UserGate в раздел сертификаты.

Сертификату ca.crt назначим роль SSL дешифрование

Сертификату Captive.crt назначим роль SSL captive-портала

Сертификату Web.crt назначим роль SSL веб-консоли

На компьютеры пользователей установим сертификат ca.crt в хранилище Доверенные корневые центры сертификации.

Установка ssl сертификата в microsoft iis 10

В данной статье описан Импорт SSL сертификата в IIS 10, выпуск SSL сертификата был описан ранее. Для импорта нам потребуется конвертировать сертификат из PEM в PFX. Для этого используем OpenSSL на сервере, если его нет или вы не знаете его команд, можно использовать онлайн Конвертер или его аналоги.

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

Пример настройки двухфакторной аутентификации в ОС Windows

Для надежности заполняем PFX Password и запоминаем/записываем пароль (желательно символьно-числовой), без него сертификат не установить.

Импорт SSL сертификата

Поиском открываем консоль Microsoft Management Console (MMC), достаточно ввести mmc и ее нам найдет.

В окне консоли «Файл» > «Добавить/удалить оснастку»

Пример настройки двухфакторной аутентификации в ОС Windows

Далее, в окне «Добавление и удаление оснасток» на панели «Доступные оснастки» (слева) выберите «Сертификаты» и нажмите «Добавить>».

Видим окно «Оснастка диспетчера сертификатов» > выберите «учетной записи компьютера» и нажмите «Далее>».

Пример настройки двухфакторной аутентификации в ОС Windows

В окне «Выбор компьютера» выберите «Локальным компьютером (тем, на котором выполняется эта консоль)» и нажмите «Готово».

Пример настройки двухфакторной аутентификации в ОС Windows

В окне «Добавление и удаление оснасток» нажмите «ОК».

В окне консоли (Корень консоли, слева), щелкните правой кнопкой мыши (ПКМ) на папку «Размещение Веб-служб» и выберите «Все задачи» > «Импорт».

Пример настройки двухфакторной аутентификации в ОС Windows

Видим окно Мастер импорта сертификатов и нажимаем кнопку Далее.

Пример настройки двухфакторной аутентификации в ОС Windows

На странице импорта найдите через «Обзор» и выберите файл, который вы хотите импортировать, а затем нажмите «Далее».

Заранее файл был добавлен в C:WindowsSystem32 (Вы можете поместить его в иной каталог). Примечание: в окне «Проводника» в раскрывающемся списке «Тип файла» обратите внимание на типов файлов и выберите «Все файлы» (*.*) или (*.pfx), для поиска файла сертификата.

Пример настройки двухфакторной аутентификации в ОС Windows

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

Пример настройки двухфакторной аутентификации в ОС Windows

нажимаем «Далее»

На странице «Хранилища сертификатов» выбираем «Поместить все сертификаты в следующее хранилище», где в окне «Выбор хранилища сертификатов» выберите «Размещение Веб-служб» и нажмите «ОК». Нажмите кнопку «Далее»

Пример настройки двухфакторной аутентификации в ОС Windows

На странице «Завершение мастера импорта сертификатов» проверяем правильность настроек и нажимаем кнопку Готово.

Пример настройки двухфакторной аутентификации в ОС Windows

Вы должны получить сообщение «Импорт выполнен успешно».

Сертификат SSL с закрытым ключом в файле .pfx теперь сохранен в хранилище хостинга.

Как настроить Windows Server для использования импортированного сертификата SSL

После импорта сертификата SSL в Windows Server необходимо настроить IIS 10, чтобы импортированный сертификат давал защиту вашему сайту.

Откройте «Диспетчер служб IIS» > в дереве меню Подключения (левая панель) разверните панель и выберите сайт (у нас это Default Web Site). Видим «Начальная страница Default Web Site» (по центру), где в меню «Действия» (правая панель) в разделе «Изменение веб-сайта» щелкните на ссылку «Привязки…». В окне «Привязки сайта» нажмите «Добавить»

Пример настройки двухфакторной аутентификации в ОС Windows

В окне «Добавление привязки сайта» выполните следующие действия и нажмите кнопку «ОК»:

Тип: из списка выберите https

IP-адрес: выберите «Все неназначенные»

Порт: 443 (Порт, через который трафик будет зашифрован с помощью SSL по умолчанию 443)

SSL-Сертификат: В раскрывающемся списке выберите сертификат SSL (надо указать точное имя установленного сертификата, у нас domainssl.ua)

Пример настройки двухфакторной аутентификации в ОС Windows

Готово, SSL-сертификат установлен и сайт настроен на безопасное соединение. Можно закрыть окно.

Пример настройки двухфакторной аутентификации в ОС Windows

Настройка перенаправления HTTP на HTTPS в IIS

После того как мы установили сертификат SSL, сайт по-прежнему остается доступным через обычное соединение HTTP, которое считается небезопасным. Для безопасного подключения посетители должны самостоятельно указать https:// при вводе адреса вашего сайта (домена) в своих браузерах и зачастую этого никто не делает.

Чтобы установить безопасное соединение на вашем сайте, необходимо настроить правило перенаправления (редирект) HTTP на HTTPS. После чего, любой посетитель вашего сайта переходя/вводя домен «yourdomain.com», будет перенаправлен на «https://yourdomain.com» или «https://www.yourdomain.com» (в зависимости от вашего выбора), где весь трафик зашифрован при передаче между сервером и клиентом.

Откройте «Диспетчер служб IIS» > в дереве меню Подключения (левая панель) разверните панель и выберите сайт (у нас это Default Web Site). Видим «Начальная страница Default Web Site», где дважды щелкнуть (ЛКМ) на значок «Переопределение URL-адресов».

Пример настройки двухфакторной аутентификации в ОС Windows

Если URL Rewrite Module отсутствует, качаем его на сайте IIS

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

Пример настройки двухфакторной аутентификации в ОС Windows

Указываем Имя правилу и заполняем ниже расположенные разделы:

В разделе «Соответствует URL-адресу»:

– Указать «Соответствует шаблону» из меню «Запрошенный URL-адрес».
– Указать «Регулярные выражения» из меню «Использование».
– Шаблон: (. *)
– Установить флажок «Не учитывать регистр»

В разделе «Условия» выберите «Совпадение со всеми» из меню «Логическая группировка» и нажмите «Добавить».

В появившемся окне «Добавить условие»:

– Введите {HTTPS} в поле «Ввод условия»
– Выберите «Соответствует шаблону» из выпадающего списка
– Введите ^ OFF $ в поле «Шаблон»
– Флажок «Не учитывать регистр»
– Нажмите ОК

Пример настройки двухфакторной аутентификации в ОС Windows

В разделе «Действие» выберите «Перенаправление» из меню «Типа действия» и укажите в поле «URL-адрес перенаправления»:

https://{HTTP_HOST}/{R:1}

Установите флажок «Добавить строку запроса»

Выберите «Постоянное (301)» из меню «Тип перенаправления»

Пример настройки двухфакторной аутентификации в ОС Windows

Нажмите «Применить» вверху справа из меню «Действия».

Теперь нам нужно применить правило к самому сайту.

Пример настройки двухфакторной аутентификации в ОС Windows

В «Диспетчер служб IIS» щелкните ПКМ на свой сайт (у нас это Default Web Site) и выберите «Проводник», откроется корневой каталог сайта, где найдите файл web.config и откройте его. Проверьте содержимое на следующий блок кода (если его нет, добавьте). Также, не лишним будет сделать бекап файла web.config в случае неудачи, можно вернуть старый файл. Главное вписать код в соответствующие блоки в файле.

<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name=”HTTPS force” enabled=”true” stopProcessing=”true”>
<match url=”(.*)” />
<conditions>
<add input=”{HTTPS}” pattern=”^OFF$” />
</conditions>
<action type=”Redirect” url=”https://{HTTP_HOST}/{R:1}” redirectType=”Permanent” />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

Если web.config отсутствует, создайте новый файл ТХТ (например, 1.txt) и вставьте в него код, сохраните, а потом переименуйте файл в web.config

Теперь перенаправление можно проверить, перейдя на сайт по адресу http:// но откроет https:// и браузер покажет Безопасное соединение и замочек.

Можно использовать анонимный режим браузера (Ctrl Shift N для Chrome) и отладчик (F12).

Оцените статью
Мой сертификат
Добавить комментарий