SCEP и расширенные атрибуты сертификата

Я использую SCEP для создания сертификатов для своего веб-сервиса. После успешного создания сертификата и запуска сервера я пытаюсь получить доступ к wsdl через браузер, который отображает сообщение об ошибке, в котором говорится, что тип сертификата не разрешен для этого приложения, код ошибки: sec_error_inadequate_cer_type. Другой коллега указал, что мне нужно изменить использование ключа в расширенных атрибутах ключа на «аутентификацию сервера» и что это должно быть сделано в запросе на сертификацию.

Для создания нового запроса я использую bouncycastle. См. Фрагмент кода ниже:

    PKCS10CertificationRequestBuilder builder = new PKCS10CertificationRequestBuilder(subject, pkInfo);
    builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_challengePassword, new DERPrintableString(challengePassword));

    return builder.build(signer);

Проблема в том, что я не нашел документации о том, как добавить что-то подобное в запрос. Единственное, что я понял, это то, что, скорее всего, я должен добавить другой атрибут в построитель с идентификатором объекта «PKCSObjectIdentifiers.pkcs_9_at_extendedCertificateAttributes»:

    builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_extendedCertificateAttributes, ??? );

Но что нужно передать в addAttribute-Method конструктора, чтобы в запрошенном сертификате для атрибута расширенного сертификата было установлено значение «проверка подлинности сервера»?

Я провел небольшое исследование, но не нашел никакой документации или примеров, которые давали бы мне полезные ответы.

Некоторая информация: я использую JSCEP и bouncycastle 1.48

Я надеюсь, что кто-то может указать мне решение. Заранее спасибо.


person vik    schedule 12.12.2013    source источник


Ответы (1)


Атрибут Расширенный сертификат устарел, но есть еще один атрибут PKCS # 9, называемый Запрос на расширение, который может содержать какое-то расширение, которое вызывающий абонент хочет включить в сертификат.

Тип атрибута extensionRequest может использоваться для переноса информации о расширениях сертификатов, которые запрашивающая сторона желает включить в сертификат.

Конечно, центр сертификации должен поддерживать этот атрибут и может игнорировать его в зависимости от своей политики сертификации.

Чтобы включить этот атрибут в свой CSR, вы можете использовать этот код (не тестировался):

KeyUsage ku = new KeyUsage(KeyUsage.digitalSignature);
Extension kuExt = new Extension(Extension.keyUsage, true, ku.getEncoded());
ExtendedKeyUsage eku = new ExtendedKeyUsage(KeyPurposeId.id_kp_serverAuth);
Extension ekuExt = new Extension(Extension.extendedKeyUsage, true, eku.getEncoded());
Extensions exts = new Extensions(new Extension[] {kuExt, ekuExt});
builder.addAttribute(PKCSObjectIdentifiers.pkcs_9_at_extensionRequest, exts);
person Jcs    schedule 13.12.2013
comment
Большое тебе спасибо. Это сделало мой день. Кстати. Извините за поздний ответ, я был в отпуске, поэтому сегодня первый день, когда я смог его протестировать. - person vik; 13.01.2014