Подтвердить что ты не робот

OpenSSL не может получить сертификат локального эмитента, если явно не указан CAfile

Я пытаюсь подключиться к службе Apple Push Notification с сервера Ubuntu для приложения. Я успешно сгенерировал комбинированный сертификат .pem, необходимый для поставщика pyAPNS, который я использую. Однако, когда я пытаюсь проверить сертификат с помощью openssl verify, я получаю error 20 at 0 depth lookup:unable to get local issuer certificate. Он работает, если я укажу ядро ​​явно (openssl verify apns.pem -CAfile entrust_2048_ca.pem), но я уже явно установил сертификат Entrust в системе в соответствии с инструкциями здесь, в разделе "Импорт сертификата в базу данных сертификатов системы", и насколько я понимаю эта страница, все так, как должно быть (сертификат находится в /usr/lib/ssl/certs, и есть символическая ссылка на него с хешем).

То же самое происходит, если я попытаюсь подключиться к самому APNS с помощью openssl s_client: он, кажется, подключается нормально, если я укажу CAfile явно, но в противном случае нет. PyAPNS говорит мне, что он не может подключиться к серверу APNS, и я могу только предположить, что по той же причине.

Как мне получить OpenSSL для распознавания авторитетного центра сертификации Entrust по умолчанию, без явного указания его каждый раз? Я где-то пропустил какой-то шаг?

4b9b3361

Ответ 1

OpenSSL использует хэш сертификата DN эмитента для поиска файла в каталоге по умолчанию, где установлены сертификаты CA.

Смотрите OpenSSL verify документация:

-CApath каталог

Каталог доверенных сертификатов. Сертификаты должны иметь имена формы: hash.0 или иметь символические ссылки на них этой формы (`` hash '' - это имя объекта хэшированного сертификата: см. параметр -hash утилиты x509). В Unix c_rehash script будет автоматически создавать символические ссылки в каталог сертификатов.

Эти значения хеширования будут поступать из DN субъекта каждого сертификата ЦС (поскольку целью является поиск сертификата ЦС с субъектом, соответствующим проверяющему сертификату сертификата). Вы можете использовать c_rehash, как задокументировано, или получить хэш-вопрос Subject DN с помощью openssl x509 -subject_hash -noout -in cacert.pem и соответственно переименовать файл/ссылку.

Прямой эмитент сертификата для проверки может не быть корневым сертификатом ЦС: в цепочке может быть промежуточный сертификат ЦС. Вам также необходимо убедиться, что используются промежуточные сертификаты.

Кроме того, существуют два разных хеш-формата (было изменение с версии OpenSSL версии 1.0), стоит сделать ссылку, используя как -subject_hash_old, так и -subject_hash, хотя по умолчанию OpenSSL должен использовать только новый формат.