Рейтинг:2

Почему мой RSA DANE TLSA работает, а ECDSA DANE TLSA не работает?

флаг id

Я купил два SSL-сертификата с подстановочными знаками для одного домена у Namecheap/Sectigo/Comodo. Я сгенерировал свои CSR обычным способом, используя openssl.

$ openssl req -newkey rsa:4096 -keyout example.com.rsa.key -out example.com.rsa.csr
$ openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out example.com.ecdsa.pem
$ openssl req -newkey ec:example.com.ecdsa.pem -keyout example.com.ecdsa.key -out example.com.ecdsa.csr

Я отправил CSR и получил каждый пакет сертификатов, включая .crt и .ca-bundle, все, как и ожидалось.

Мне удалось установить оба сертификата для использования Postfix. Каждому требовалась незашифрованная версия закрытого ключа с сохраненными безопасными разрешениями.

$ openssl rsa -in example.com.rsa.key -out example.com.rsa.key.unencrypted
$ openssl ec -in example.com.ecdsa.key -out example.com.ecdsa.key.unencrypted

Я правильно настроил SPF, DKIM, DMARC и DNSSEC, каждый из которых подтвержден сторонними инструментами и отправил и получил почту с проходными баллами в заголовках.

Я снова использовал openssl для создания хэшей сертификатов для моих записей DANE TLSA. Я создал два набора, по одному для каждого алгоритма и для портов 25 и 587. Они были добавлены в мой файл зоны, проверены с помощью named-checkzone, подписаны с помощью dnssec-signzone и опубликованы в DNS.

Я начал с использования двух внешних инструментов для проверки конфигурации. датчанинчек а второй в датчанин.sys4.de. Оба сообщили об общем успехе с использованием сертификата RSA, но о конкретной ошибке сертификата ECDSA.

Первый преуспел, частично сообщив:

DANE TLSA 3 1 1 [9679fc29..]: Сертификат EE соответствует ОК
DANE TLSA 3 1 1 [ecd29ffd..]: FAIL не соответствует сертификату EE

Последний преуспел, сообщив, в частности:

3, 1, 1 9679fc296960a23c[...]149b990a680cad8b *зеленым цветом*
3, 1, 1 ecd29ffd76d61326[...]dadbcfa42eae9158 - невозможно получить сертификат локального эмитента: (20) *выделено красным*

Я попытался исправить это, изменив различные поля использования, селектора и сопоставления, 3 0 1, 3 1 1 и т. д. Я попытался сгенерировать хэши локально с помощью openssl и с помощью онлайн-инструментов, таких как gen_tlsa. Оба инструмента дали идентичные результаты хеширования для обоих сертификатов. Опять же, RSA TLSA удалось, а записи ECDSA не удалось. В конце концов я нашел сценарий chaingen, который генерирует все хэши 3 0 1, 3 1 1, 3 0 2 и 3 1 2, которые я включил для каждого порта без каких-либо улучшений для записей ECDSA.

Я провел несколько часов, пробуя различные перестановки каждого сертификата, записей TLSA, портов и т. д. Я попытался добавить записи TLSA (2 0 1) для родительских ключей записей ECDSA в DNS. Я попытался изменить сертификат, доступный для Postfix, чтобы включить ca-bundle вместе с сертификатом в файл .pem.

Исследуя, я нашел этот пост на exim-users под названием «Как использовать сертификат ec с сертификатами DANE и ec+rsa» Виктора Духовни, который не нуждается в представлении в кругу Postfix/DANE.Он предположил, что, возможно, онлайн-инструменты были оппортунистическими, и как только они преуспели с сертификатами RSA, они не удосужились протестировать сертификаты ECDSA. Он предоставил очень ценные вызовы openssl, чтобы показать, что ключи действительно были правильными в ситуации автора. Я продублировал эту работу с двумя короткими сценариями оболочки, используя код Виктора, заменяющий мою информацию, один назывался checkrsa, а другой — checkecdsa.

Два сценария выполняют по две команды каждый со следующей настройкой для checkrsa (для IPv4):

$ кот чекерса

