Взаимная аутентификация с Jruby Manticore

Я пытаюсь подключиться к удаленному серверу, который требует взаимной аутентификации. Я получил файл .p12 с сервера и использовал следующие команды для создания закрытого ключа и сертификата клиента:

openssl pkcs12 -in my_dev.p12 -out clientCert.crt -nokeys -clcerts
openssl pkcs12 -in my_dev.p12  -nocerts -nodes -passin pass:mypassword | openssl rsa -out privkey.pem

И я использовал следующий код для настройки клиента Manticore:

client = Manticore::Client.new(
    pool_max: 200,
    pool_max_per_route: 200,
    ssl: { verify: :disable, client_key: client_key , client_cert: client_cert })

url = "https://my_url.com"
resp = client.get(url).call

Ответ, который я получаю, таков:

401 Unauthorized
Unauthorized
This server could not verify that you\nare authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.

Я очень новичок в использовании взаимной аутентификации и не уверен, где именно я ошибаюсь. Правильно ли я извлек clientCert и privateKey? Правильно ли я предоставляю ключ и сертификат Manticore?


person bkahler    schedule 28.07.2015    source источник


Ответы (1)


Вы можете использовать файлы PKCS12 непосредственно из Manticore с параметром ssl[:keystore]:

client = Manticore::Client.new(
  pool_max: 200,
  pool_max_per_route: 200,
  ssl: { keystore: "/path/to/auth.p12", keystore_password: "your_password" }
)

keystore используется для сертификатов, которые вы хотите предоставить удаленному серверу, а truststore используется для общедоступных сертификатов, которые вы хотите использовать для проверки подлинности удаленного сервера; вам, вероятно, не следует использовать verify: :disable в этом случае, так как вы хотите проверить подлинность другого конца соединения.

person Chris Heald    schedule 04.08.2015
comment
Спасибо за ответ Крис. Я настроил клиент, как вы описали выше, но теперь я получаю эту ошибку: Manticore::ClientProtocolException: Ошибка построения пути PKIX: sun.security.provider.certpath.SunCertPathBuilderException: невозможно найти действительный путь сертификации к запрошенной цели. Это проблема с моим клиентом или с сервером? - person bkahler; 05.08.2015
comment
Вероятно, это связано с тем, что Manticore не может проверить сертификат сервера (т. е. потому что это не сертификат, подписанный ЦС, и/или потому что у вас нет соответствующих сертификатов). :truststore позволит вам указать хранилище доверия для использования (т. е. хранилище, содержащее общедоступную половину SSL-сертификата сервера), или вы можете указать ca_file, который представляет собой цепочку сертификатов X509. - person Chris Heald; 05.08.2015
comment
Кроме того, вы можете попробовать это с verify: :disable, чтобы убедиться, что это действительно проблема, хотя, как я уже упоминал, я не рекомендую это для производственного использования, поскольку это означает, что вы потенциально можете подключиться к ненадежному серверу. - person Chris Heald; 05.08.2015
comment
С verify: :disable я получаю следующее: 401 Unauthorized Unauthorized ”This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.” Должен ли я использовать p12, который мне предоставили, как есть, или мне нужно где-то сделать преобразование? Я также связался с серверной командой, чтобы убедиться, что на этом конце все настроено так, как ожидалось. - person bkahler; 05.08.2015
comment
Вы должны использовать его как есть. спецификации Manticore для аутентификации клиента есть пример использования магазина .p12. Вероятно, вы можете протестировать файл с помощью openssl s_client, чтобы убедиться, что он правильно аутентифицируется вне Manticore. Возможно, вы тоже нашли ошибку — аутентификация клиентского сертификата тщательно не тестировалась, но я буду рад помочь разобраться и исправить ее, если это так (я автор Manticore). - person Chris Heald; 05.08.2015
comment
Я пробежал openssl s_client -connect my_url.com:443 -ssl3 ... что я здесь ищу ? Извините, что туда-сюда, но я очень новичок в этом. - person bkahler; 06.08.2015
comment
Вы можете проверить, работает ли файл p12 для аутентификации, например: openssl pkcs12 -in [PKCS12 file] -out [whatever].key; openssl s_client -tls1 -connect servername.com:443 -cert [whatever].key -key [whatever].key. Также убедитесь, что это действительный сертификат аутентификации клиента, как описано здесь. - person Chris Heald; 06.08.2015
comment
Давайте продолжим обсуждение в чате. - person bkahler; 06.08.2015
comment
Так долго после того, как мы провели это обсуждение, оказалось, что мой целевой сервер требовал как взаимной аутентификации, так и базовой аутентификации. Мантикора работает как положено. - person bkahler; 10.11.2015
comment
Ах! Хорошо знать. Спасибо за продолжение! - person Chris Heald; 10.11.2015