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 должен искать сертификаты. У кого-нибудь была похожая проблема?
1 ответ
Каталог, указанный в CApath, должен иметь специальную структуру. Из документов OpenSSL
Если CApath не равен NULL, он указывает на каталог, содержащий сертификаты CA в формате PEM. Каждый из файлов содержит один сертификат CA. Файлы ищутся по хэш-значению имени субъекта CA, которое должно быть доступно. Если существует более одного сертификата CA с одним и тем же хеш-значением имени, расширение должно быть другим (например, 9d66eef0.0, 9d66eef0.1 и т. Д.). Поиск выполняется по порядку добавочного номера независимо от других свойств сертификатов. Используйте утилиту c_rehash для создания необходимых ссылок
Если я не ошибаюсь, вы можете использовать каталог как CApath, если:
- Он содержит файлы в формате pem, содержащие права доступа в каждом файле.
- Вы запускаете c_rehash (или создаете вручную соответствующие символические ссылки) в нем.