эхо "выйти" | openssl s_client -starttls smtp -connect mail.example.com:25 -4 -verify 9 \
    -dane_tlsa_domain mail.example.com \
    -dane_tlsa_rrdata "3 0 1 c487cdb079b49d12ee357d9547c6f67448a2ec2e789c86c65d213a57aaec4ac9" \
    -dane_tlsa_rrdata "3 1 1 9679fc296960a23c89fed73d8e6a6d0ab33f0abc99d48c44149b990a680cad8b" \
    -sigalgs rsa_pkcs1_sha256:rsa_pkcs1_sha384:rsa_pkcs1_sha512:rsa_pss_rsae_sha256:rsa_pss_rsae_sha384:rsa_pss_rsae_sha512:rsa_pss_pss_sha256:rsa_pss_pss_sha384:rsa_pss12pss

И проверьте ecdsa (для IPv6):

$ cat checkecdsa
эхо "выйти" | openssl s_client -starttls smtp -connect mail.example.com:25 -6 -verify 9 \
    -dane_tlsa_domain mail.example.com \
    -dane_tlsa_rrdata "3 0 1 87a8c75581c9d022062416a37387de1ec30d311e4d7afbeb892be287fb13bfc5" \
    -dane_tlsa_rrdata "3 1 1 ecd29ffd76d6132629ddbf7ccd31460e23ac3b4a50d47bccdadbcfa42eae9158" \
    -sigalgs ecdsa_secp256r1_sha256:ecdsa_secp384r1_sha384:ecdsa_secp521r1_sha512

Результаты, достижения:

root@server:~/bin# ./checkrsa 
проверить глубину 9
ПОДКЛЮЧЕН(00000003)
глубина=0 CN = *.example.com
проверить возврат: 1
---
Цепочка сертификатов
 0 s:CN = *.example.com
   i:C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
---
Сертификат сервера
-----НАЧАТЬ СЕРТИФИКАТ-----
MIIHNDCCBhygAwIBAgIQAzfJZrX65NjG2FvLmk0I0jANBgkqhkiG9w0BAQsFADCB
...
Xw8UgZDYihDaIxT8SUQUgV9weQg5Lkru
-----КОНЕЦ СЕРТИФИКАТА-----
тема = CN = * .example.com

issuer=C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA

---
Имена ЦС сертификата клиента не отправлены
Дайджест одноранговой подписи: SHA256
Тип одноранговой подписи: RSA-PSS
Временный ключ сервера: X25519, 253 бита
---
Рукопожатие SSL прочитало 2904 байта и записало 386 байтов
Проверка: ОК
Подтвержденное имя узла: *.example.com
DANE TLSA 3 1 1 ...99d48c44149b990a680cad8b соответствует сертификату EE на глубине 0
---
Новый, TLSv1.3, шифр TLS_AES_256_GCM_SHA384.
Открытый ключ сервера 4096 бит.
Безопасное повторное согласование НЕ поддерживается
Сжатие: НЕТ
Расширение: НЕТ
ALPN не согласован
Предварительные данные не были отправлены
Подтвердите код возврата: 0 (хорошо)
---
250 РАЗБИВКА
СДЕЛАНО
root@server:~/bin# ./checkecdsa 
проверить глубину 9
ПОДКЛЮЧЕН(00000003)
глубина=0 CN = *.example.com
проверить возврат: 1
---
Цепочка сертификатов
 0 s:CN = *.example.com
   i: C = Великобритания, ST = Большой Манчестер, L = Солфорд, O = Sectigo Limited, CN = Sectigo 
ЦС безопасного сервера проверки домена ECC
---
Сертификат сервера
-----НАЧАТЬ СЕРТИФИКАТ-----
MIIEqDCCBE6gAwIBAgIRAIIKQBNWh2R9wwvn2/j30PgwCgYIKoZIzj0EAwIwgY8x
...
ЙемреHq/Cd5HPgIgE6InSF5ko6mWo9GMpR7w1ijpbsnShlS6EiYrpZozD0s=
-----КОНЕЦ СЕРТИФИКАТА-----
тема = CN = * .example.com

эмитент = C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo ECC Domain Validation Secure Server CA

