Поддерживает ли 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глобалы в Савоне без особых забот.

Другие вопросы по тегам