Я хотел бы создать самозаверяющий сертификат DSA в Ubuntu 12.04 для использования с веб-сервером и соединением TLS 1.2 (HTTPS).

Я обнаружил, что вы можете запустить следующую команду для создания RSA:

openssl genrsa -out server.key 3072

Однако мне нужны следующие свойства:

  • Длина ключа 3072 бита с использованием обычного алгоритма DSA (не ECDSA)
  • Использование криптографической хеш-функции SHA2 с 384 битами
  • Использование опции "совершенная прямая секретность"
  • Назначьте AES 256 в качестве первого порядка предпочтения для симметричного шифра
  • Не требуется шифрование для закрытого ключа (для автоматической перезагрузки).

Может кто-нибудь помочь мне с параметрами, чтобы сделать следующие параметры выше?

Когда начинается сеанс TLS, как вы убедитесь, что он генерирует новое случайное значение подписи k каждый раз? Это, по-видимому, имеет решающее значение для безопасности алгоритма. Или это автоматически с OpenSSL?

Я нашел этот набор шифров TLS 1.2 TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 здесь, как мне сказать, чтобы использовать это?

Заранее спасибо.

2 ответа2

6

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

Вместо этого, отправьте вопрос о том, чего вы на самом деле пытаетесь достичь. Может случиться так, что решение не то, что вы думаете.

Но так как вы спросили, вот как вы генерируете самозаверяющий сертификат DSA в 3072 бита:

openssl dsaparam 3072 -out params.pem
openssl gendsa -out key.pem params.pem
openssl req -new -key key.pem -out req.pem
openssl x509 -req -in req.pem -signkey key.pem -out certificate.cer
0

Хотя SHA-384 можно использовать с DSA, стандартного OID для такой комбинации не существует, поэтому OpenSSL не сможет кодировать часть "алгоритма подписи" вашего самозаверяющего сертификата. Стандартные OID были определены для DSA только с SHA-1, SHA-224 и SHA-256. Для вашей самозаверяющей подписки вам нужно будет смягчить требование «только для SHA-384». Поскольку самоподпись в любом случае имеет абсолютно нулевое криптографическое значение (оно существует только потому, что сертификат имеет необязательное поле для "подписи") и может быть заменено некоторыми случайными байтами примерно подходящего размера, это не должно вызывать затруднений. ,

Точно так же DSA был сначала определен для использования модуля в диапазоне от 512 до 1024 битов, а затем модуля из ровно 1024 битов, не меньше и не больше. Последние версии стандарта (FIPS 186-4) допускают более длинный модуль с ограничительным выбором: только 1024, 2048 и 3072 бита, с размером подгруппы 160, 224 или 256 бит (см. Стр. 15 для получения информации о допустимых комбинациях). По сути, использование модуля с размером, отличным от 1024 бит, будет означать проблемы совместимости (уже использование DSA будет означать проблемы совместимости, потому что никто не делает этого на практике, поэтому эта поддержка в лучшем случае плохо протестирована в развернутых реализациях).

(Между прочим, это означает, что использование с DSA хеш-функции с выходом, превышающим 256 бит, совершенно бесполезно, поскольку безопасность будет ограничена защитой 256-битной группы, то есть чрезвычайно разумным уровнем безопасности "128 бит".)

Генерация случайного значения k для каждой подписи автоматически выполняется OpenSSL, поэтому вам не нужно об этом беспокоиться (это уже сложно сделать правильно; если бы пользователям библиотеки приходилось делать это самостоятельно, это никогда бы не было сделано правильно).

OpenSSL позволяет конфигурировать множество наборов шифров; см. документацию В SSL традиционно сервер следует предпочтениям клиента для выбора набора шифров, но OpenSSL (библиотека) обеспечивает принудительное выполнение настроек сервера (т. Е. Заставляет набор шифров быть конкретным, если клиент поддерживает его, даже если он не появился первым в списке, отправленном клиентом). Обратите внимание, что OpenSSL - это библиотека: вы используете ее только через некоторый код приложения, который использует OpenSSL, и вы можете настроить поведение OpenSSL только через параметры конфигурации этого кода приложения, которые могут или не могут дать вам возможность применять произвольные параметры уровня SSL ,

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .