Есть ли пробелы в сертификатах x509?


Иногда, когда пользователи вырезают и пропускают свои сертификаты x509 в нашу систему из интернета, там путаются пробелы.

Можно ли с уверенностью предположить, что пробелы не являются допустимыми символами в сертификатах x509, и удалить их?

2 5

2 ответа:

Я предполагаю, кто говорит о PEM-кодированном сертификате, то есть сертификате с заголовком -----BEGIN CERTIFICATE----- и нижним колонтитулом -----END CERTIFICATE-----, который выглядит так:

-----BEGIN CERTIFICATE-----
MIICwzCCAaugAwIBAgIKUXEyN2GLpe8......
-----END CERTIFICATE-----

В этом случае содержимое сертификата кодируется с помощью base64. Поскольку сертификат является объектом с цифровой подписью, Вы не можете изменить ни одного бита, иначе проверка подписи завершится неудачей. но символы пробела (включая табуляцию или перевод строки) не являются допустимыми символами base64. Если некоторые символы пробела были добавлены к строка сертификата вы, вероятно, можете безопасно удалить их, так как они не являются допустимыми символами. Надежный анализатор сертификатов, вероятно, просто проигнорирует их. Обратите внимание, что обычно сертификат в кодировке PEM разбивается на строки по 64 столбца; программа чтения сертификатов игнорирует добавленные символы новой строки.

Хорошая новость: после удаления этих дополнительных символов, благодаря цифровой подписи, если сертификат успешно проанализирован, это означает, что его целостность нарушена. ладно.

Да, пробелы разрешены, согласно RFC 7468.

Во-первых, традиционные декодеры base64 (как указано в RFC 3548 или RFC 4648) не допускают неожиданных байтов (таких как пробел) в потоке октетов. Таким образом, согласно этим RFC, данные в кодировке base64 с пробелами недопустимы.

Однако кодировка base64 для MIME (RFC 2045) явна в разделе 6.8 и позволяет декодировать такие данные:

Все разрывы строк или другие символы не найденное в Таблице 1 должно быть проигнорировано декодирующим программным обеспечением.

К сожалению, никогда не было четкой спецификации, говорящей, что" PEM-кодированные " сертификаты x509 должны использовать кодировку base64, совместимую с RFC 2045 (Также см. где указан формат файла PEM?)

С 2015 года существуетопределенный источник, который проясняет поставленный здесь вопрос. Это RFC 7468 , который определяет кодировку текста сертификатов. Он гласит:

Кроме того, синтаксические анализаторы должны игнорировать пробелы и другие не -- base64 символов

Наиболее слабые реализации синтаксического анализатора вообще не ориентированы на строки и принимает любую смесь пробелов вне инкапсуляции. границы