проверьте ваш cert.pem и ваш key.pem
ключ сертификата должен иметь один
-----BEGIN CERTIFICATE-----
MIIFGDCCBACgAwIBAgIKG1DIagAAAAAAAzANBgkqhkiG9w0BAQsFADCBvDEkMCIG
....
-----END CERTIFICATE-----
ваш key.pem должен иметь
-----BEGIN PRIVATE KEY-----
CSqGSIb3DQEJARYVY2Fjb250YWN0QGVzY3JlZW4uY29tMQswCQYDVQQGEwJVUzEP
....
-----END PRIVATE KEY-----
и в нем могут быть некоторые сертификаты, но это не имеет значения для этого случая. (Хотя для меня это так, как curl не работает без дополнительных сертификатов)
У веб-службы, с которой я разговариваю, есть хороший корневой ЦС, но ключи аутентификации клиента не являются доверенными, поэтому, вероятно, именно поэтому дополнительные сертификаты заставляют работать curl.
Получение тех из вашего клиентского сертификата было тем, что вызвало у меня проблемы.
вот что сработало для меня.
openssl pkcs12 -in Client.pfx -clcerts -nokeys -out cert.pem
openssl pkcs12 -in Client.pfx -nodes -out key.pem
каждый предложит вам ввести пароль для импорта
и вы можете установить пароль Pem, если хотите. (вы должны будете установить это в коде ruby позже)
require 'savon'
client = Savon::Client.new "https://service/Service.asmx?wsdl"
client.http.auth.ssl.cert_key_file = "key.pem"
client.http.auth.ssl.cert_file = "cert.pem"
client.http.auth.ssl.verify_mode=:peer
p client.wsdl.soap_actions
Вы также можете проверить с помощью curl
curl -v -E key.pem https://services/Service.asmx?wsdl