Самоподписанный сертификат OpenSSL с общим именем длиннее 64 байтов

Существует 3 метода, о которых я знаю:

pwdx

$ pwdx <PID>

lsof

$ lsof -p <PID> | grep cwd

/proc

$ readlink -e /proc/<PID>/cwd

Примеры

Скажите, что у нас есть этот процесс.

$ pgrep nautilus
12136

Затем, если мы используем pwdx:

$ pwdx 12136
12136: /home/saml

Или можно использовать lsof:

$ lsof -p 12136 | grep cwd
nautilus 12136 saml  cwd    DIR              253,2    32768  10354689 /home/saml

Или можно ввести по абсолютному адресу непосредственно в /proc:

$ readlink -e /proc/12136/cwd/
/home/saml
3
06.10.2015, 20:51
2 ответа

В моем случае все ответы «не делайте этого, это противоречит стандартам» были очень бесполезны, так как мне нужно было сделать это как часть задачи обратного проектирования. В моем случае тот факт, что это противоречило стандартам, не имел никакого значения.

Вот (грубые )шаги:

  1. Загрузите последний исходный код libressl изhttps://ftp.openbsd.org/pub/OpenBSD/LibreSSL/(Я использовал версию 2.6.0, потому что это версия, поставляемая с macOS Mojave)
  2. Разархивируйте /tar/gz, а затем откройте /crypto/asn1/a_mbstr.cв своем любимом редакторе
  3. Найдите что-то похожее на следующее:

    if ((maxsize > 0) && (nchar > maxsize)) {
        ASN1error(ASN1_R_STRING_TOO_LONG);
        ERR_asprintf_error_data("maxsize=%ld", maxsize);
        return -1;
    }
    

    и закомментируйте его. Для версии 2.6.0 это были строки 155 -159. Удаляя эти строки, вы удаляете проверку максимальной длины CN.

  4. Следуйте инструкциям в файле READMEдля сборки двоичного файла. Мне не нужно было устанавливать какие-либо библиотеки при сборке на macOS, кроме YMMV. Я использовал cmake, который удалил новый двоичный файл openssl в /build/apps/openssl

  5. .
  6. Сгенерировать CSR с помощью флагов командной строки (прочитать :НЕ ИНТЕРАКТИВНЫЙ ИНСТРУМЕНТ --он имеет специальную проверку, которая не исправлена ​​этой модификацией! ).

    Например:

    /build/apps/openssl/openssl req -new -newkey rsa:2048 -nodes -out a.csr -keyout a.key -subj "/CN=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
    
  7. Используя стоковые opensslбинарники (или модифицированные, если хотите ), подпишите CSR:

    openssl x509 -req -in a.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out a.crt -days 500 -sha256
    

После этого у вас должен быть готовый к использованию замечательный несовместимый с -сертификат. Я заметил довольно много проблем с использованием сертификатов с CN длиннее 64 символов (Wireshark усекает CN на дисплее дисектора и т. д. ), но на самом деле это работает для того, что мне нужно.

4
27.01.2020, 21:19

You can't.

Указанный максимальный предел равен 64:

-- спецификации верхних границ ДОЛЖНЫ рассматриваться как обязательные

-- из Приложения B стандарта ITU-T X.411. Ссылка Определение параметра МТС

-- Верхние границы

-- Верхние границы

ub-name INTEGER ::= 32768

ub-common-name INTEGER ::= 64

ub-locality-name INTEGER ::= 128

ub-state-name INTEGER ::= 128

ub-organization-name INTEGER ::= 64

2
27.01.2020, 21:19

Теги

Похожие вопросы