Через некоторое время я попытался немного покопаться, чтобы увидеть, могу ли я что-то с этим сделать. Просматривая патч и страницу руководства, можно упомянуть несколько вещей:
Строка [...] должна содержать зашифрованный в Base64 сертификат X.509 (старый стиль) или ключевое слово (новый стиль), за которым необязательно следует символ '=' (равно) или ':' (двоеточие), ноль или более пробелов и X .509 сертификат `` Отличительное имя '' (Тема). Ключевое слово нечувствительно к регистру и может быть одним из следующих: «Тема», «Отличительное имя», «Отличительное имя», «Отличительное имя», «Отличительное имя» или «DN». Разделитель Предметов может быть '/' (косая черта), ',' (запятая) или смешанным, и порядок не важен.
Мы можем заметить, что мы можем разделить значения ключа также косой чертой, что может сделать анализатор более счастливым:
subject:O=GrandsChocolatiers, Ltd./OU=Management/OU=Top
Но, к сожалению, нет. Парсер выглядит очень "фиктивно", анализирует оба разделителя независимо от контекста и не поддерживает никаких escape-последовательностей:
+static const char* +x509key_find_subject(const char* s) { + static const char *keywords[] = { + "subject", + "distinguished name", + "distinguished-name", + "distinguished_name", + "distinguishedname", + "dn", + NULL + }; + const char **q, *p; + size_t len; + + if (s == NULL) { + error("x509key_find_subject: no input data"); + return(NULL); + } + for (; *s && ISSPACE(*s); s++) + {/*skip space*/} + + for (q=keywords; *q; q++) { + len = strlen(*q); + if (strncasecmp(s, *q, len) != 0) continue; + + for (p = s + len; *p && ISSPACE(*p); p++) + {/*skip space*/} + if (!*p) { + error("x509key_find_subject: no data after keyword"); + return(NULL); + } + if (*p == ':' || *p == '=') { + for (p++; *p && ISSPACE(*p); p++) + {/*skip space*/} + if (!*p) { + error("x509key_find_subject: no data after separator"); + return(NULL); + } + } + if (*p == '/' || *p == ',') { + /*skip leading [Relative]DistinguishedName elements separator*/ + for (p++; *p && ISSPACE(*p); p++) + {/*skip space*/} + if (!*p) { + error("x509key_find_subject: no data"); + return(NULL); + } + } + return(p); + } + return(NULL); +}
Так что, если это по-прежнему вызывает у вас беспокойство, вам, вероятно, потребуется исправить код и / или написать автору этого кода, чтобы исправить это (возможно, в этом списке рассылки ).