Расширение basicConstraints определяется в X.509 следующим образом:
basicConstraints EXTENSION ::= {
SYNTAX BasicConstraintsSyntax
IDENTIFIED BY id-ce-basicConstraints }
BasicConstraintsSyntax ::= SEQUENCE {
cA BOOLEAN DEFAULT FALSE,
pathLenConstraint INTEGER (0..MAX) OPTIONAL }
Это, в свою очередь, кодируется в соответствии с правилами выдающегося кодирования ( X.690 ). Отдельные части последовательности BasicConstraintsSyntax
не имеют своих собственных OID.
Я бы не стал претендовать на звание эксперта, но я не думаю, что есть проблема с тестом для флага cA
, который вы делаете. Я не думаю, что [NSString stringWithFormat:@"%@", ...]
часть необходима, ум.
Что касается проверки самоподписанных сертификатов, то, по-видимому, необоснованно проверять имена субъекта и эмитента; очевидно, это действительно говорит вам, действительно ли сертификат утверждает, что является самоподписанным, и для проверки того, что это действительно так, вам нужно проверить подпись самостоятельно (независимо от того, хотите ли вы этого, я не знаю). К сведению, по теме идентификаторов ключей, согласно RFC3280 , в конкретном случае самозаверяющего сертификата идентификатор ключа авторизации может быть опущен, поэтому сертификат без идентификатора ключа авторизации может быть указание на то, что сертификат был самозаверяющим, но кто-то вполне может намеренно выдать искаженный сертификат без идентификатора ключа доступа.
Последний вопрос, кажется, проясняется при просмотре документов, которые показывают, что значения примерно соответствуют тому, что вы говорите.
Еще одна вещь, о которой стоит сказать, это то, что есть код, который может помочь с такими вещами; например, библиотека MYCrypto Дженса Альфке
Редактировать (8 февраля 2012 г.)
В соответствии с X.509 Style Guide возможно, что имя subject будет пустым, в этом случае вам нужно будет взглянуть на subjectAltName расширение вместо. Маловероятно, что это нарушит тест для самозаверяющих сертификатов, основанных на сравнении имен субъекта и эмитента - кажется неразумным выдавать себе сертификат, предоставляя DN для имени эмитента, но оставляя имя субъекта пустым. Однако стоит иметь в виду.