Генерация ключа
Первым шагом в подготовке к использованию асимметричного шифрования является создание закрытого ключа. Прежде чем начать, вы должны принять несколько решений:
- Ключевой алгоритм
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, которая была усовершенствована для поддержки различных типов ключей и параметров конфигурации. В настоящее время она представляет собой унифицированный интерфейс для генерации ключей.
Добавление в linux корневых сертификатов x.509 локального корпоративного центра сертификации [вики it-kb]
Некоторые службы и приложения в Linux могут использовать в своей работе сетевые соединения, защищаемые с помощью SSL/TLS. Иногда требуется, чтобы цифровой сертификат, используемый для защиты соединений и предоставляемый каким-то удалённым сервером из локальной сети, принимался локальной Linux-системой как доверенный. Для этого в Linux-систему может потребоваться добавить корневой сертификат Центра сертификации (ЦС), которым были выданы сертификаты, используемые для защиты соединений. Типичный пример, когда локальная Linux-система для механизмов аутентификации и авторизации подключается с помощью ldap-клиента (например OpenLDAP) к контроллеру домена Active Directory (AD) и контроллер домена предоставляет ldap-клиенту для защиты соединения сертификат, выданным локальным корпоративным ЦС.
Здесь мы рассмотрим простой пример того, как в Linux-систему добавить корневые сертификаты локального корпоративного ЦС.
О том, как «выуживать» корневые сертификаты ЦС, которыми подписаны сертификаты контроллеров домена AD, я приводил пример ранее. Если под руками есть доменная Windows-машина, то можно выгрузить корневой сертификат из оснастки управления сертификатами из раздела корневых сертификатов доверенных ЦС. Если корневой сертификат не один, а несколько (цепочка), то каждый корневой сертификат цепочки выгрузим в файл в кодировке Base-64, сразу присвоив им расширение PEM вместо CER
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.it-kb.ru/_media/unix-linux/openssl/pasted/20210325-174055.png)
В результате такой выгрузки в нашем примере получится пара файлов AD-RootCA.pem (корневой сертификат ЦС верхнего уровня) и AD-SubCA.pem (корневой сертификат подчинённого ЦС). Скопируем полученные pem-файлы на наш Linux-сервер, например с помощью утилиты pscp, во временный каталог.
С:ToolsPuTTy>pscp.exe С:TempAD-*.pem linux-user@LINUX-SERVER:/tmp
AD-RootCA.pem | 1 kB | 1.3 kB/s | ETA: 00:00:00 | 100% AD-SubCA.pem | 1 kB | 1.9 kB/s | ETA: 00:00:00 | 100%
Перейдём на консоль Linux-сервера и переместим файлы коневых сертификатов из временного каталога в каталог, который мы создадим специально для хранения наших корневых сертификатов и подправим на эти сертификаты права (если требуется)
# mkdir /etc/ssl/certs-corp-ca # mv /tmp/AD-*.pem /etc/ssl/certs-corp-ca # chown root:root /etc/ssl/certs-corp-ca/AD-*.pem # ls -la /etc/ssl/certs-corp-ca
... -rw-r--r-- 1 root root 1344 Mar 6 19:35 AD-RootCA.pem -rw-r--r-- 1 root root 1922 Mar 6 19:35 AD-SubCA.pem
Теперь обработаем содержимое каталога с нашими сертификатами утилитой OpenSSL – c_rehash:
# c_rehash /etc/ssl/certs-corp-ca
Doing /etc/ssl/certs-corp-ca AD-RootCA.pem => 36865f67.0 AD-RootCA.pem => bb8428b0.0 AD-SubCA.pem => e740e31e.0 AD-SubCA.pem => 536fc63e.0
В результате выполнения этой команды в этом же каталоге будут созданы специальные хеш-ссылки на файлы сертификатов.
# ls -la /etc/ssl/certs-corp-ca
... lrwxrwxrwx 1 root root 13 Mar 6 20:06 36865f67.0 -> AD-RootCA.pem lrwxrwxrwx 1 root root 12 Mar 6 20:06 536fc63e.0 -> AD-SubCA.pem -rw-r--r-- 1 root root 1344 Mar 6 19:59 AD-RootCA.pem -rw-r--r-- 1 root root 1922 Mar 6 19:59 AD-SubCA.pem lrwxrwxrwx 1 root root 13 Mar 6 20:06 bb8428b0.0 -> AD-RootCA.pem lrwxrwxrwx 1 root root 12 Mar 6 20:06 e740e31e.0 -> AD-SubCA.pem
Помните про то, что если в дальнейшем в данный каталог потребуется снова добавить дополнительный сертификат, то команду c_rehash нужно будет выполнить для каталога заново, чтобы сгенерировались хеш-ссылки для добавленных сертификатов. И напротив, если из каталога будут удаляться какие-то сертификаты, то нужно будет выполнить команду, которая вычистит все хеш-ссылки на уже несуществующие файлы сертификатов:
# find -L /etc/ssl/certs-corp-ca -type l -exec rm {} Итак, каталог с сертификатами подготовлен, теперь можно его указывать в качестве источника доверенных корневых сертификатов для разных служб и приложений в нашей Linux-системе.
В качестве примера рассмотрим клиента OpenLDAP, для которого можно указать созданный нами каталог в конфигурационном файле ldap.conf (/etc/ldap/ldap.conf) в дополнительной опции TLS_CACERTDIR, таким образом, чтобы эта опция шла после имеющейся по умолчанию опции TLS_CACERT (подробнее об этих опциях можно найти в man ldap.conf):
- ldap.conf
... # TLS certificates (needed for GnuTLS) TLS_CACERT /etc/ssl/certs/ca-certificates.crt # Corp CA root certificates storage TLS_CACERTDIR /etc/ssl/certs-corp-ca
Собрать все нужные доверенные корневые сертификаты Центров сертификации в бандл можно простой склейкой содерживого PAM-файлов в колировке Base-64:
# mkdir /etc/ssl/certs-corp-ca-chain # cd /etc/ssl/certs-corp-ca # cat ./AD-RootCA.pem ./AD-SubCA.pem > /etc/ssl/certs-corp-ca-chain/AD-Chain.pem # cat /etc/ssl/certs-corp-ca-chain/AD-Chain.pem
-----BEGIN CERTIFICATE----- ... ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... ... -----END CERTIFICATE-----
Соответственно, применительно к ранее упомянутому клиенту OpenLDAP в Debian GNU/Linux настройка конфигурации будет такой:
- ldap.conf
... # TLS certificates (needed for GnuTLS) TLS_CACERT /etc/ssl/certs-corp-ca-chain/AD-Chain.pem # Corp CA root certificates storage#TLS_CACERTDIR /etc/ssl/certs-corp-ca
Автор первичной редакции:
Алексей Максимов
Время публикации: 25.03.2021 17:36
Ключевые слова
Ключевые слова набора шифров являются базовыми строительными блоками конфигурации наборов шифров. Каждое имя набора (например, 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. |
Подпись ssl сертификата linux в доменном центре сертификации
Копируем содержимое csr файла в буфер, затем идем на веб сайт доменного центра сертификации.

В поле шаблон сертификата выбираем Веб-сервер и кликаем по кнопке «Выдать».

Кликаем по ссылке «Загрузить сертификат» и сохраняем файл сертификата. После этого его можно загрузить на сервер и настроить на использование вебсервером.
Поскольку доменный центр сертификации по умолчанию распространяет свой корневой сертификат на все машины в домене Active Directory, либо вы сделали это с помощью GPO, то все подписанные им сертификаты на машинах в домене будут валидными. Таким образом и SSL сертификат в Linux подписанный доменным центром сертификации прикрученный к внутрикорпоративному веб-серверу тоже не вызовет ошибок в браузере на рабочей машине пользователя.
Данная инструкция пригодится при выпуске сертификата например для установки на Proxmox Mail Gateway или любой другой веб-сервер.
Производительность
Как вы, скорее всего, знаете, скорость вычислений является существенным ограничивающим фактором для любой криптографической операции. В OpenSSL есть встроенный инструмент тестирования производительности, который вы можете использовать для получения представления о возможностях и ограничениях системы. Запустить тестирование можно с помощью команды speed.
Если выполнить команду speed без параметров, OpenSSL сгенерирует большое количество выводных данных, но полезного в них будет немного. Лучше тестировать только те алгоритмы, которые вас непосредственно интересуют. Например, для защиты веб-сервера вам могут понадобиться алгоритмы RC4, AES, RSA, ECDH и SHA:
$ openssl speed rc4 aes rsa ecdh sha
Вывод команды состоит из трёх частей. В первой части показан номер версии OpenSSL и параметры компиляции, с которым был собран этот экземпляр OpenSSL. Эта информация полезна, если вы тестируете различные версии OpenSSL с отличающимися параметрами компиляции:
OpenSSL 0.9.8k 25 Mar 2009 built on: Wed May 23 00:02:00 UTC 2021 options:bn(64,64) md2(int) rc4(ptr,char) des(idx,cisc,16,int) aes(partial) ↩ blowfish(ptr2) compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN ↩ -DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall -DMD32_REG_T=int ↩ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM available timing options: TIMES TIMEB HZ=100 [sysconf value] timing function used: times The 'numbers' are in 1000s of bytes per second processed.
Во второй части приводятся результаты тестирования симметричной криптографии (хэш-функций и криптографических алгоритмов):
type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes sha1 29275.44k 85281.86k 192290.28k 280526.68k 327553.12k rc4 160087.81k 172435.03k 174264.75k 176521.50k 176700.62k aes-128 cbc 90345.06k 140108.84k 170027.92k 179704.12k 182388.44k aes-192 cbc 104770.95k 134601.12k 148900.05k 152662.30k 153941.11k aes-256 cbc 95868.62k 116430.41k 124498.19k 127007.85k 127430.81k sha256 23354.37k 54220.61k 99784.35k 126494.48k 138266.71k sha512 16022.98k 64657.88k 113304.06k 178301.77k 214539.99k
Наконец, в третьей части результаты тестирования асимметричной криптографии:
sign verify sign/s verify/s
rsa 512 bits 0.000120s 0.000011s 8324.9 90730.0
rsa 1024 bits 0.000569s 0.000031s 1757.0 31897.1
rsa 2048 bits 0.003606s 0.000102s 277.3 9762.0
rsa 4096 bits 0.024072s 0.000376s 41.5 2657.4
op op/s
160 bit ecdh (secp160r1) 0.0003s 2890.2
192 bit ecdh (nistp192) 0.0006s 1702.9
224 bit ecdh (nistp224) 0.0006s 1743.5
256 bit ecdh (nistp256) 0.0007s 1513.3
384 bit ecdh (nistp384) 0.0015s 689.6
521 bit ecdh (nistp521) 0.0029s 340.3
163 bit ecdh (nistk163) 0.0009s 1126.2
233 bit ecdh (nistk233) 0.0012s 818.5
283 bit ecdh (nistk283) 0.0028s 360.2
409 bit ecdh (nistk409) 0.0060s 166.3
571 bit ecdh (nistk571) 0.0130s 76.8
163 bit ecdh (nistb163) 0.0009s 1061.3
233 bit ecdh (nistb233) 0.0013s 755.2
283 bit ecdh (nistb283) 0.0030s 329.4
409 bit ecdh (nistb409) 0.0067s 149.7
571 bit ecdh (nistb571) 0.0146s 68.4
Чем может быть полезен вывод этой команды? Вы можете сравнить как опции компиляции влияют на скорость, или насколько отличается скорость работы разных версий OpenSSL на одной платформе. Например, предыдущие результаты получены на реальном сервере с использованием OpenSSL 0.9.
8k (с исправлениями от поставщика дистрибутива). Я планирую перейти на OpenSSL 1.0.1h, поскольку хочу иметь поддержку TLS 1.1 и TLS 1.2; окажет ли это какое-либо влияние на производительность? Для тестирования я скачал и скомпилировал OpenSSL 1.0.1h.
$ ./openssl-1.0.1h speed rsa
[...]
OpenSSL 1.0.1h 5 Jun 2021
built on: Thu Jul 3 18:30:06 BST 2021
options:bn(64,64) rc4(8x,int) des(idx,cisc,16,int) aes(partial) idea(int) blowfish(idx)
compiler: gcc -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H ↩
-Wa,--noexecstack -m64 -DL_ENDIAN -DTERMIO -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN↩
_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512↩
_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
sign verify sign/s verify/s
rsa 512 bits 0.000102s 0.000008s 9818.0 133081.7
rsa 1024 bits 0.000326s 0.000020s 3067.2 50086.9
rsa 2048 bits 0.002209s 0.000068s 452.8 14693.6
rsa 4096 bits 0.015748s 0.000255s 63.5 3919.4
Как видите, для моего варианта использования (2048-битный ключ RSA) OpenSSL 1.0.1h почти в два раза быстрее на этом сервере: производительность возросла в 277 до 450 электронных подписей в секунду. Это означает, что в случае обновления я получу более высокую производительность. Замечательная новость!
Собираем всё вместе
Для демонстрации того, как объединяются различные функции конфигурации наборов шифров, рассмотрим один законченный пример реального использования. Но не забывайте о том, что это всего лишь пример. Поскольку при выборе реальной конфигурации обычно необходимо учитывать множество аспектов, не существует такого понятия, как единственно возможная идеальная конфигурация.
По этой причине, прежде чем вы приступите к работе над своей конфигурацией, у вас должно быть чёткое представление о том, чего вы хотите достичь. В рассматриваемом случае я хотел получить достаточно безопасную и эффективную конфигурацию, которую можно определить следующим образом:
Используются только стойкие шифры с фактическим уровнем криптостойкости 128 бит и выше (это исключает 3DES).
Используются только наборы, обеспечивающие строгую аутентификацию (это исключает анонимные и экспортные наборы).
Не используются любые наборы, полагающиеся на уязвимые исходные алгоритмы (например, MD5).
Реализуется надежная поддержка прямой секретности, независимо от того, какие ключи и протоколы применяются. С этим требованием связано небольшое снижение производительности, потому что не будет возможности использовать быстрый обмен ключами RSA. Чтобы минимизировать это снижение, мы будем отдавать приоритет ECDHE, которые значительно быстрее, чем DHE.
Предпочтение отдаётся ECDSA над RSA. Это требование имеет смысл только при использовании в системе двух вариантов шифрования. То есть мы хотим использовать более быстрые операции ECDSA там, где это только возможно, но откатываться на RSA при взаимодействии с клиентами, которые ещё не поддерживают ECDSA.
При работе с клиентами TLS 1.2 предпочтение отдаётся наборам AES GCM, обеспечивающим наилучший уровень безопасности, который только может предложить TLS.
Поскольку недавно выяснилось, что шифры RC4 слабее, чем это считалось ранее11, поместим их в конец нашего списка. Это почти также эффективно, как и полное их отключение. Хотя BEAST всё ещё может быть проблемой в некоторых ситуациях, предполагается, что о минимизации этой атаки позаботились на стороне клиента.
Обычно лучший подход — начать с полного удаления всех компонентов и наборов, которые вы не хотите использовать; это уменьшает беспорядок и гарантирует, что нежелательные наборы не будут случайно добавлены в конфигурацию по ошибке.
Слабые наборы могут быть идентифицированы следующими ключевыми словами:
aNULL; без аутентификацииeNULL; без шифрованияLOW; наборы с низкой стойкостью3DES; фактическая стойкость — 108 битMD5; наборы, использующие MD5EXP; устаревшие экспортные наборы
Для уменьшения количества выводимых наборов я собираюсь полностью устранить все наборы 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
Установка корневого сертификата в браузере opera – webmoney wiki
Если при попытке установить защищенное соединение с одним из сервисовWebMoney (например, https://security.webmoney.ru) браузер Opera показывает предупреждение, подобное тому, которое показано на картинке ниже, то вам необходимо установить корневой сертификат WebMoney.
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415175834_kornevoy_opera.png)
Для этого загрузите сертификат, а затем в “Меню”-“Настройки” пункт “Безопасность”, раздел HTTPS/SSL кнопка “Управление сертификатами”.
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415173859_opera.png)
Для установки сертификата перейдите на вкладку “Доверенные корневые центры сертификации” и нажмите кнопку “Импорт…”,
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174207_kornevoy_IE_new_4.png)
и в открывшемся окне кнопку “Далее >”.
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174207_kornevoy_IE_new_5.png)
Для выбора файла сертификата нажмите кнопку “Обзор..”.
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174207_kornevoy_IE_new_6.png)
Найдите на жестком диске сохраненный файл сертификата и нажмите кнопку “Открыть”
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174207_kornevoy_IE_new_7.png)
и затем кнопку “Далее >”.
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174207_kornevoy_IE_new_8.png)
Обратите внимание, предлагаемое по умолчанию хранилище сертификатов должно совпадать c тем, куда следует поместить корневой сертификат. Если импорт был инициирован из другого раздела хранилища сертификатов, то нужно выбрать по кнопке “Обзор…” хранилище “Доверенные корневые центры сертификации” и нажать кнопку “Далее >”.
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174207_kornevoy_IE_new_9.png)
Затем следует подтвердить завершение работы мастера, нажав кнопку “Готово”,
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174208_kornevoy_IE_new_10.png)
следом кнопку “Да”,
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174218_kornevoy_IE_new_11.png)
и, наконец, кнопку “ОК”.
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174218_kornevoy_IE_new_12.png)
Для контроля правильности проделанных операций в окне Сертификаты откройте вкладку Доверенные корневые центры сертификации и в конце списка найдите установленный вами корневой сертификат
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174218_kornevoy_IE_new_13.png)
и откройте окно информации о сертификате, нажав кнопку “Просмотр”. Убедитесь, что сертификат действителен и его срок действия оканчивается 10.03.2035 г.
![Добавление в Linux корневых сертификатов X.509 локального корпоративного Центра сертификации [Вики IT-KB]](https://wiki.webmoney.ru/files/2021/04/160415174218_kornevoy_IE_new_14.png)
Закройте все окна, перезагрузите браузер и проверьте действие сертификата, установив защищенное соединение с сайтом Сервиса безопасности — https://security.webmoney.ru.
См. также:
Настройка Opera
Регистрация WM Keeper WebPro в Opera
Импорт сертификата в браузере Opera
Экспорт сертификата в браузере Opera
