Я пытаюсь использовать механизм CAPI с OpenSSL, чтобы использовать хранилище сертификатов Windows при подключении к брокеру MQTT, но у меня возникла проблема, когда он, похоже, не использует сертификат CA из хранилища.
(Это существо для MQTT упоминается в качестве контекста, но сам MQTT не вовлечен в проблему.)
Я вернулся к использованию openssl.exe для тестирования, чтобы устранить проблемы в моемсобственный кодЯ использую предварительно скомпилированные двоичные файлы v1.1.1a из здесь , как указано в вики OpenSSL.
Он может найти сертификат CA в хранилище сертификатов Windows через
openssl engine capi -t -post store_name:ROOT -post list_options:8 -post lookup_cert:mqtt
но, похоже, он не используется для проверки сертификата сервера при подключении к моему брокеру с использованием
openssl s_client -connect 192.168.56.101:8883 -showcerts -engine capi
(я добавил сертификат CA в свой личный магазин для этого теста, так как яне удается найти способ передачи команд в механизм CAPI при использовании s_client, и по умолчанию используется личное хранилище.)
Клиентское соединение сообщает
engine "capi" set.
и перечисляет правильные отправленные сертификатысервером (я могу сопоставить детали корневого с данными в магазине), но дает мне
verify error:num=19:self signed certificate in certificate chain
, что, как я понимаю, означает, что корневой сертификат не может быть найден в магазине ипоэтому сервер и сертификат CA, предоставленные сервером, не являются доверенными, и поэтому корневой сертификат цепочки считается как самоподписанным, так и ненадежным.
Я установил, что сертификаты действительны при выполнении успешного подключенияIon (с OpenSSL, но без CAPI) в моем собственном клиентском приложении при непосредственном предоставлении файла сертификата CA.
Поэтому у меня следующие вопросы:
- Чтобы облегчить тестирование, есть ли способпередавать команды движка в s_client?
- Есть ли проблемы с проверкой сертификатов механизма CAPI?Мой поиск на сегодняшний день показывает, что он должен работать.
- Есть ли что-то, что я мог пропустить в моей настройке?