Назад | Перейти на главную страницу

openssl не находит сертификаты, если не указано с -CAfile

Я борюсь с openssl несколько дней.

Я скомпилировал openssl на устройстве ARM, и когда я запускаю openssl s_client -connect google.com:443 соединение не удастся с error 20: unable to get local issuer certificate.

Если я запустил эту команду, указав -CAfile /etc/ssl/certs/ca-certificates.crt соединение будет работать и возвращается verify return code: 0 (ok). Еще один тест, который я сделал, - запустить команду с -CApath /etc/ssl/certs/, в этом случае я все равно получу ошибка 20

Поскольку OPENSSLDIR - это / usr / lib / ssl, мне удалось связать его с / etc / ssl / certs, теперь в файловой системе этот каталог выглядит так:

ls -l /usr/lib/ssl
certs -> /etc/ssl/certs

Я не понимаю, что мне не хватает и как установить каталог, в котором openssl должен искать сертификаты. У кого-то была подобная проблема?

Каталог, указанный в CApath, должен иметь особую структуру. Из Документы OpenSSL

Если CApath не NULL, он указывает на каталог, содержащий сертификаты CA в формате PEM. Файлы каждый содержит один сертификат CA. Файлы ищутся по хэш-значению имени субъекта CA, которое, следовательно, должно быть доступно. Если существует более одного сертификата CA с одинаковым значением хэша имени, расширение должно быть другим (например, 9d66eef0.0, 9d66eef0.1 и т. Д.). Поиск выполняется в порядке следования добавочных номеров, независимо от других свойств сертификатов. Используйте утилиту c_rehash для создания необходимых ссылок

Если я не ошибаюсь, вы можете использовать каталог как CApath, если:

  • Он содержит файлы в формате pem, содержащие полномочия в каждом файле.
  • Вы запускаете в нем c_rehash (или создаете вручную соответствующие символические ссылки).