Не удается получить встроенный OCSP для проверки в Adobe Reader
Я подписываю PDF с Bouncy Castle и встраиваю ответ OCSP в PKCS7. Я собираю подписанный PDF с помощью PDFBox, но я не могу на протяжении всей жизни получить правильный файл для проверки в Adobe Reader (OCSP не распознается). Поскольку респонденту OCSP требуются подписанные запросы, я должен вставить ответ в файл.
Если бы кто-то вообще имел какие-либо указатели, это было бы очень ценно.
Я предполагаю, что проще взглянуть на фактическую подпись /certs/OCSP, чем на мой код. Подписанный PDF доступен здесь:
https://drive.google.com/open?id=0B_TaSaQW0YXteUgtbUlEa0NhcGc
И подпись в кодировке Base64 находится здесь:
https://drive.google.com/open?id=0B_TaSaQW0YXtaEtPczRROTg4UDA
Редактировать:
Когда я смотрю на сертификат в Adobe Reader и проверяю "Отзыв"> "Проблемы возникли", он говорит:
Certificate is not valid for the usage. Must sign the request.
Раздел отзыва также говорит:
An attempt was made to determine whether the certificate is valid by doing
a revocation check using the Online Certificate Status Protocol (OCSP).
Таким образом, кажется, что встроенный OCSP вообще пропущен.
Изменить 2:
Согласно предложению mkl, я обновил nonce-extension, изменив следующую строку:
DEROctetString extValue = new DEROctetString(nonce);
К этому:
DEROctetString extValue = new DEROctetString(new DEROctetString(nonce)));
В результате получается следующая DER-структура:
[1] (1 elem)
SEQUENCE (1 elem)
SEQUENCE (2 elem)
OBJECT IDENTIFIER 1.3.6.1.5.5.7.48.1.2ocspNonce(OCSP)
OCTET STRING (1 elem)
OCTET STRING IKhVULz41m7JWTa4swZXJPBm6Zs=
Но я все еще получаю те же сообщения об ошибках в Adobe Reader. Я приложил обновленный документ и подпись в кодировке base64:
https://drive.google.com/open?id=0B_TaSaQW0YXtVjNqRWlxbXg4T0U https://drive.google.com/open?id=0B_TaSaQW0YXtNC1CblZlUHV4dGs
Изменить 3:
Я сравнил файл с другой версией без встроенного ответа OCSP и получил эту ошибку в проблемах, обнаруженных в Adobe Reader:
Must sign the request.
Приводит меня к мысли, что первая часть первоначальной ошибки действительно была из-за попытки проверить встроенный OCSP-ответ:
Certificate is not valid for the usage.
Я предполагаю, что рассматриваемый сертификат будет сертификатом подписи OCSP-ответа. Мой собственный документ подписан со следующей структурой сертификата:
Root CA -> Bank (on EU Trust List) -> My Company
OCSP подписан со следующей структурой:
Root CA -> External company (cert marked for OCSP signing)
Does the intermediary certificate in the document signing chain make the OCSP-signature invalid? Or can I somehow include missing pieces of the cert chain(s) to make it validate? Or is this perhaps not the problem?
1 ответ
OCSP Nonce кодирование
Расширение nonce в вашем ответе OCSP кодируется так:
3405 45: [1] {
3407 43: SEQUENCE {
3409 41: SEQUENCE {
3411 9: OBJECT IDENTIFIER
: ocspNonce (1 3 6 1 5 5 7 48 1 2)
3422 28: OCTET STRING 'EZrf5DVM/y1QFGUfydwBSOsxZ6s='
: }
: }
: }
Скорее всего, это соответствует расширению nonce, которое вы отправили в своем запросе.
Помните, однако, что значение расширения заключено в строку OCTET STRING по определению. Таким образом, ваше фактическое значение nonce представляет собой последовательность байтов, заданную значениями символов ASCII EZrf5DVM/y1QFGUfydwBSOsxZ6s=
то есть что-то совершенно нетипизированное, что касается ASN.1.
Но RFC 6960 определяет, для расширения nonce, синтаксис ASN.1, который отсутствовал в RFC 2560...
Nonce ::= OCTET STRING
(RFC 6960 разделы 1 и 4.4.1)
Таким образом, ваше значение nonce должно быть ОКТЕТНОЙ СТРОКОЙ, а не нетипизировано, если это касается ASN.1.
Таким образом, пожалуйста, попробуйте обернуть значение, которое вы выбрали для своего одноразового номера в OCTET STREAM (которое затем, согласно Extension
определение, будет обернуто в еще один OCTET STREAM).
Информация об аннулировании всех сертификатов
Чтобы проверка прошла успешно без дополнительных запросов информации об отзыве, подпись должна содержать информацию об отзыве для всех задействованных сертификатов, кроме (доверенных) корневых сертификатов и других сертификатов, помеченных соответствующим образом.
Таким образом, вам нужна не только информация об отзыве для вашего сертификата подписавшего и сертификата банка-посредника, но и для сертификатов OCSP ваших встроенных ответов OCSP (если только они не имеют расширения id-pkix-ocsp-nocheck).
Если я правильно прочитал дампы ASN.1, сертификат OCSP в вашем случае не имеет этого расширения. Таким образом, Adobe Reader попытается получить информацию об отзыве для него в Интернете, и если это не сработает, он не будет использовать ваши встроенные ответы OCSP.
Сертификат TLS службы OCSP
Поскольку ваша подпись не содержит всей необходимой информации об отзыве. Adobe Reader пытается получить их в Интернете. При этом он сталкивается с ошибками.
Подробную информацию об ошибках я получаю
Сертификат недействителен для использования ____________________________________________________________
Сертификат недействителен для использования ____________________________________________________________
Ошибка SSL-сертификата.
И действительно, при попытке доступа к https://va1.bankid.no/ (URL-адресу сервера OCSP) вручную мне также сообщают о проблемах с сертификатами.
Похоже, вы получаете разные ошибки. Вы устанавливали и доверяли некоторым специальным сертификатам на своем компьютере или в Adobe Reader?