По умолчанию протокол TLS только подтверждает идентичность сервера клиенту, оставляя аутентификацию клиента серверу на уровне приложений, например, HTTP-аутентификация Basic.
Взаимная аутентификация TLS относитсяклиенту и серверу, аутентифицирующим друг друга одновременно.Он может использоваться как альтернатива базовой аутентификации HTTP.Это также часто называют проверкой подлинности на основе сертификатов.
Похоже, вы получаете эту ошибку (но работает с verify: false
), потому что сертификат сервера не является доверенным.Это самоподписанный?Или, возможно, центр сертификации (ЦС), выдавший сертификат, не является доверенным в вашей системе.
HTTParty построен поверх Net::HTTP
, который использует OpenSSL
, который получает сертификаты доверенного ЦС отсистема, например /etc/ssl/cert.pem
.Хотя вы можете переопределить переменную окружения SSL_CERT_FILE
, я не думаю, что это хорошая идея, поскольку она может повлиять на другие части вашего приложения.Лучшим решением было бы передать сертификаты CA только HTTParty.
Я никогда не использовал HTTParty, так что терпите меня.Но если быстро взглянуть на код и предположить, что вы используете значение по умолчанию ConnectionAdapter
, похоже, вам нужно определить опции pem
и ssl_ca_file
, которые будут определять клиент и сертификат CAфайлы соответственно.Также обратите внимание, что при этом будет проверять сертификат на .
class ServiceClient
include HTTParty
pem "path/to/client_cert_and_key.pem"
ssl_ca_file "path/to/ca_certificates.pem"
end
Я не думаю, что это связано с вашей проблемой, но если ваш клиентский ключ имеет парольную фразу,не забудьте передать его на pem(pem_contents, password)
.
HTH.Лучший.