Хотя 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 ,