Поддерживает ли SAVON аутентификацию сертификатов на стороне клиента?
Я оцениваю savon для использования веб-сервисов... но я не нахожу никакой информации, если я могу использовать SSL-сертификат на стороне клиента для аутентификации на сервере, который предоставляет веб-сервисы SOAP. Я прочитал документацию, но ничего не нашел по этому поводу.
Кто-нибудь знает, поддерживает ли SAVON аутентификацию сертификата на стороне клиента?
С уважением Фак
3 ответа
Последняя стабильная версия Savon (на данный момент 2.2.0) поддерживает SSL-сертификаты клиента через глобальные параметры. Пожалуйста, обратитесь к разделу SSL в документации.
Вот пример кода, предполагая, что httpclient используется с httpi:
savonConfig = {
:namespace => "http://...com",
:endpoint => 'https://...:557/x/b/c',
#:wsdl => 'https://...:557/x/b/c?wsdl',
:log_level => :debug,
:log => true,
:ssl_verify_mode => :none,
:ssl_cert_file => 'publicCert.pem',
:ssl_cert_key_file => 'privateKey.pem',
:ssl_cert_key_password => '1234',
:open_timeout => 600,
:read_timeout => 600
}
client = Savon.client savonConfig
soapBody = {
...
}
calcResponse = client.call(:charge, :message => soapBody)
Если у вас есть файл сертификата / ключа pfx, у вас могут возникнуть проблемы с его непосредственным использованием - поэтому вы можете разделить их на отдельные файлы - см. Эту страницу для получения дополнительной информации: Извлечение открытого / закрытого ключа из файла PKCS12 для последующего использования в SSH-. ПК-Authentification
Надеюсь, это поможет!
Даниил
У нас возникают проблемы при попытке заставить клиента savon работать с аутентификацией клиента ssl, но в то же время обходить проверку хоста....
https://github.com/savonrb/savon/issues/679
client = Savon.client(log_level: :debug,
log: true,
ssl_verify_mode: :none,
ssl_cert_file: (Rails.root + 'signed.cer').to_s,
ssl_cert_key_file: ('private.key').to_s,
wsdl: "https://example.com/Service?wsdl",
endpoint: "https://example.com/Service")
завершается неудачно с запросом Like HTTPI GET к wir.dhswir.org (net_http) HTTPI::SSLError: SSL_read: сбой рукопожатия ssl
нет информации..
Мы пробовали savon 2.2.0, 2.3.0 и 2.11.0. со слегка изменяющимися сообщениями об ошибках.
Мы используем тот же ключ в формате PEM и сертификат для сохранения и используем Unix WGET для сравнения. WGET потерпит неудачу, если мы не передадим --no-check-Certificate, однако, если мы добавим, что он проходит и может выполнить аутентификацию клиента ssl и получить доступ
wget 'https://example.com/CDC/VaccinationService?wsdl' --certificate=example-int-wi-signed.cer --private-key=private.key -O- --no-check-certificate
Просто добавьте к предыдущим двум ответам: если использование openssl непосредственно на терминале для извлечения файла .pfx не сработало для вас, попробуйте использовать этот код, чтобы разбить .pfx в 3 разных файлах .pem:
require 'openssl' # v2.2.0
file = File.open('path_to_file.pfx','r')
password = "mypassword"
pfx_file = OpenSSL::PKCS12.new(file.read,password)
key_file = File.open("key.pem","w")
ca_file = File.open("ca.pem","w")
cert_file = File.open("cert.pem","w")
key_file.write(pfx_file.key.to_s)
# You could choose any of the available CA's, it doesn't need to be the first.
ca_file.write(pfx_file.ca_certs[0].to_s)
cert_file.write(pfx_file.certificate.to_s)
key_file.close
ca_file.close
cert_file.close
При этом вы должны быть в состоянии заполнить
ssl
глобалы в Савоне без особых забот.