---
Имена ЦС сертификата клиента не отправлены
Дайджест одноранговой подписи: SHA256
Тип одноранговой подписи: ECDSA
Временный ключ сервера: X25519, 253 бита
---
Рукопожатие SSL прочитало 1811 байт и записало 348 байт.
Проверка: ОК
Подтвержденное имя узла: *.example.com
DANE TLSA 3 1 1 ...50d47bccdadbcfa42eae9158 соответствует сертификату EE на глубине 0
---
Новый, TLSv1.3, шифр TLS_AES_256_GCM_SHA384.
Открытый ключ сервера 256 бит.
Безопасное повторное согласование НЕ поддерживается
Сжатие: НЕТ
Расширение: НЕТ
ALPN не согласован
Предварительные данные не были отправлены
Подтвердите код возврата: 0 (хорошо)
---
250 РАЗБИВКА
СДЕЛАНО

Таким образом, оба сертификата проверяются локально, но продолжают сбой извне.

Увидев, что в сообщении Виктора указано, что, возможно, инструменты, добившиеся успеха с RSA, отказались от хэшей ECDSA, я также попытался просто опубликовать записи ECDSA TLSA. Результаты показали полный сбой только с хэшами ECDSA.

Итак, я согласен с этой ситуацией: У меня есть два набора SSL-сертификатов, один RSA, другой ECDSA. Оба сертификата преуспевают в Postfix. Проверка обоих сертификатов с помощью openssl. Публикация обоих сертификатов проходит в целом, на основе сертификатов RSA, с учетом того, что сертификаты ECDSA терпят неудачу. Сертификаты ECDSA успешны локально, но не работают извне.

Я не знаю, что делать дальше, и мне нужна помощь в настройке моего сертификата ECDSA параллельно с моими записями RSA для DANE.

anx avatar
флаг fr
anx
Вы можете найти [Hardenize](https://www.hardenize.com/) и [crt.sh](https://crt.sh/) более полезными для их вывода для каждого сертификата (-chain).Вы совершенно уверены, что ваш сервер отправляет по промежуточному звену - так и должно быть, потому что в противном случае какой смысл в том, чтобы он был подписан *Sectigo*?
synacksoldier avatar
флаг id
Я совсем не уверен. Я предположил, что цепочка доверия была такова, что мои сертификаты в виде листьев будут достаточно близки к известной/опубликованной записи, чтобы быть полезными «из коробки». Я попытался включить информацию о пробелах в родительских ключах, чтобы решить проблему, не зная термина «промежуточный» или его отношения к моей ситуации. Я постараюсь продолжить исследования о том, как предоставить такую ​​информацию.
anx avatar
флаг fr
anx
ЦС дал вам две вещи: сам сертификат («лист», .crt) и другие сертификаты для отправки вместе с ним («промежуточные», .ca-bundle), которые, по их мнению, соединят цепочку с известными и надежными корнями. Если ЦС предоставляет каждый из них отдельно, вам необходимо для каждого алгоритма создать файл, содержащий оба (1: ваш сертификат ecc + промежуточные звенья ecc 2: ваш сертификат rsa + промежуточные звенья rsa). Я *подозреваю*, что вы предоставили Postfix только сертификат. Тогда ваша установка DANE будет продолжать работать, но *дополнительно* ваш сертификат будет легко проверить даже для клиентов, которые только пытаются увидеть, привязан ли он к доверенному корневому ЦС.
Рейтинг:1
флаг fr
anx

Да, инструменты, которые вы упомянули, дали вам вводящие в заблуждение результаты.

Хороший тест должен исследовать перекрестное произведение IP-адресов на алгоритмы, а затем для каждого из них: проверить, связывается ли представленный сертификат с доверенным центром сертификации. и связывается ли он с сертификатом, опубликованным через TLSA, или соответствует ему.Это 8 шагов проверки из 4 уникальных попыток согласования, даже не учитывая более старые версии протокола и SNI.

Некоторые тесты пробуют только первый IP-адрес, некоторые тесты пробуют только первый согласованный набор шифров. Большинство тестов не могут однозначно сообщить, не удалось ли выполнить сопоставление DANE или PKI.

s_client команда, которую вы пробовали, просто прекрасна .. но ты хочешь бежать четыре не два команд (вдвое больше, если вы используете IPv4 и IPv6). Потому что я подозревать в то время как ваши записи TLSA в порядке, вы еще не отправляете (правильные) промежуточные звенья.

synacksoldier avatar
флаг id
Хорошая копия необходимости двух вызовов openssl s_client для каждой версии ip (v4, v6). Я обновил текст, чтобы включить пример для каждой версии.Но что мне нужно включить до этого? Что мне не хватает перед расширением для версий ip?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.